commit b61d3be42339ea50d3ad81aa54d344734e494eae Author: Asoka.Wang Date: Thu Jul 3 18:05:32 2025 +0800 init diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3729ff0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*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/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..25114b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,411 @@ +## 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 + +**/wwwroot/upload +!**/ZhonTai.Admin/Core/Logs +!**/views/admin/logs +/ZhonTai.sln.EasyRun.json +!**/zhontai.ui.admin.vue3/bin + +**/ZhonTai.Admin/ZhonTai.Admin.xml +**/ZhonTai.Admin.Core/ZhonTai.Admin.Core.xml +**/ZhonTai.Admin.Contracts/ZhonTai.Admin.Contracts.xml +**/ZhonTai.ApiUI/ZhonTai.ApiUI.xml +**/ZhonTai.Common/ZhonTai.Common.xml +**/ZhonTai.DynamicApi/ZhonTai.DynamicApi.xml \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4e3c578 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 zhontai + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/src/.idea/.idea.ZhonTai/.idea/.gitignore b/src/.idea/.idea.ZhonTai/.idea/.gitignore new file mode 100644 index 0000000..f96bcfd --- /dev/null +++ b/src/.idea/.idea.ZhonTai/.idea/.gitignore @@ -0,0 +1,13 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# Rider 忽略的文件 +/contentModel.xml +/.idea.ZhonTai.iml +/projectSettingsUpdater.xml +/modules.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/src/.idea/.idea.ZhonTai/.idea/.name b/src/.idea/.idea.ZhonTai/.idea/.name new file mode 100644 index 0000000..8afc39c --- /dev/null +++ b/src/.idea/.idea.ZhonTai/.idea/.name @@ -0,0 +1 @@ +ZhonTai \ No newline at end of file diff --git a/src/.idea/.idea.ZhonTai/.idea/MarsCodeWorkspaceAppSettings.xml b/src/.idea/.idea.ZhonTai/.idea/MarsCodeWorkspaceAppSettings.xml new file mode 100644 index 0000000..9670e31 --- /dev/null +++ b/src/.idea/.idea.ZhonTai/.idea/MarsCodeWorkspaceAppSettings.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/src/.idea/.idea.ZhonTai/.idea/indexLayout.xml b/src/.idea/.idea.ZhonTai/.idea/indexLayout.xml new file mode 100644 index 0000000..8c97f8a --- /dev/null +++ b/src/.idea/.idea.ZhonTai/.idea/indexLayout.xml @@ -0,0 +1,10 @@ + + + + + ../../SPMS.Portal + + + + + \ No newline at end of file diff --git a/src/Directory.Build.props b/src/Directory.Build.props new file mode 100644 index 0000000..196de99 --- /dev/null +++ b/src/Directory.Build.props @@ -0,0 +1,5 @@ + + + net9.0 + + \ No newline at end of file diff --git a/src/ZhonTai.sln b/src/ZhonTai.sln new file mode 100644 index 0000000..fbbaabf --- /dev/null +++ b/src/ZhonTai.sln @@ -0,0 +1,114 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZhonTai.Admin.Host", "modules\admin\ZhonTai.Admin.Host\ZhonTai.Admin.Host.csproj", "{6F47A41A-085E-4422-BB73-5A2CBAA07D9F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZhonTai.Admin", "modules\admin\ZhonTai.Admin\ZhonTai.Admin.csproj", "{E725F0A1-0B03-406F-B84B-0F486C6137FC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZhonTai.Common", "platform\ZhonTai.Common\ZhonTai.Common.csproj", "{97D32A49-994C-44C5-A167-51E71D173B6F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZhonTai.Admin.Tests", "modules\admin\ZhonTai.Admin.Tests\ZhonTai.Admin.Tests.csproj", "{69A9CD28-39CE-415E-8150-A4A876E708FD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZhonTai.DynamicApi", "platform\ZhonTai.DynamicApi\ZhonTai.DynamicApi.csproj", "{BDD8E9DB-896C-4340-A7E6-DFE341DE86C2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "05.platform", "05.platform", "{7D22DC19-78FC-4277-9768-06B5AF60FD14}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "02.build", "02.build", "{A6C50476-5236-4FD3-8C29-6449494846C0}" + ProjectSection(SolutionItems) = preProject + platform\Directory.Build.props = platform\Directory.Build.props + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZhonTai.ApiUI", "platform\ZhonTai.ApiUI\ZhonTai.ApiUI.csproj", "{A6911102-A4F8-4000-A997-045F84F73060}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "01.sln", "01.sln", "{DA553AC2-CFE8-4DF7-B4BF-E57252CE5B83}" + ProjectSection(SolutionItems) = preProject + Directory.Build.props = Directory.Build.props + ZhonTai.sln.EasyRun.json = ZhonTai.sln.EasyRun.json + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "04.modules", "04.modules", "{626D43B7-A210-4754-BB59-357F917D5E86}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "admin", "admin", "{65CF5483-DF86-41D7-B367-7C2E28C1672D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "im", "im", "{0602EECF-035B-42C2-B534-E29BC24DE646}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZhonTai.IMServer", "modules\im\ZhonTai.IMServer\ZhonTai.IMServer.csproj", "{8EB07596-339B-420A-BB32-1FB69D7E7BA5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "03.gateways", "03.gateways", "{908FBE9E-EF24-4680-9C2F-259EC54D6AC6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZhonTai.Gateway.Yarp", "gateways\ZhonTai.Gateway.Yarp\ZhonTai.Gateway.Yarp.csproj", "{979BE067-16EE-458F-B414-271749B0C038}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZhonTai.Admin.Core", "modules\admin\ZhonTai.Admin.Core\ZhonTai.Admin.Core.csproj", "{794CBF41-AF02-4B03-B1FE-C362C501F824}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZhonTai.Admin.Contracts", "modules\admin\ZhonTai.Admin.Contracts\ZhonTai.Admin.Contracts.csproj", "{547FC35E-7642-43AF-BCFA-72EED6FC483A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6F47A41A-085E-4422-BB73-5A2CBAA07D9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6F47A41A-085E-4422-BB73-5A2CBAA07D9F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6F47A41A-085E-4422-BB73-5A2CBAA07D9F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6F47A41A-085E-4422-BB73-5A2CBAA07D9F}.Release|Any CPU.Build.0 = Release|Any CPU + {E725F0A1-0B03-406F-B84B-0F486C6137FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E725F0A1-0B03-406F-B84B-0F486C6137FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E725F0A1-0B03-406F-B84B-0F486C6137FC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E725F0A1-0B03-406F-B84B-0F486C6137FC}.Release|Any CPU.Build.0 = Release|Any CPU + {97D32A49-994C-44C5-A167-51E71D173B6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97D32A49-994C-44C5-A167-51E71D173B6F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97D32A49-994C-44C5-A167-51E71D173B6F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97D32A49-994C-44C5-A167-51E71D173B6F}.Release|Any CPU.Build.0 = Release|Any CPU + {69A9CD28-39CE-415E-8150-A4A876E708FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {69A9CD28-39CE-415E-8150-A4A876E708FD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {69A9CD28-39CE-415E-8150-A4A876E708FD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {69A9CD28-39CE-415E-8150-A4A876E708FD}.Release|Any CPU.Build.0 = Release|Any CPU + {BDD8E9DB-896C-4340-A7E6-DFE341DE86C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BDD8E9DB-896C-4340-A7E6-DFE341DE86C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BDD8E9DB-896C-4340-A7E6-DFE341DE86C2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BDD8E9DB-896C-4340-A7E6-DFE341DE86C2}.Release|Any CPU.Build.0 = Release|Any CPU + {A6911102-A4F8-4000-A997-045F84F73060}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A6911102-A4F8-4000-A997-045F84F73060}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A6911102-A4F8-4000-A997-045F84F73060}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A6911102-A4F8-4000-A997-045F84F73060}.Release|Any CPU.Build.0 = Release|Any CPU + {8EB07596-339B-420A-BB32-1FB69D7E7BA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8EB07596-339B-420A-BB32-1FB69D7E7BA5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8EB07596-339B-420A-BB32-1FB69D7E7BA5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8EB07596-339B-420A-BB32-1FB69D7E7BA5}.Release|Any CPU.Build.0 = Release|Any CPU + {979BE067-16EE-458F-B414-271749B0C038}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {979BE067-16EE-458F-B414-271749B0C038}.Debug|Any CPU.Build.0 = Debug|Any CPU + {979BE067-16EE-458F-B414-271749B0C038}.Release|Any CPU.ActiveCfg = Release|Any CPU + {979BE067-16EE-458F-B414-271749B0C038}.Release|Any CPU.Build.0 = Release|Any CPU + {794CBF41-AF02-4B03-B1FE-C362C501F824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {794CBF41-AF02-4B03-B1FE-C362C501F824}.Debug|Any CPU.Build.0 = Debug|Any CPU + {794CBF41-AF02-4B03-B1FE-C362C501F824}.Release|Any CPU.ActiveCfg = Release|Any CPU + {794CBF41-AF02-4B03-B1FE-C362C501F824}.Release|Any CPU.Build.0 = Release|Any CPU + {547FC35E-7642-43AF-BCFA-72EED6FC483A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {547FC35E-7642-43AF-BCFA-72EED6FC483A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {547FC35E-7642-43AF-BCFA-72EED6FC483A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {547FC35E-7642-43AF-BCFA-72EED6FC483A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {6F47A41A-085E-4422-BB73-5A2CBAA07D9F} = {65CF5483-DF86-41D7-B367-7C2E28C1672D} + {E725F0A1-0B03-406F-B84B-0F486C6137FC} = {65CF5483-DF86-41D7-B367-7C2E28C1672D} + {97D32A49-994C-44C5-A167-51E71D173B6F} = {7D22DC19-78FC-4277-9768-06B5AF60FD14} + {69A9CD28-39CE-415E-8150-A4A876E708FD} = {65CF5483-DF86-41D7-B367-7C2E28C1672D} + {BDD8E9DB-896C-4340-A7E6-DFE341DE86C2} = {7D22DC19-78FC-4277-9768-06B5AF60FD14} + {A6911102-A4F8-4000-A997-045F84F73060} = {7D22DC19-78FC-4277-9768-06B5AF60FD14} + {65CF5483-DF86-41D7-B367-7C2E28C1672D} = {626D43B7-A210-4754-BB59-357F917D5E86} + {0602EECF-035B-42C2-B534-E29BC24DE646} = {626D43B7-A210-4754-BB59-357F917D5E86} + {8EB07596-339B-420A-BB32-1FB69D7E7BA5} = {0602EECF-035B-42C2-B534-E29BC24DE646} + {979BE067-16EE-458F-B414-271749B0C038} = {908FBE9E-EF24-4680-9C2F-259EC54D6AC6} + {794CBF41-AF02-4B03-B1FE-C362C501F824} = {65CF5483-DF86-41D7-B367-7C2E28C1672D} + {547FC35E-7642-43AF-BCFA-72EED6FC483A} = {65CF5483-DF86-41D7-B367-7C2E28C1672D} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {AB40D0C5-E3EA-4A9B-86C2-38F0BB33FC04} + EndGlobalSection +EndGlobal diff --git a/src/ZhonTai.sln.EasyRun.json b/src/ZhonTai.sln.EasyRun.json new file mode 100644 index 0000000..035a412 --- /dev/null +++ b/src/ZhonTai.sln.EasyRun.json @@ -0,0 +1,49 @@ +{ + "SettingsId": "2b14968a-f3ca-4849-bcad-5d4f210d2960", + "Profiles": [ + { + "Name": "Default", + "LoggingTargetType": 0, + "LoggingPath": "./.logs", + "LoggerUrl": null, + "UseTye": true, + "TyePort": 10000, + "Filter": ".Host|.Gateway|.IMServer", + "Services": [ + { + "ServiceType": 0, + "Name": "ZhonTai.Gateway.Yarp", + "TyeName": null, + "ProjectFile": "gateways\\ZhonTai.Gateway.Yarp\\ZhonTai.Gateway.Yarp.csproj", + "DefaultSelected": true, + "Bindings": "::16010", + "Arguments": null, + "EnvVariables": null, + "Replicas": 1 + }, + { + "ServiceType": 0, + "Name": "ZhonTai.IMServer", + "TyeName": null, + "ProjectFile": "modules\\im\\ZhonTai.IMServer\\ZhonTai.IMServer.csproj", + "DefaultSelected": true, + "Bindings": "::17010", + "Arguments": null, + "EnvVariables": null, + "Replicas": 1 + }, + { + "ServiceType": 0, + "Name": "ZhonTai.Admin.Host", + "TyeName": null, + "ProjectFile": "modules\\admin\\ZhonTai.Admin.Host\\ZhonTai.Admin.Host.csproj", + "DefaultSelected": true, + "Bindings": "::18010", + "Arguments": null, + "EnvVariables": null, + "Replicas": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/build/pkg_push.ps1 b/src/build/pkg_push.ps1 new file mode 100644 index 0000000..d05a355 --- /dev/null +++ b/src/build/pkg_push.ps1 @@ -0,0 +1,64 @@ +#定义全局变量 + +$buildFolder = (Get-Item -Path "./" -Verbose).FullName +$rootFolder = Join-Path $buildFolder "../" +$apiKey = $args[0] +if ([System.String]::IsNullOrWhiteSpace($apiKey)) +{ + $apiKey = $env:NUGET_KEY +} +$sourceUrl = "https://api.nuget.org/v3/index.json" + +Write-Host "buildFolder:" $buildFolder +Write-Host "rootFolder:" $rootFolder + +$nuGetOutputFolder = Join-Path $buildFolder "/packages" +Write-Host "NuGetOutputFolder:" $nuGetOutputFolder + +#编译解决方案 +$solutionPath = "../ZhonTai.sln"; +# Write-Host $solutionPath +# pause + +Write-Host "dotnet build -- start" +dotnet build $solutionPath -c Release +Write-Host "dotnet build -- end" + +if($LASTEXITCODE -eq 0){ + #success +} +else{ + throw "Build Error!"; +} +# pause + +#打包之前先删除nuget包 +Remove-Item "$nuGetOutputFolder/*" -recurse + +# 指定项目打包 +$projects = ( + "modules\admin\ZhonTai.Admin", + "modules\admin\ZhonTai.Admin.Contracts", + "modules\admin\ZhonTai.Admin.Core", + "platform\ZhonTai.ApiUI", + "platform\ZhonTai.Common", + "platform\ZhonTai.DynamicApi" +) + +Write-Host "dotnet pack -- start" +foreach($project in $projects) { +$projectFolder = Join-Path $rootFolder $project +Write-Host "projectFolder:" $projectFolder +dotnet pack $projectFolder --no-build -c Release /p:SourceLinkCreate=true /p:SolutionDir=$rootFolder -o $nuGetOutputFolder; +} +Write-Host "dotnet pack -- end" +# pause + +Write-Host "dotnet nuget push -- start" +$nupkgs = Join-Path $nuGetOutputFolder "/*.nupkg" +$snupkgs = Join-Path $nuGetOutputFolder "/*.snupkg" +dotnet nuget push $nupkgs -s $sourceUrl -k $apiKey --skip-duplicate +dotnet nuget push $snupkgs -s $sourceUrl -k $apiKey --skip-duplicate +Write-Host "dotnet nuget push -- end" + +pause \ No newline at end of file diff --git a/src/gateways/ZhonTai.Gateway.Yarp/Core/Configs/GatewayConfig.cs b/src/gateways/ZhonTai.Gateway.Yarp/Core/Configs/GatewayConfig.cs new file mode 100644 index 0000000..a4ca8f2 --- /dev/null +++ b/src/gateways/ZhonTai.Gateway.Yarp/Core/Configs/GatewayConfig.cs @@ -0,0 +1,48 @@ +namespace ZhonTai.Gateway.Yarp.Core.Configs; +public class GatewayConfig +{ + public static class Models + { + /// + /// 模块信息 + /// + public class ModuleInfo + { + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 路径 + /// + public string Url { get; set; } + } + + /// + /// 健康检查配置 + /// + public class HealthChecksConfig + { + /// + /// 启用 + /// + public bool Enable { get; set; } = true; + + /// + /// 访问路径 + /// + public string Path { get; set; } = "/health"; + } + } + + /// + /// 模块列表 + /// + public List ModuleList { get; set; } + + /// + /// 健康检查配置 + /// + public Models.HealthChecksConfig HealthChecks { get; set; } = new Models.HealthChecksConfig(); +} diff --git a/src/gateways/ZhonTai.Gateway.Yarp/Program.cs b/src/gateways/ZhonTai.Gateway.Yarp/Program.cs new file mode 100644 index 0000000..aefba04 --- /dev/null +++ b/src/gateways/ZhonTai.Gateway.Yarp/Program.cs @@ -0,0 +1,77 @@ +using NLog.Web; +using System.Reflection; +using ZhonTai.Gateway.Yarp.Core.Configs; + +var builder = WebApplication.CreateBuilder(args); + +//清空日志供应程序,避免.net自带日志输出到命令台 +builder.Logging.ClearProviders(); +//使用NLog日志 +builder.Host.UseNLog(); + +var healthChecks = builder.Configuration.GetSection("GatewayConfig").Get()?.HealthChecks; +//添加健康检查 +if (healthChecks != null && healthChecks.Enable) +{ + builder.Services.AddHealthChecks(); +} + +//添加跨域 +builder.Services.AddCors(options => +{ + options.AddPolicy("AllowAnyPolicy", policy => + { + policy + .AllowAnyOrigin() + .AllowAnyHeader() + .AllowAnyMethod(); + }); +}); + +//添加代理 +builder.Services.AddReverseProxy() + .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy")); + +// Add services to the container. + +var app = builder.Build(); + +// Configure the HTTP request pipeline. + +//使用跨域 +app.UseCors("AllowAnyPolicy"); + +//使用健康检查 +if (healthChecks != null && healthChecks.Enable) +{ + app.MapHealthChecks(healthChecks.Path); +} + +//使用代理 +app.MapReverseProxy(); + +//首页 +app.MapGet("/", async (HttpResponse response) => +{ + var gatewayConfig = builder.Configuration.GetSection("GatewayConfig").Get(); + var moduleList = gatewayConfig?.ModuleList; + + var html = $""; + if (moduleList?.Count > 0) + { + moduleList.ForEach(m => + { + html += $"""{m.Name}
"""; + }); + } + else + { + html += $"The {Assembly.GetEntryAssembly()?.GetName().Name} has started."; + } + html += ""; + + response.ContentType = "text/html;charset=UTF-8"; + await response.WriteAsync(html); +}); + +app.Run(); \ No newline at end of file diff --git a/src/gateways/ZhonTai.Gateway.Yarp/Properties/launchSettings.json b/src/gateways/ZhonTai.Gateway.Yarp/Properties/launchSettings.json new file mode 100644 index 0000000..58edd00 --- /dev/null +++ b/src/gateways/ZhonTai.Gateway.Yarp/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:16010", + "sslPort": 0 + } + }, + "profiles": { + "ZhonTai.Gateway.Yarp": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "", + "applicationUrl": "http://localhost:16010", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/gateways/ZhonTai.Gateway.Yarp/ZhonTai.Gateway.Yarp.csproj b/src/gateways/ZhonTai.Gateway.Yarp/ZhonTai.Gateway.Yarp.csproj new file mode 100644 index 0000000..ef77576 --- /dev/null +++ b/src/gateways/ZhonTai.Gateway.Yarp/ZhonTai.Gateway.Yarp.csproj @@ -0,0 +1,15 @@ + + + 中台网关 + + + + net9.0 + enable + + + + + + + diff --git a/src/gateways/ZhonTai.Gateway.Yarp/appsettings.Development.json b/src/gateways/ZhonTai.Gateway.Yarp/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/src/gateways/ZhonTai.Gateway.Yarp/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/src/gateways/ZhonTai.Gateway.Yarp/appsettings.json b/src/gateways/ZhonTai.Gateway.Yarp/appsettings.json new file mode 100644 index 0000000..41e823c --- /dev/null +++ b/src/gateways/ZhonTai.Gateway.Yarp/appsettings.json @@ -0,0 +1,97 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "Urls": "http://*:16010", + "ReverseProxy": { + "Routes": { + "admin": { + "ClusterId": "admin", + "Match": { + "Path": "/api/admin/{**catch-all}", + //"Methods": [ "POST", "GET", "DELETE", "PUT" ], + "Hosts": [] + } + }, + "admin-doc": { + "ClusterId": "admin", + "Match": { + "Path": "/doc/admin/{**catch-all}", + //"Methods": [ "POST", "GET", "DELETE", "PUT" ], + "Hosts": [] + } + }, + "admin-file": { + "ClusterId": "admin", + "Match": { + "Path": "/upload/{**catch-all}", + //"Methods": [ "POST", "GET", "DELETE", "PUT" ], + "Hosts": [] + } + }, + "app": { + "ClusterId": "app", + "Match": { + "Path": "/api/app/{**catch-all}", + //"Methods": [ "POST", "GET", "DELETE", "PUT" ], + "Hosts": [] + } + }, + "app-doc": { + "ClusterId": "app", + "Match": { + "Path": "/doc/app/{**catch-all}", + //"Methods": [ "POST", "GET", "DELETE", "PUT" ], + "Hosts": [] + } + } + }, + "Clusters": { + "admin": { + "Destinations": { + "destination1": { + "Address": "http://localhost:18010" + } + }, + "LoadBalancingPolicy": "RoundRobin" + }, + "app": { + "Destinations": { + "destination1": { + "Address": "http://localhost:18020" + } + }, + "LoadBalancingPolicy": "RoundRobin" + } + } + }, + //网关配置 + "GatewayConfig": { + //模块列表 + "ModuleList": [ + { + //文档名称 + "Name": "权限接口文档", + //文档地址 + "Url": "/doc/admin/index.html" + }, + { + //文档名称 + "Name": "app接口文档", + //文档地址 + "Url": "/doc/app/index.html" + } + ], + //健康检查 + "HealthChecks": { + //启用 + "Enable": true, + //访问路径 + "Path": "/health" + } + } +} \ No newline at end of file diff --git a/src/gateways/ZhonTai.Gateway.Yarp/nlog.config b/src/gateways/ZhonTai.Gateway.Yarp/nlog.config new file mode 100644 index 0000000..57f1069 --- /dev/null +++ b/src/gateways/ZhonTai.Gateway.Yarp/nlog.config @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO "ad_log"("Id", "Logged", "Level", "Message", "Logger", "Properties", "Callsite", "Exception") VALUES(@Id, @Logged, @Level, @Message, @Logger, @Properties, @Callsite, @Exception) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Core/Consts/AdminCacheKeys.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Core/Consts/AdminCacheKeys.cs new file mode 100644 index 0000000..c7da22c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Core/Consts/AdminCacheKeys.cs @@ -0,0 +1,22 @@ +using System.ComponentModel; + +namespace ZhonTai.Admin.Contracts.Core.Consts; + +/// +/// 缓存键 +/// +public static partial class AdminCacheKeys +{ + /// + /// 部门 admin:org:tenantId + /// + [Description("部门")] + public const string Org = "admin:org:"; + + /// + /// 获取部门缓存键 + /// + /// 租户Id + /// + public static string GetOrgKey(long tenantId) => $"{Org}{tenantId}"; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Core/Consts/DbConsts.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Core/Consts/DbConsts.cs new file mode 100644 index 0000000..88ecbd0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Core/Consts/DbConsts.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Contracts.Core.Consts; + +/// +/// 数据库常量 +/// +public static partial class DbConsts +{ + /// + /// 表名前缀 + /// + public const string TableNamePrefix = "base_"; + + /// + /// 旧表名前缀 + /// + public const string TableOldNamePrefix = "ad_"; + + /// + /// NPP 表前缀 + /// + public const string NPPTableOldPrefix = "npp_"; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Api/ApiEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Api/ApiEntity.cs new file mode 100644 index 0000000..4d40f48 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Api/ApiEntity.cs @@ -0,0 +1,82 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Domain.PermissionApi; +using ZhonTai.Admin.Domain.Permission; +using ZhonTai.Admin.Core.Entities; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Domain.Api; + +/// +/// 接口管理 +/// +[Table(Name = DbConsts.TableNamePrefix + "api", OldName = DbConsts.TableOldNamePrefix + "api")] +[Index("idx_{tablename}_01", nameof(ParentId) + "," + nameof(Path), true)] +public partial class ApiEntity : EntityBase, IChilds +{ + /// + /// 所属模块 + /// + public long ParentId { get; set; } + + /// + /// 接口命名 + /// + [Column(StringLength = 50)] + public string Name { get; set; } + + /// + /// 接口名称 + /// + [Column(StringLength = 500)] + public string Label { get; set; } + + /// + /// 接口地址 + /// + [Column(StringLength = 500)] + public string Path { get; set; } + + /// + /// 接口提交方法 + /// + [Column(StringLength = 50)] + public string HttpMethods { get; set; } + + /// + /// 启用接口日志 + /// + public bool EnabledLog { get; set; } = true; + + /// + /// 启用请求参数 + /// + public bool EnabledParams { get; set; } = false; + + /// + /// 启用响应结果 + /// + public bool EnabledResult { get; set; } = false; + + /// + /// 说明 + /// + [Column(StringLength = 500)] + public string Description { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + [Navigate(nameof(ParentId))] + public List Childs { get; set; } + + [NotGen] + [Navigate(ManyToMany = typeof(PermissionApiEntity))] + public ICollection Permissions { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Api/IApiRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Api/IApiRepository.cs new file mode 100644 index 0000000..8c94a7e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Api/IApiRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.Api; + +public interface IApiRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/AppLog/AppLogEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/AppLog/AppLogEntity.cs new file mode 100644 index 0000000..391d94d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/AppLog/AppLogEntity.cs @@ -0,0 +1,36 @@ +using FreeSql.DataAnnotations; + +namespace ZhonTai.Admin.Domain.AppLog; + +/// +/// 应用程序日志 +/// +[Table(Name = DbConsts.TableNamePrefix + "app_log", OldName = DbConsts.TableOldNamePrefix + "app_log")] +public partial class AppLogEntity +{ + /// + /// 主键Id + /// + [Column(Position = 1, IsPrimary = true, IsNullable = false)] + public long Id { get; set; } + + public DateTime Logged { get; set; } + + [Column(StringLength = 5)] + public string Level { get; set; } + + [Column(StringLength = -1)] + public string Message { get; set; } + + [Column(StringLength = 300)] + public string Logger { get; set; } + + [Column(StringLength = -1)] + public string Properties { get; set; } + + [Column(StringLength = 300)] + public string Callsite { get; set; } + + [Column(StringLength = -1)] + public string Exception { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Board/BoardEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Board/BoardEntity.cs new file mode 100644 index 0000000..ce5c70e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Board/BoardEntity.cs @@ -0,0 +1,51 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; + +namespace ZhonTai.Admin.Contracts.Domain.Board; + +/// +/// 看板实体 +/// +[Table(Name = "npp_dashboard")] +[Index("idx_{tablename}_01", nameof(Name) + "," + nameof(Sort), true)] +public class BoardEntity : EntityBase +{ + /// + /// 看板名称 + /// + [Column(StringLength = 100)] + public string Name { get; set; } + + /// + /// 功能简介 + /// + [Column(StringLength = 500)] + public string Description { get; set; } + + /// + /// 关键词 + /// + [Column(StringLength = 200)] + public string Keywords { get; set; } + + /// + /// 网址 + /// + [Column(StringLength = 500)] + public string Url { get; set; } + + /// + /// 需要安全认证 + /// + public bool Safety { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 排序 + /// + public int Sort { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Board/BoardUserEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Board/BoardUserEntity.cs new file mode 100644 index 0000000..8cd49b0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Board/BoardUserEntity.cs @@ -0,0 +1,25 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Entities; + +namespace ZhonTai.Admin.Contracts.Domain.Board; + +[Table(Name = "npp_dashboard_user")] +public class BoardUserEntity : EntityBase +{ + /// + /// 用户Id + /// + public long UserId { get; set; } + + /// + /// 看板Id + /// + public long BoardId { get; set; } + + /// + /// 字典类型 + /// + [NotGen] + public BoardEntity Board { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/CustomNavigation/CustomNavigationEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/CustomNavigation/CustomNavigationEntity.cs new file mode 100644 index 0000000..b0ef14f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/CustomNavigation/CustomNavigationEntity.cs @@ -0,0 +1,15 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Domain.DictType; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Contracts.Domain.CustomNavigation; + +[Table(Name = DbConsts.NPPTableOldPrefix + "CustomNavigation")] +[Index("idx_{tablename}_01", nameof(UserId), true)] +public partial class CustomNavigationEntity : EntityBase +{ + public long UserId { get; set; } + + public string CustomNavigationJson { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Dict/DictEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Dict/DictEntity.cs new file mode 100644 index 0000000..a07842b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Dict/DictEntity.cs @@ -0,0 +1,65 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Domain.DictType; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Domain.Dict; + +/// +/// 数据字典 +/// +[Table(Name = DbConsts.TableNamePrefix + "dict", OldName = DbConsts.TableOldNamePrefix + "dict")] +[Index("idx_{tablename}_01", nameof(DictTypeId) + "," + nameof(Name), true)] +public partial class DictEntity : EntityBase +{ + /// + /// 上级Id + /// + public long? ParentId { get; set; } + + /// + /// 字典类型Id + /// + [Column(OldName = "DictionaryTypeId")] + public long DictTypeId { get; set; } + + /// + /// 字典类型 + /// + [NotGen] + public DictTypeEntity DictType { get; set; } + + /// + /// 字典名称 + /// + [Column(StringLength = 50)] + public string Name { get; set; } + + /// + /// 字典编码 + /// + [Column(StringLength = 50)] + public string Code { get; set; } + + /// + /// 字典值 + /// + [Column(StringLength = 50)] + public string Value { get; set; } + + /// + /// 说明 + /// + [Column(StringLength = 500)] + public string Description { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 排序 + /// + public int Sort { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Dict/IDictRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Dict/IDictRepository.cs new file mode 100644 index 0000000..f49451d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Dict/IDictRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.Dict; + +public interface IDictRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/DictType/DictTypeEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/DictType/DictTypeEntity.cs new file mode 100644 index 0000000..b18fea8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/DictType/DictTypeEntity.cs @@ -0,0 +1,50 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; + +namespace ZhonTai.Admin.Domain.DictType; + +/// +/// 数据字典类型 +/// +[Table(Name = DbConsts.TableNamePrefix + "dict_type", OldName = DbConsts.TableOldNamePrefix + "dict_type")] +[Index("idx_{tablename}_01", nameof(Name), true)] +public class DictTypeEntity : EntityBase +{ + /// + /// 上级Id + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + [Column(StringLength = 50)] + public string Name { get; set; } + + /// + /// 编码 + /// + [Column(StringLength = 50)] + public string Code { get; set; } + + /// + /// 描述 + /// + [Column(StringLength = 500)] + public string Description { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 是否树形 + /// + public bool IsTree { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/DictType/IDictTypeRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/DictType/IDictTypeRepository.cs new file mode 100644 index 0000000..98a664a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/DictType/IDictTypeRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.DictType; + +public interface IDictTypeRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Doc/DocEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Doc/DocEntity.cs new file mode 100644 index 0000000..efe99d4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Doc/DocEntity.cs @@ -0,0 +1,68 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; + +namespace ZhonTai.Admin.Domain.Doc; + +/// +/// 文档 +/// +[Table(Name = DbConsts.TableNamePrefix + "doc", OldName = DbConsts.TableOldNamePrefix + "document")] +[Index("idx_{tablename}_01", nameof(ParentId) + "," + nameof(Label) + "," + nameof(TenantId), true)] +public partial class DocEntity : EntityTenant +{ + /// + /// 父级节点 + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + [Column(StringLength = 50)] + public string Label { get; set; } + + /// + /// 类型 + /// + [Column(MapType = typeof(int), CanUpdate = false)] + public DocType Type { get; set; } + + /// + /// 命名 + /// + [Column(StringLength = 500)] + public string Name { get; set; } + + /// + /// 内容 + /// + [Column(StringLength = -1)] + public string Content { get; set; } + + /// + /// Html + /// + [Column(StringLength = -1)] + public string Html { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 打开组 + /// + public bool? Opened { get; set; } + + /// + /// 排序 + /// + public int? Sort { get; set; } = 0; + + /// + /// 描述 + /// + [Column(StringLength = 100)] + public string Description { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Doc/DocType.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Doc/DocType.cs new file mode 100644 index 0000000..4d02d42 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Doc/DocType.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Domain.Doc; + +/// +/// 文档类型 +/// +public enum DocType +{ + /// + /// 分组 + /// + Group = 1, + + /// + /// Markdown文档 + /// + Markdown = 2 +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Doc/IDocRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Doc/IDocRepository.cs new file mode 100644 index 0000000..01ae599 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Doc/IDocRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.Doc; + +public interface IDocRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/DocImage/DocImageEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/DocImage/DocImageEntity.cs new file mode 100644 index 0000000..53173c4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/DocImage/DocImageEntity.cs @@ -0,0 +1,25 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Domain.Doc; + +namespace ZhonTai.Admin.Domain.DocImage; + +/// +/// 文档图片 +/// +[Table(Name = DbConsts.TableNamePrefix + "doc_image", OldName = DbConsts.TableOldNamePrefix + "document_image")] +[Index("idx_{tablename}_01", nameof(DocumentId) + "," + nameof(Url), true)] +public class DocImageEntity : EntityAdd +{ + /// + /// 文档Id + /// + public long DocumentId { get; set; } + + public DocEntity Document { get; set; } + + /// + /// 请求路径 + /// + public string Url { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/DocImage/IDocImageRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/DocImage/IDocImageRepository.cs new file mode 100644 index 0000000..ae5c153 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/DocImage/IDocImageRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.DocImage; + +public interface IDocImageRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Feedback/FeedbackEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Feedback/FeedbackEntity.cs new file mode 100644 index 0000000..daacbfd --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Feedback/FeedbackEntity.cs @@ -0,0 +1,91 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Entities; + +namespace ZhonTai.Admin.Contracts.Domain.Feedback; + +/// +/// 意见反馈实体 +/// +[Table(Name = DbConsts.NPPTableOldPrefix + "feedback")] +public class FeedbackEntity : EntityBase +{ + /// + /// 反馈标题 + /// + [Column(StringLength = 200)] + public string Title { get; set; } + + /// + /// 反馈类型 + /// + public FeedbackTypeEnum FeedbackType { get; set; } = FeedbackTypeEnum.Suggestion; + + /// + /// 被反馈团队 + /// + [Column(StringLength = 100)] + public string FeedbackTeam { get; set; } + + /// + /// 反馈人Id + /// + public long FeedbackPersonId { get; set; } + + /// + /// 反馈人姓名 + /// + [Column(StringLength = 50)] + public string FeedbackPersonName { get; set; } + + /// + /// 反馈人邮箱 + /// + [Column(StringLength = 100)] + public string FeedbackPersonEmail { get; set; } + + /// + /// 相关知情人 + /// + [Column(StringLength = 500)] + public string RelatedPersons { get; set; } + + /// + /// 建议内容 + /// + [Column(StringLength = -1)] + public string Content { get; set; } + + /// + /// 附件文件路径 + /// + [Column(StringLength = 1000)] + public string AttachmentPaths { get; set; } + + /// + /// 处理状态:10-待处理,15-处理中,20-已处理,30-已驳回 + /// + public FeedbackStatusEnum Status { get; set; } = FeedbackStatusEnum.Pending; + + /// + /// 处理人ID + /// + public long? ProcessorId { get; set; } + + /// + /// 处理人姓名 + /// + [Column(StringLength = 50)] + public string ProcessorName { get; set; } + + /// + /// 处理时间 + /// + public DateTime? ProcessTime { get; set; } + + /// + /// 处理备注 + /// + [Column(StringLength = 500)] + public string ProcessRemark { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Feedback/FeedbackStatusEnum.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Feedback/FeedbackStatusEnum.cs new file mode 100644 index 0000000..a8bf3c2 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Feedback/FeedbackStatusEnum.cs @@ -0,0 +1,27 @@ +namespace ZhonTai.Admin.Contracts.Domain.Feedback; + +/// +/// 反馈状态枚举 +/// +public enum FeedbackStatusEnum +{ + /// + /// 待处理 + /// + Pending = 10, + + /// + /// 处理中 + /// + Processing = 15, + + /// + /// 已处理 + /// + Completed = 20, + + /// + /// 已驳回 + /// + Rejected = 30 +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Feedback/FeedbackTeamProcessorEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Feedback/FeedbackTeamProcessorEntity.cs new file mode 100644 index 0000000..8dba217 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Feedback/FeedbackTeamProcessorEntity.cs @@ -0,0 +1,51 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Entities; + +namespace ZhonTai.Admin.Contracts.Domain.Feedback; + +/// +/// 反馈团队处理人实体 +/// +[Table(Name = DbConsts.NPPTableOldPrefix + "feedback_team_processor")] +public class FeedbackTeamProcessorEntity : EntityBase +{ + /// + /// 团队名称 + /// + [Column(StringLength = 100)] + public string TeamName { get; set; } + + /// + /// 站点 + /// + [Column(StringLength = 50)] + public string Site { get; set; } + + /// + /// 处理人ID(模块负责人) + /// + public long ProcessorId { get; set; } + + /// + /// 处理人姓名(模块负责人) + /// + [Column(StringLength = 50)] + public string ProcessorName { get; set; } + + /// + /// 处理人邮箱 + /// + [Column(StringLength = 100)] + public string ProcessorEmail { get; set; } + + /// + /// 是否启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 排序 + /// + public int Sort { get; set; } = 0; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Feedback/FeedbackTypeEnum.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Feedback/FeedbackTypeEnum.cs new file mode 100644 index 0000000..f9fe5ee --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Feedback/FeedbackTypeEnum.cs @@ -0,0 +1,34 @@ +namespace ZhonTai.Admin.Contracts.Domain.Feedback; + +/// +/// 反馈类型枚举 +/// +public enum FeedbackTypeEnum +{ + /// + /// Bug + /// + Bug = 1, + /// + /// 建议 + /// + Suggestion = 2, + /// + /// 投诉 + /// + Complaint = 3, + /// + /// 需求 + /// + Requirement = 4, + + /// + /// 咨询 + /// + Consultation= 5, + + /// + /// 其他 + /// + Other = 6 +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/File/FileEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/File/FileEntity.cs new file mode 100644 index 0000000..6aa6745 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/File/FileEntity.cs @@ -0,0 +1,78 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Entities; +using ZhonTai.Admin.Core.Attributes; +using OnceMi.AspNetCore.OSS; + +namespace ZhonTai.Admin.Domain; + +/// +/// 文件 +/// +[Table(Name = DbConsts.TableNamePrefix + "file", OldName = DbConsts.TableOldNamePrefix + "file")] +public partial class FileEntity : EntityBase +{ + /// + /// OSS供应商 + /// + [Column(MapType = typeof(string), StringLength = 50)] + public OSSProvider? Provider { get; set; } + + /// + /// 存储桶名称 + /// + [Column(StringLength = 200)] + public string BucketName { get; set; } + + /// + /// 文件目录 + /// + [Column(StringLength = 500)] + public string FileDirectory { get; set; } + + /// + /// 文件Guid + /// + [OrderGuid] + public Guid FileGuid { get; set; } + + /// + /// 保存文件名 + /// + [Column(StringLength = 200)] + public string SaveFileName { get; set; } + + /// + /// 文件名 + /// + [Column(StringLength = 200)] + public string FileName { get; set; } + + /// + /// 文件扩展名 + /// + [Column(StringLength = 20)] + public string Extension { get; set; } + + /// + /// 文件字节长度 + /// + public long Size { get; set; } + + /// + /// 文件大小格式化 + /// + [Column(StringLength = 50)] + public string SizeFormat { get; set; } + + /// + /// 链接地址 + /// + [Column(StringLength = 500)] + public string LinkUrl { get; set; } + + /// + /// md5码,防止上传重复文件 + /// + [Column(StringLength = 50)] + public string Md5 { get; set; } = string.Empty; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/File/IFileRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/File/IFileRepository.cs new file mode 100644 index 0000000..f321e42 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/File/IFileRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain; + +public interface IFileRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/LogAbstract/LogAbstract.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/LogAbstract/LogAbstract.cs new file mode 100644 index 0000000..83f358c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/LogAbstract/LogAbstract.cs @@ -0,0 +1,92 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; + +namespace ZhonTai.Admin.Domain; + +/// +/// 日志 +/// +public abstract class LogAbstract : EntityAdd, ITenant +{ + /// + /// 租户Id + /// + [Column(Position = 2, CanUpdate = false)] + public long? TenantId { get; set; } + + /// + /// 姓名 + /// + [Column(StringLength = 60)] + public string Name { get; set; } + + /// + /// IP + /// + [Column(StringLength = 100)] + public string IP { get; set; } + + /// + /// 国家 + /// + [Column(StringLength = 100)] + public string Country { get; set; } + + /// + /// 省份 + /// + [Column(StringLength = 100)] + public string Province { get; set; } + + /// + /// 城市 + /// + [Column(StringLength = 100)] + public string City { get; set; } + + /// + /// 网络服务商 + /// + [Column(StringLength = 100)] + public string Isp { get; set; } + + /// + /// 浏览器 + /// + [Column(StringLength = 100)] + public string Browser { get; set; } + + /// + /// 操作系统 + /// + [Column(StringLength = 100)] + public string Os { get; set; } + + /// + /// 设备 + /// + [Column(StringLength = 50)] + public string Device { get; set; } + + /// + /// 浏览器信息 + /// + [Column(StringLength = -1)] + public string BrowserInfo { get; set; } + + /// + /// 耗时(毫秒) + /// + public long ElapsedMilliseconds { get; set; } + + /// + /// 操作状态 + /// + public bool Status { get; set; } + + /// + /// 操作消息 + /// + [Column(StringLength = -1)] + public string Msg { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/LoginLog/ILoginLogRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/LoginLog/ILoginLogRepository.cs new file mode 100644 index 0000000..493c9a8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/LoginLog/ILoginLogRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.LoginLog; + +public interface ILoginLogRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/LoginLog/LoginLogEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/LoginLog/LoginLogEntity.cs new file mode 100644 index 0000000..5febe05 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/LoginLog/LoginLogEntity.cs @@ -0,0 +1,11 @@ +using FreeSql.DataAnnotations; + +namespace ZhonTai.Admin.Domain.LoginLog; + +/// +/// 登录日志 +/// +[Table(Name = DbConsts.TableNamePrefix + "login_log", OldName = DbConsts.TableOldNamePrefix + "login_log")] +public partial class LoginLogEntity : LogAbstract +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Msg/MsgEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Msg/MsgEntity.cs new file mode 100644 index 0000000..dcfc5ac --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Msg/MsgEntity.cs @@ -0,0 +1,52 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Entities; +using ZhonTai.Admin.Domain.MsgType; + +namespace ZhonTai.Admin.Domain.Msg; + +/// +/// 消息 +/// +[Table(Name = DbConsts.TableNamePrefix + "msg")] +public partial class MsgEntity : EntityBase +{ + /// + /// 标题 + /// + public string Title { get; set; } + + /// + /// 内容 + /// + [Column(StringLength = -1)] + public string Content { get; set; } + + /// + /// 类型Id + /// + public long TypeId { get; set; } + + + /// + /// 定时发布时间 + /// + public DateTime? PublishTime { get; set; } + + /// + /// 类型 + /// + [NotGen] + [Navigate(nameof(TypeId))] + public MsgTypeEntity Type { get; set; } + + /// + /// 类型名称 + /// + public string TypeName { get; set; } + + /// + /// 消息状态 + /// + public MsgStatusEnum Status { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Msg/MsgStatusEnum.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Msg/MsgStatusEnum.cs new file mode 100644 index 0000000..0fb1092 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Msg/MsgStatusEnum.cs @@ -0,0 +1,32 @@ +namespace ZhonTai.Admin.Domain.Msg; + +/// +/// 消息状态 +/// +public enum MsgStatusEnum +{ + /// + /// 草稿 + /// + Draft = 1, + + /// + /// 已发布 + /// + Published = 2, + + /// + /// 定时发布 + /// + Scheduled = 3, + + /// + /// 已撤销 + /// + Revoked = 4, + + /// + /// 已归档 + /// + Archived = 5, +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Msg/MsgUserEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Msg/MsgUserEntity.cs new file mode 100644 index 0000000..a34510e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Msg/MsgUserEntity.cs @@ -0,0 +1,58 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Entities; + +namespace ZhonTai.Admin.Domain.Msg; + +/// +/// 消息用户 +/// +[Table(Name = DbConsts.TableNamePrefix + "msg_user")] +public partial class MsgUserEntity : EntityBase +{ + /// + /// 消息Id + /// + public long MsgId { get; set; } + + /// + /// 消息 + /// + [NotGen] + [Navigate(nameof(MsgId))] + public MsgEntity Msg { get; set; } + + /// + /// 用户Id + /// + public long UserId { get; set; } + + /// + /// 用户 + /// + [NotGen] + [Navigate(nameof(UserId))] + public MsgUserEntity User { get; set; } + + /// + /// 是否已读 + /// + public bool IsRead { get; set; } + + /// + /// 已读时间 + /// + public DateTime? ReadTime { get; set; } + + /// + /// 是否重要 + /// + public bool IsImportant { get; set; } + + + /// + /// 邮件是否已发送 + /// + public bool IsSendEmail { get; set; } + +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/MsgType/MsgTypeEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/MsgType/MsgTypeEntity.cs new file mode 100644 index 0000000..ddc46b3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/MsgType/MsgTypeEntity.cs @@ -0,0 +1,45 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; + +namespace ZhonTai.Admin.Domain.MsgType; + +/// +/// 消息分类 +/// +[Table(Name = DbConsts.TableNamePrefix + "msg_type")] +[Index("idx_{tablename}_01", $"{nameof(ParentId)},{nameof(Name)}", true)] +public partial class MsgTypeEntity : EntityBase +{ + /// + /// 父级Id + /// + public long ParentId { get; set; } + + /// + /// 子级列表 + /// + [Navigate(nameof(ParentId))] + public List Childs { get; set; } + + /// + /// 名称 + /// + [Column(StringLength = 50)] + public string Name { get; set; } + + /// + /// 编码 + /// + [Column(StringLength = 50)] + public string Code { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 排序 + /// + public int Sort { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/OnlineApp/OnlineAppEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/OnlineApp/OnlineAppEntity.cs new file mode 100644 index 0000000..799685c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/OnlineApp/OnlineAppEntity.cs @@ -0,0 +1,57 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; + +namespace ZhonTai.Admin.Domain.OnlineApp; + +/// +/// 在线应用 +/// +[Table(Name = DbConsts.NPPTableOldPrefix + "online_app")] +[Index("idx_{tablename}_01", $"{nameof(WebsiteName)}", true)] +public partial class OnlineAppEntity : EntityBase +{ + /// + /// 网站名称 + /// + public string WebsiteName { get; set; } + + /// + /// 一级标题 + /// + public string PrimaryTitle { get; set; } + + /// + /// 二级标题 + /// + public string SecondaryTitle { get; set; } + + /// + /// 联系人 + /// + public string ContactPerson { get; set; } + + /// + /// 系统操作教程链接 + /// + public string TutorialUrl { get; set; } + + /// + /// 适用site + /// + public string ApplicableSite { get; set; } + + /// + /// 功能简介 + /// + public string FunctionIntro { get; set; } + + /// + /// 关键词 + /// + public string Keywords { get; set; } + + /// + /// 网址 + /// + public string WebsiteUrl { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/OperationLog/IOperationLogRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/OperationLog/IOperationLogRepository.cs new file mode 100644 index 0000000..95709a6 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/OperationLog/IOperationLogRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.OperationLog; + +public interface IOperationLogRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/OperationLog/OperationLogEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/OperationLog/OperationLogEntity.cs new file mode 100644 index 0000000..42a40a7 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/OperationLog/OperationLogEntity.cs @@ -0,0 +1,46 @@ +using FreeSql.DataAnnotations; + +namespace ZhonTai.Admin.Domain.OperationLog; + +/// +/// 操作日志 +/// +[Table(Name = DbConsts.TableNamePrefix + "operation_log", OldName = DbConsts.TableOldNamePrefix + "operation_log")] +[Index("idx_{tablename}_01", $"{nameof(ApiPath)},{nameof(CreatedTime)}", false)] +public partial class OperationLogEntity : LogAbstract +{ + /// + /// 接口名称 + /// + [Column(Position = 2, StringLength = 50)] + public string ApiLabel { get; set; } + + /// + /// 接口地址 + /// + [Column(Position = 3, StringLength = 500)] + public string ApiPath { get; set; } + + /// + /// 接口方法 + /// + [Column(Position = 4, StringLength = 50)] + public string ApiMethod { get; set; } + + /// + /// 请求参数 + /// + [Column(StringLength = -1)] + public string Params { get; set; } + + /// + /// 状态码 + /// + public int? StatusCode { get; set; } + + /// + /// 响应结果 + /// + [Column(StringLength = -1)] + public string Result { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Org/IOrgRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Org/IOrgRepository.cs new file mode 100644 index 0000000..640f5db --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Org/IOrgRepository.cs @@ -0,0 +1,13 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.Org; + +public interface IOrgRepository : IRepositoryBase +{ + /// + /// 获得本部门和下级部门Id + /// + /// + /// + Task> GetChildIdListAsync(long id); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Org/OrgEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Org/OrgEntity.cs new file mode 100644 index 0000000..388c71c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Org/OrgEntity.cs @@ -0,0 +1,88 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Domain.UserStaff; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.Role; +using ZhonTai.Admin.Domain.UserOrg; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Domain.Org; + +/// +/// 组织架构 +/// +[Table(Name = DbConsts.TableNamePrefix + "org", OldName = DbConsts.TableOldNamePrefix + "org")] +[Index("idx_{tablename}_01", nameof(ParentId) + "," + nameof(Name) + "," + nameof(TenantId), true)] +public partial class OrgEntity : EntityTenant, IChilds +{ + /// + /// 父级 + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + [Column(StringLength = 50)] + public string Name { get; set; } + + /// + /// 编码 + /// + [Column(StringLength = 50)] + public string Code { get; set; } + + /// + /// 值 + /// + [Column(StringLength = 50)] + public string Value { get; set; } + + /// + /// 成员数 + /// + public int MemberCount { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 描述 + /// + [Column(StringLength = 500)] + public string Description { get; set; } + + /// + /// 员工列表 + /// + [NotGen] + [Navigate(ManyToMany = typeof(UserOrgEntity))] + public ICollection Staffs { get; set; } + + /// + /// 用户列表 + /// + [NotGen] + [Navigate(ManyToMany = typeof(UserOrgEntity))] + public ICollection Users { get; set; } + + /// + /// 角色列表 + /// + [NotGen] + [Navigate(ManyToMany = typeof(RoleOrgEntity))] + public ICollection Roles { get; set; } + + /// + /// 子级列表 + /// + [Navigate(nameof(ParentId))] + public List Childs { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Permission/IPermissionRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Permission/IPermissionRepository.cs new file mode 100644 index 0000000..e9bd977 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Permission/IPermissionRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.Permission; + +public interface IPermissionRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Permission/PermissionEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Permission/PermissionEntity.cs new file mode 100644 index 0000000..37406aa --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Permission/PermissionEntity.cs @@ -0,0 +1,149 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Domain.Api; +using ZhonTai.Admin.Domain.View; +using ZhonTai.Admin.Domain.PermissionApi; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Domain.Permission; + +/// +/// 权限 +/// +[Table(Name = DbConsts.TableNamePrefix + "permission", OldName = DbConsts.TableOldNamePrefix + "permission")] +[Index("idx_{tablename}_01", nameof(Platform) + "," + nameof(ParentId) + "," + nameof(Label), true)] +public partial class PermissionEntity : EntityBase, IChilds +{ + /// + /// 平台 + /// + [Column(StringLength = 20)] + public string Platform { get; set; } + + /// + /// 父级节点 + /// + public long ParentId { get; set; } + + /// + /// 权限名称 + /// + [Column(StringLength = 50)] + public string Label { get; set; } + + /// + /// 权限编码 + /// + [Column(StringLength = 500)] + public string Code { get; set; } + + /// + /// 权限类型 + /// + [Column(MapType = typeof(int), CanUpdate = false)] + public PermissionType Type { get; set; } + + /// + /// 视图Id + /// + public long? ViewId { get; set; } + + /// + /// 视图 + /// + [NotGen] + public ViewEntity View { get; set; } + + /// + /// 路由命名 + /// + [Column(StringLength = 100)] + public string Name { get; set; } + + /// + /// 路由地址 + /// + [Column(StringLength = 500)] + public string Path { get; set; } + + /// + /// 重定向地址 + /// + [Column(StringLength = 500)] + public string Redirect { get; set; } + + /// + /// 图标 + /// + [Column(StringLength = 100)] + public string Icon { get; set; } + + /// + /// 隐藏 + /// + public bool Hidden { get; set; } = false; + + /// + /// 展开分组 + /// + public bool Opened { get; set; } + + /// + /// 打开新窗口 + /// + public bool NewWindow { get; set; } = false; + + /// + /// 链接外显 + /// + public bool External { get; set; } = false; + + /// + /// 是否缓存 + /// + public bool IsKeepAlive { get; set; } = true; + + /// + /// 是否固定 + /// + public bool IsAffix { get; set; } = false; + + /// + /// 链接地址 + /// + [Column(StringLength = 500)] + public string Link { get; set; } + + /// + /// 是否内嵌窗口 + /// + public bool IsIframe { get; set; } = false; + + /// + /// 是否系统权限 + /// + public bool IsSystem { get; set; } = false; + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 描述 + /// + [Column(StringLength = 200)] + public string Description { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + [NotGen] + [Navigate(ManyToMany = typeof(PermissionApiEntity))] + public ICollection Apis { get; set; } + + [Navigate(nameof(ParentId))] + public List Childs { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Permission/PermissionType.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Permission/PermissionType.cs new file mode 100644 index 0000000..45d6ee1 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Permission/PermissionType.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Domain.Permission; + +/// +/// 权限类型 +/// +public enum PermissionType +{ + /// + /// 分组 + /// + Group = 1, + + /// + /// 菜单 + /// + Menu = 2, + + /// + /// 权限点 + /// + Dot = 3 +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PermissionApi/IPermissionApiRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PermissionApi/IPermissionApiRepository.cs new file mode 100644 index 0000000..c3c8683 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PermissionApi/IPermissionApiRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.PermissionApi; + +public interface IPermissionApiRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PermissionApi/PermissionApiEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PermissionApi/PermissionApiEntity.cs new file mode 100644 index 0000000..9f01819 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PermissionApi/PermissionApiEntity.cs @@ -0,0 +1,39 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Domain.Permission; +using ZhonTai.Admin.Domain.Api; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Domain.PermissionApi; + +/// +/// 权限接口 +/// +[Table(Name = DbConsts.TableNamePrefix + "permission_api", OldName = DbConsts.TableOldNamePrefix + "permission_api")] +[Index("idx_{tablename}_01", nameof(PermissionId) + "," + nameof(ApiId), true)] +public class PermissionApiEntity : EntityAdd +{ + /// + /// 权限Id + /// + [Column(IsPrimary = true)] + public long PermissionId { get; set; } + + /// + /// 权限 + /// + [NotGen] + public PermissionEntity Permission { get; set; } + + /// + /// 接口Id + /// + [Column(IsPrimary = true)] + public long ApiId { get; set; } + + /// + /// 接口 + /// + [NotGen] + public ApiEntity Api { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Pkg/IPkgRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Pkg/IPkgRepository.cs new file mode 100644 index 0000000..be0950c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Pkg/IPkgRepository.cs @@ -0,0 +1,20 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.Pkg; + +public interface IPkgRepository : IRepositoryBase +{ + /// + /// 获得本套餐和下级套餐Id + /// + /// + /// + Task> GetChildIdListAsync(long id); + + /// + /// 获得当前套餐和下级套餐Id + /// + /// + /// + Task> GetChildIdListAsync(long[] ids); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Pkg/PkgEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Pkg/PkgEntity.cs new file mode 100644 index 0000000..be83352 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Pkg/PkgEntity.cs @@ -0,0 +1,67 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Domain.Permission; +using ZhonTai.Admin.Domain.Tenant; +using ZhonTai.Admin.Domain.TenantPkg; +using ZhonTai.Admin.Domain.PkgPermission; + +namespace ZhonTai.Admin.Domain.Pkg; + +/// +/// 套餐 +/// +[Table(Name = DbConsts.TableNamePrefix + "pkg", OldName = DbConsts.TableOldNamePrefix + "pkg")] +[Index("idx_{tablename}_01", $"{nameof(ParentId)},{nameof(Name)}", true)] +public partial class PkgEntity : EntityBase +{ + /// + /// 父级Id + /// + public long ParentId { get; set; } + + /// + /// 子级列表 + /// + [Navigate(nameof(ParentId))] + public List Childs { get; set; } + + /// + /// 名称 + /// + [Column(StringLength = 50)] + public string Name { get; set; } + + /// + /// 编码 + /// + [Column(StringLength = 50)] + public string Code { get; set; } + + /// + /// 说明 + /// + [Column(StringLength = 200)] + public string Description { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 租户列表 + /// + [Navigate(ManyToMany = typeof(TenantPkgEntity))] + public ICollection Tenants { get; set; } + + /// + /// 权限列表 + /// + [Navigate(ManyToMany = typeof(PkgPermissionEntity))] + public ICollection Permissions { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PkgPermission/IPkgPermissionRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PkgPermission/IPkgPermissionRepository.cs new file mode 100644 index 0000000..285cfd8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PkgPermission/IPkgPermissionRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.PkgPermission; + +public interface IPkgPermissionRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PkgPermission/PkgPermissionEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PkgPermission/PkgPermissionEntity.cs new file mode 100644 index 0000000..4541f28 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PkgPermission/PkgPermissionEntity.cs @@ -0,0 +1,41 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Domain.Permission; +using ZhonTai.Admin.Domain.Pkg; + +namespace ZhonTai.Admin.Domain.PkgPermission; + +/// +/// 套餐权限 +/// +[Table(Name = DbConsts.TableNamePrefix + "pkg_permission", OldName = DbConsts.TableOldNamePrefix + "pkg_permission")] +[Index("idx_{tablename}_01", nameof(Platform) + "," + nameof(PkgId) + "," + nameof(PermissionId), true)] +public class PkgPermissionEntity : EntityAdd +{ + /// + /// 平台 + /// + public string Platform { get; set; } + + /// + /// 套餐Id + /// + [Column(IsPrimary = true)] + public long PkgId { get; set; } + + /// + /// 套餐 + /// + public PkgEntity Pkg { get; set; } + + /// + /// 权限Id + /// + [Column(IsPrimary = true)] + public long PermissionId { get; set; } + + /// + /// 权限 + /// + public PermissionEntity Permission { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PrintTemplate/PrintTemplateEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PrintTemplate/PrintTemplateEntity.cs new file mode 100644 index 0000000..2c4f782 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/PrintTemplate/PrintTemplateEntity.cs @@ -0,0 +1,64 @@ +using FreeSql.DataAnnotations; +using Newtonsoft.Json; +using System.ComponentModel; +using System.Text.Json.Serialization; +using ZhonTai.Admin.Core.Entities; +namespace ZhonTai.Admin.Domain.PrintTemplate; + +/// +/// 打印模板 +/// +[Table(Name = DbConsts.TableNamePrefix + "print_template")] +[Index("idx_{tablename}_01", $"{nameof(TenantId)},{nameof(Name)}", true)] +[Index("idx_{tablename}_01", $"{nameof(TenantId)},{nameof(Code)}", true)] +public partial class PrintTemplateEntity : EntityVersion, ITenant +{ + /// + /// 租户Id + /// + [Description("租户Id")] + [Column(Position = 2, CanUpdate = false)] + [JsonProperty(Order = -20)] + [JsonPropertyOrder(-20)] + public virtual long? TenantId { get; set; } + + /// + /// 名称 + /// + [Column(StringLength = 50)] + public string Name { get; set; } + + /// + /// 编码 + /// + [Column(StringLength = 50)] + public string Code { get; set; } + + /// + /// 模板 + /// + [Column(StringLength = -1)] + public string Template { get; set; } + + /// + /// 打印数据 + /// + [Column(StringLength = -1)] + public string PrintData { get; set; } + + /// + /// 说明 + /// + [Column(StringLength = 200)] + public string Description { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 排序 + /// + public int Sort { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Region/RegionEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Region/RegionEntity.cs new file mode 100644 index 0000000..b499131 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Region/RegionEntity.cs @@ -0,0 +1,100 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; + +namespace ZhonTai.Admin.Domain.Region; + +/// +/// 地区 +/// +[Table(Name = DbConsts.TableNamePrefix + "region")] +[Index("idx_{tablename}_01", nameof(ParentId) + "," + nameof(Name), true)] +[Index("idx_{tablename}_02", nameof(ParentId) + "," + nameof(Code), true)] +public partial class RegionEntity : EntityBase, IChilds +{ + /// + /// 上级Id + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + [Column(StringLength = 100)] + public string Name { get; set; } + + /// + /// 简称 + /// + [Column(StringLength = 100)] + public string ShortName { get; set; } + + /// + /// 级别 + /// + [Column(MapType = typeof(int))] + public RegionLevel Level { get; set; } + + /// + /// 代码 + /// + [Column(StringLength = 20)] + public string Code { get; set; } + + /// + /// 拼音 + /// + [Column(StringLength = 200)] + public string Pinyin { get; set; } + + /// + /// 拼音首字母 + /// + [Column(StringLength = 20)] + public string PinyinFirst { get; set; } + + /// + /// 行政中心/政府驻地 + /// + [Column(StringLength = 100)] + public string Capital { get; set; } + + /// + /// 人口(单位:万人) + /// + public int? Population { get; set; } + + /// + /// 面积(单位:平方千米) + /// + public int? Area { get; set; } + + /// + /// 区号 + /// + [Column(StringLength = 20)] + public string AreaCode { get; set; } + + /// + /// 邮编 + /// + [Column(StringLength = 20)] + public string ZipCode { get; set; } + + /// + /// 排序 + /// + public int? Sort { get; set; } + + /// + /// 热门 + /// + public bool Hot { get; set; } = false; + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + [Navigate(nameof(ParentId))] + public List Childs { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Region/RegionLevel.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Region/RegionLevel.cs new file mode 100644 index 0000000..27e40fe --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Region/RegionLevel.cs @@ -0,0 +1,36 @@ +using System.ComponentModel; + +namespace ZhonTai.Admin.Domain.Region; + +/// +/// 地区级别 +/// +public enum RegionLevel +{ + /// + /// 省份 + /// + Province = 1, + + /// + /// 城市 + /// + City = 2, + + /// + /// 县/区 + /// + County = 3, + + /// + /// 镇/乡/街道 + /// + [Description("镇/乡")] + Town = 4, + + /// + /// 村/村委会/社区/居委会 + /// + [Description("村/社区")] + Vilage = 5 +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RemoteApp/RemoteAppEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RemoteApp/RemoteAppEntity.cs new file mode 100644 index 0000000..59b0d77 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RemoteApp/RemoteAppEntity.cs @@ -0,0 +1,41 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Entities; + +namespace ZhonTai.Admin.Domain.RemoteApp; + +/// +/// 远程应用 +/// +[Table(Name = DbConsts.NPPTableOldPrefix + "remote_app")] +[Index("idx_{tablename}_01", $"{nameof(Name)}", true)] + +public class RemoteAppEntity : EntityBase +{ + + public string ImgUrl { get; set; } + + /// + /// 所属site + /// + public string Site { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// IP地址 + /// + public string IpAddress { get; set; } + + /// + /// 域 + /// + public string Domain { get; set; } + + /// + /// 用户名 + /// + public string Username { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Role/IRoleRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Role/IRoleRepository.cs new file mode 100644 index 0000000..8ba5b3e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Role/IRoleRepository.cs @@ -0,0 +1,20 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.Role; + +public interface IRoleRepository : IRepositoryBase +{ + /// + /// 获得本角色和下级角色Id + /// + /// + /// + Task> GetChildIdListAsync(long id); + + /// + /// 获得当前角色和下级角色Id + /// + /// + /// + Task> GetChildIdListAsync(long[] ids); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Role/RoleEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Role/RoleEntity.cs new file mode 100644 index 0000000..7acd544 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Role/RoleEntity.cs @@ -0,0 +1,90 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Entities; +using ZhonTai.Admin.Domain.Permission; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.UserRole; +using ZhonTai.Admin.Domain.RolePermission; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Domain.Role; + +/// +/// 角色 +/// +[Table(Name = DbConsts.TableNamePrefix + "role", OldName = DbConsts.TableOldNamePrefix + "role")] +[Index("idx_{tablename}_01", $"{nameof(TenantId)},{nameof(ParentId)},{nameof(Name)}", true)] +public partial class RoleEntity : EntityTenant +{ + /// + /// 父级Id + /// + public long ParentId { get; set; } + + /// + /// 子级列表 + /// + [Navigate(nameof(ParentId))] + public List Childs { get; set; } + + /// + /// 名称 + /// + [Column(StringLength = 50)] + public string Name { get; set; } + + /// + /// 编码 + /// + [Column(StringLength = 50)] + public string Code { get; set; } + + /// + /// 角色类型 + /// + [Column(MapType = typeof(int), CanUpdate = false)] + public RoleType Type { get; set; } + + /// + /// 数据范围 + /// + [Column(MapType = typeof(int))] + public DataScope DataScope { get; set; } = DataScope.All; + + /// + /// 说明 + /// + [Column(StringLength = 200)] + public string Description { get; set; } + + /// + /// 隐藏 + /// + public bool Hidden { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 用户列表 + /// + [NotGen] + [Navigate(ManyToMany = typeof(UserRoleEntity))] + public ICollection Users { get; set; } + + /// + /// 部门列表 + /// + [NotGen] + [Navigate(ManyToMany = typeof(RoleOrgEntity))] + public ICollection Orgs { get; set; } + + /// + /// 权限列表 + /// + [NotGen] + [Navigate(ManyToMany = typeof(RolePermissionEntity))] + public ICollection Permissions { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Role/RoleType.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Role/RoleType.cs new file mode 100644 index 0000000..1f262a1 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Role/RoleType.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Domain.Role; + +/// +/// 角色类型 +/// +public enum RoleType +{ + /// + /// 分组 + /// + Group = 1, + + /// + /// 角色 + /// + Role = 2 +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RoleOrg/IRoleOrgRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RoleOrg/IRoleOrgRepository.cs new file mode 100644 index 0000000..4fd9f31 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RoleOrg/IRoleOrgRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.RoleOrg; + +public interface IRoleOrgRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RoleOrg/RoleOrgEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RoleOrg/RoleOrgEntity.cs new file mode 100644 index 0000000..a76df58 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RoleOrg/RoleOrgEntity.cs @@ -0,0 +1,36 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Entities; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Domain.Role; + +namespace ZhonTai.Admin.Domain; + +/// +/// 角色部门 +/// +[Table(Name = DbConsts.TableNamePrefix + "role_org", OldName = DbConsts.TableOldNamePrefix + "role_org")] +[Index("idx_{tablename}_01", nameof(RoleId) + "," + nameof(OrgId), true)] +public partial class RoleOrgEntity : EntityAdd +{ + /// + /// 角色Id + /// + [Column(IsPrimary = true)] + public long RoleId { get; set; } + + /// + /// 角色 + /// + public RoleEntity Role { get; set; } + + /// + /// 部门Id + /// + [Column(IsPrimary = true)] + public long OrgId { get; set; } + + /// + /// 部门 + /// + public OrgEntity Org { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RolePermission/IRolePermissionRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RolePermission/IRolePermissionRepository.cs new file mode 100644 index 0000000..c27f921 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RolePermission/IRolePermissionRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.RolePermission; + +public interface IRolePermissionRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RolePermission/RolePermissionEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RolePermission/RolePermissionEntity.cs new file mode 100644 index 0000000..8268209 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/RolePermission/RolePermissionEntity.cs @@ -0,0 +1,44 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Entities; +using ZhonTai.Admin.Domain.Role; +using ZhonTai.Admin.Domain.Permission; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Domain.RolePermission; + +/// +/// 角色权限 +/// +[Table(Name = DbConsts.TableNamePrefix + "role_permission", OldName = DbConsts.TableOldNamePrefix + "role_permission")] +[Index("idx_{tablename}_01", nameof(Platform) + "," + nameof(RoleId) + "," + nameof(PermissionId), true)] +public class RolePermissionEntity : EntityAdd +{ + /// + /// 平台 + /// + public string Platform { get; set; } + + /// + /// 角色Id + /// + [Column(IsPrimary = true)] + public long RoleId { get; set; } + + /// + /// 权限Id + /// + public long PermissionId { get; set; } + + /// + /// 角色 + /// + [NotGen] + [Column(IsPrimary = true)] + public RoleEntity Role { get; set; } + + /// + /// 权限 + /// + [NotGen] + public PermissionEntity Permission { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/SearchTemplate/SearchTemplateEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/SearchTemplate/SearchTemplateEntity.cs new file mode 100644 index 0000000..1ad4f62 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/SearchTemplate/SearchTemplateEntity.cs @@ -0,0 +1,28 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Entities; +namespace ZhonTai.Admin.Domain.SearchTemplate; + +/// +/// 查询模板 +/// +[Table(Name = DbConsts.TableNamePrefix + "search_template")] +[Index("idx_{tablename}_01", $"{nameof(CreatedUserId)},{nameof(ModuleId)},{nameof(Name)}", true)] +public partial class SearchTemplateEntity : EntityVersion +{ + /// + /// 模块Id + /// + public long ModuleId { get; set; } + + /// + /// 名称 + /// + [Column(StringLength = 50)] + public string Name { get; set; } + + /// + /// 模板 + /// + [Column(StringLength = -1)] + public string Template { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/SiteInfo/SiteInfoGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/SiteInfo/SiteInfoGetPageOutput.cs new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/SiteInfo/SiteInfoGetPageOutput.cs @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/TemplateCenter/TemplateCenterEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/TemplateCenter/TemplateCenterEntity.cs new file mode 100644 index 0000000..5048deb --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/TemplateCenter/TemplateCenterEntity.cs @@ -0,0 +1,70 @@ +using ZhonTai.Admin.Core.Entities; +using FreeSql.DataAnnotations; + +namespace ZhonTai.Admin.Contracts.Domain.TemplateCenter; + +/// +/// 模板中心实体 +/// +[Table(Name = "npp_template_center")] +[Index("idx_{tablename}_01", nameof(Name) + "," + nameof(ParentId), false)] +public class TemplateCenterEntity : EntityBase +{ + /// + /// 父级ID + /// + public long ParentId { get; set; } + + /// + /// 模板名称 + /// + [Column(StringLength = 100)] + public string Name { get; set; } + + /// + /// 联系人 + /// + [Column(StringLength = 50)] + public string ContactPerson { get; set; } + + /// + /// 类型:1-文件夹,2-文件 + /// + public int Type { get; set; } + + /// + /// 功能简介 + /// + [Column(StringLength = 500)] + public string FunctionIntro { get; set; } + + /// + /// 关键词 + /// + [Column(StringLength = 200)] + public string Keywords { get; set; } + + /// + /// 网址 + /// + [Column(StringLength = 500)] + public string Site { get; set; } + + /// + /// 文件路径 + /// + [Column(StringLength = 500)] + public string FilePath { get; set; } + + /// + /// 文件关键词 + /// + [Column(StringLength = 200)] + public string FileKeword { get; set; } + + /// + /// 文件URL + /// + [Column(StringLength = 500)] + public string FileUrl { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Tenant/ITenantRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Tenant/ITenantRepository.cs new file mode 100644 index 0000000..d24a13d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Tenant/ITenantRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.Tenant; + +public interface ITenantRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Tenant/TenantEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Tenant/TenantEntity.cs new file mode 100644 index 0000000..9ebe298 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/Tenant/TenantEntity.cs @@ -0,0 +1,86 @@ +using FreeSql; +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Entities; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Domain.TenantPkg; +using ZhonTai.Admin.Domain.Pkg; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Domain.Tenant; + +/// +/// 租户 +/// +[Table(Name = DbConsts.TableNamePrefix + "tenant", OldName = DbConsts.TableOldNamePrefix + "tenant")] +public partial class TenantEntity : EntityBase +{ + /// + /// 授权用户 + /// + public long UserId { get; set; } + + /// + /// 用户 + /// + [NotGen] + public UserEntity User { get; set; } + + /// + /// 授权部门 + /// + public long OrgId { get; set; } + + /// + /// 部门 + /// + [NotGen] + public OrgEntity Org { get; set; } + + /// + /// 租户类型 + /// + public TenantType? TenantType { get; set; } = Tenant.TenantType.Tenant; + + /// + /// 域名 + /// + [Column(StringLength = 300)] + public string Domain { get; set; } + + /// + /// 数据库注册键 + /// + [Column(StringLength = 50)] + public string DbKey { get; set; } + + /// + /// 数据库 + /// + [Column(MapType = typeof(int?))] + public DataType? DbType { get; set; } + + /// + /// 连接字符串 + /// + [Column(StringLength = 500)] + public string ConnectionString { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 说明 + /// + [Column(StringLength = 500)] + public string Description { get; set; } + + /// + /// 套餐列表 + /// + [NotGen] + [Navigate(ManyToMany = typeof(TenantPkgEntity))] + public ICollection Pkgs { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/TenantPkg/ITenantPkgRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/TenantPkg/ITenantPkgRepository.cs new file mode 100644 index 0000000..bc9b070 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/TenantPkg/ITenantPkgRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.TenantPkg; + +public interface ITenantPkgRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/TenantPkg/TenantPkgEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/TenantPkg/TenantPkgEntity.cs new file mode 100644 index 0000000..a8394d6 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/TenantPkg/TenantPkgEntity.cs @@ -0,0 +1,30 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Entities; +using ZhonTai.Admin.Domain.Tenant; +using ZhonTai.Admin.Domain.Pkg; + +namespace ZhonTai.Admin.Domain.TenantPkg; + +/// +/// 租户套餐 +/// +[Table(Name = DbConsts.TableNamePrefix + "tenant_pkg", OldName = DbConsts.TableOldNamePrefix + "tenant_pkg")] +[Index("idx_{tablename}_01", nameof(TenantId) + "," + nameof(PkgId), true)] +public class TenantPkgEntity : EntityAdd +{ + /// + /// 租户Id + /// + [Column(IsPrimary = true)] + public long TenantId { get; set; } + + public TenantEntity Tenant { get; set; } + + /// + /// 套餐Id + /// + [Column(IsPrimary = true)] + public long PkgId { get; set; } + + public PkgEntity Pkg { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/AccountType.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/AccountType.cs new file mode 100644 index 0000000..a0bf1ae --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/AccountType.cs @@ -0,0 +1,20 @@ +namespace ZhonTai.Admin.Domain.User; + +/// +/// 账号类型 +/// +public enum AccountType +{ + /// + /// 账号 + /// + UserName = 1, + /// + /// 手机 + /// + Mobile = 2, + /// + /// 邮箱 + /// + Email = 3 +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/IUserRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/IUserRepository.cs new file mode 100644 index 0000000..00fb6bb --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/IUserRepository.cs @@ -0,0 +1,8 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.User; + +public interface IUserRepository : IRepositoryBase +{ + +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/PasswordEncryptType.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/PasswordEncryptType.cs new file mode 100644 index 0000000..64314ba --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/PasswordEncryptType.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Domain.User; + +/// +/// 密码加密类型 +/// +public enum PasswordEncryptType +{ + /// + /// 32位MD5加密 + /// + MD5Encrypt32 = 0, + + /// + /// 标准标识密码哈希 + /// + PasswordHasher = 1, +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/UserEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/UserEntity.cs new file mode 100644 index 0000000..7742380 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/UserEntity.cs @@ -0,0 +1,162 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Entities; +using ZhonTai.Admin.Domain.Tenant; +using ZhonTai.Admin.Domain.Role; +using ZhonTai.Admin.Domain.UserRole; +using ZhonTai.Admin.Domain.UserStaff; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Domain.UserOrg; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Domain.User; + +/// +/// 用户 +/// +[Table(Name = DbConsts.TableNamePrefix + "user", OldName = DbConsts.TableOldNamePrefix + "user")] +[Index("idx_{tablename}_01", nameof(UserName), true)] +[Index("idx_{tablename}_02", nameof(Mobile))] +[Index("idx_{tablename}_03", nameof(Email))] +public partial class UserEntity : EntityTenant +{ + [NotGen] + public TenantEntity Tenant { get; set; } + + /// + /// 账号 + /// + [Column(StringLength = 60)] + public string UserName { get; set; } + + /// + /// 密码 + /// + [Column(StringLength = 200)] + public string Password { get; set; } + + /// + /// 密码加密类型 + /// + [Column(MapType = typeof(int?))] + public PasswordEncryptType? PasswordEncryptType { get; set; } + + /// + /// 姓名 + /// + [Column(StringLength = 60)] + public string Name { get; set; } + + /// + /// 手机号 + /// + [Column(StringLength = 20)] + public string Mobile { get; set; } + + /// + /// 邮箱 + /// + [Column(StringLength = 100)] + public string Email { get; set; } + + /// + /// 主属部门Id + /// + public long OrgId { get; set; } + + /// + /// 部门 + /// + [NotGen] + public OrgEntity Org { get; set; } + + /// + /// 直属主管Id + /// + public long? ManagerUserId { get; set; } + + /// + /// 直属主管 + /// + [NotGen] + public UserEntity ManagerUser { get; set; } + + /// + /// 昵称 + /// + [Column(StringLength = 60)] + public string NickName { get; set; } + + /// + /// 头像 + /// + [Column(StringLength = 500)] + public string Avatar { get; set; } + + /// + /// 用户状态 + /// + [Column(MapType = typeof(int?))] + public UserStatus? Status { get; set; } + + /// + /// 用户类型 + /// + [Column(MapType = typeof(int))] + public UserType Type { get; set; } = UserType.DefaultUser; + + /// + /// 最后登录时间 + /// + [Column(StringLength = 100)] + public DateTime? LastLoginTime { get; set; } + + /// + /// 最后登录IP + /// + [Column(StringLength = 100)] + public string LastLoginIP { get; set; } + + /// + /// 最后登录国家 + /// + [Column(StringLength = 100)] + public string LastLoginCountry { get; set; } + + /// + /// 最后登录省份 + /// + [Column(StringLength = 100)] + public string LastLoginProvince { get; set; } + + /// + /// 最后登录城市 + /// + [Column(StringLength = 100)] + public string LastLoginCity { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 角色列表 + /// + [NotGen] + [Navigate(ManyToMany = typeof(UserRoleEntity))] + public ICollection Roles { get; set; } + + /// + /// 部门列表 + /// + [NotGen] + [Navigate(ManyToMany = typeof(UserOrgEntity))] + public ICollection Orgs { get; set; } + + /// + /// 员工 + /// + [NotGen] + [Navigate(nameof(Id))] + public UserStaffEntity Staff { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/UserStatus.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/UserStatus.cs new file mode 100644 index 0000000..f9e891c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/User/UserStatus.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Domain.User; + +/// +/// 用户状态 +/// +public enum UserStatus +{ + /// + /// 待修改密码 + /// + WaitChangePasssword = 2, + + /// + /// 待激活 + /// + WaitActive = 3, +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserClickStats/UserClickStatsEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserClickStats/UserClickStatsEntity.cs new file mode 100644 index 0000000..e172b6a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserClickStats/UserClickStatsEntity.cs @@ -0,0 +1,38 @@ +using FreeSql.DataAnnotations; +using System; +using ZhonTai.Admin.Core.Entities; + +namespace ZhonTai.Admin.Domain.UserClickStats; + +/// +/// 用户点击统计 +/// +[Table(Name = DbConsts.NPPTableOldPrefix + "user_click")] +[Index("idx_userclick_id", nameof(UserId))] +public class UserClickStatsEntity : EntityBase +{ + /// + /// 网页类型 1 在线应用 3 模板中心 5 在线看板 + /// + public int WebType { get; set; } + + // 网页Id + public long WebId { get; set; } + + /// + /// 用户Id + /// + public long UserId { get; set; } + + /// + /// 页面点击次数 + /// + public int PageClicks { get; set; } + + /// + /// 最后点击时间 + /// + public DateTime LastClickTime { get; set; } + + +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserOrg/IUserOrgRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserOrg/IUserOrgRepository.cs new file mode 100644 index 0000000..813ca46 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserOrg/IUserOrgRepository.cs @@ -0,0 +1,20 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.UserOrg; + +public interface IUserOrgRepository : IRepositoryBase +{ + /// + /// 本部门下是否有员工 + /// + /// + /// + Task HasUser(long id); + + /// + /// 部门列表下是否有员工 + /// + /// + /// + Task HasUser(List idList); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserOrg/UserOrgEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserOrg/UserOrgEntity.cs new file mode 100644 index 0000000..d9b7362 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserOrg/UserOrgEntity.cs @@ -0,0 +1,44 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Entities; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Domain.UserOrg; + +/// +/// 用户所属部门 +/// +[Table(Name = DbConsts.TableNamePrefix + "user_org", OldName = DbConsts.TableOldNamePrefix + "user_org")] +[Index("idx_{tablename}_01", nameof(UserId) + "," + nameof(OrgId), true)] +public partial class UserOrgEntity : EntityUpdate +{ + /// + /// 用户Id + /// + [Column(IsPrimary = true)] + public long UserId { get; set; } + + /// + /// 用户 + /// + [NotGen] + public UserEntity User { get; set; } + + /// + /// 部门Id + /// + [Column(IsPrimary = true)] + public long OrgId { get; set; } + + /// + /// 部门 + /// + [NotGen] + public OrgEntity Org { get; set; } + + /// + /// 是否主管 + /// + public bool IsManager { get; set; } = false; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserRole/IUserRoleRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserRole/IUserRoleRepository.cs new file mode 100644 index 0000000..165179e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserRole/IUserRoleRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.UserRole; + +public interface IUserRoleRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserRole/UserRoleEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserRole/UserRoleEntity.cs new file mode 100644 index 0000000..5cfc600 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserRole/UserRoleEntity.cs @@ -0,0 +1,33 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Entities; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.Role; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Domain.UserRole; + +/// +/// 用户角色 +/// +[Table(Name = DbConsts.TableNamePrefix + "user_role", OldName = DbConsts.TableOldNamePrefix + "user_role")] +[Index("idx_{tablename}_01", nameof(UserId) + "," + nameof(RoleId), true)] +public class UserRoleEntity : EntityAdd +{ + /// + /// 用户Id + /// + [Column(IsPrimary = true)] + public long UserId { get; set; } + + [NotGen] + public UserEntity User { get; set; } + + /// + /// 角色Id + /// + [Column(IsPrimary = true)] + public long RoleId { get; set; } + + [NotGen] + public RoleEntity Role { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserStaff/IUserStaffRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserStaff/IUserStaffRepository.cs new file mode 100644 index 0000000..cbd99f9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserStaff/IUserStaffRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.UserStaff; + +public interface IUserStaffRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserStaff/Sex.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserStaff/Sex.cs new file mode 100644 index 0000000..83cff39 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserStaff/Sex.cs @@ -0,0 +1,27 @@ +using System.ComponentModel; + +namespace ZhonTai.Admin.Domain.UserStaff; + +/// +/// 性别 +/// +public enum Sex +{ + /// + /// 未知 + /// + [Description("未知")] + Unknown = 0, + + /// + /// 男 + /// + [Description("男")] + Male = 1, + + /// + /// 女 + /// + [Description("女")] + Female = 2 +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserStaff/UserStaffEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserStaff/UserStaffEntity.cs new file mode 100644 index 0000000..6be4c50 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/UserStaff/UserStaffEntity.cs @@ -0,0 +1,45 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Entities; + +namespace ZhonTai.Admin.Domain.UserStaff; + +/// +/// 用户员工 +/// +[Table(Name = DbConsts.TableNamePrefix + "user_staff", OldName = DbConsts.TableOldNamePrefix + "user_staff")] +public partial class UserStaffEntity : EntityTenant +{ + /// + /// 职位 + /// + public string Position { get; set; } + + /// + /// 工号 + /// + [Column(StringLength = 20)] + public string JobNumber { get; set; } + + /// + /// 性别 + /// + [Column(MapType = typeof(int?))] + public Sex? Sex { get; set; } + + /// + /// 入职时间 + /// + public DateTime? EntryTime { get; set; } + + /// + /// 企业微信名片 + /// + [Column(StringLength = 500)] + public string WorkWeChatCard { get; set; } + + /// + /// 个人简介 + /// + [Column(StringLength = 500)] + public string Introduce { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/View/IViewRepositoryRepository.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/View/IViewRepositoryRepository.cs new file mode 100644 index 0000000..828fd69 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/View/IViewRepositoryRepository.cs @@ -0,0 +1,7 @@ +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Domain.View; + +public interface IViewRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Domain/View/ViewEntity.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/View/ViewEntity.cs new file mode 100644 index 0000000..455aea4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Domain/View/ViewEntity.cs @@ -0,0 +1,65 @@ +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Entities; + +namespace ZhonTai.Admin.Domain.View; + +/// +/// 视图管理 +/// +[Table(Name = DbConsts.TableNamePrefix + "view", OldName = DbConsts.TableOldNamePrefix + "view")] +[Index("idx_{tablename}_01", nameof(Platform) + "," + nameof(ParentId) + "," + nameof(Label), true)] +public partial class ViewEntity : EntityBase, IChilds +{ + /// + /// 平台 + /// + [Column(StringLength = 20)] + public string Platform { get; set; } + + /// + /// 所属节点 + /// + public long ParentId { get; set; } + + /// + /// 视图命名 + /// + [Column(StringLength = 50)] + public string Name { get; set; } + + /// + /// 视图名称 + /// + [Column(StringLength = 500)] + public string Label { get; set; } + + /// + /// 视图路径 + /// + [Column(StringLength = 500)] + public string Path { get; set; } + + /// + /// 说明 + /// + [Column(StringLength = 500)] + public string Description { get; set; } + + /// + /// 缓存 + /// + public bool Cache { get; set; } = true; + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + [Navigate(nameof(ParentId))] + public List Childs { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/GlobalUsings.cs b/src/modules/admin/ZhonTai.Admin.Contracts/GlobalUsings.cs new file mode 100644 index 0000000..b11ffc2 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/GlobalUsings.cs @@ -0,0 +1 @@ +global using ZhonTai.Admin.Contracts.Core.Consts; diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Resources/AdminContractsLocalizer.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Resources/AdminContractsLocalizer.cs new file mode 100644 index 0000000..573ad3f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Resources/AdminContractsLocalizer.cs @@ -0,0 +1,16 @@ +using Microsoft.Extensions.Localization; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Resources; + +namespace ZhonTai.Admin.Contracts.Resources; + +/// +/// Admin契约库国际化 +/// +[InjectSingleton] +public class AdminContractsLocalizer : ModuleLocalizer +{ + public AdminContractsLocalizer(IStringLocalizer localizer) : base(localizer) + { + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Resources/Resources.AdminContractsLocalizer.en.json b/src/modules/admin/ZhonTai.Admin.Contracts/Resources/Resources.AdminContractsLocalizer.en.json new file mode 100644 index 0000000..bd662a8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Resources/Resources.AdminContractsLocalizer.en.json @@ -0,0 +1,45 @@ +{ + "密码不能为空": "Password cannot be empty", + "请选择接口": "Please select an interface", + "请输入邮箱地址": "Please enter your email address", + "请输入验证码": "Please enter the verification code", + "请获取验证码": "Please request a verification code", + "请输入新密码": "Please enter your new password", + "请输入手机号": "Please enter your mobile number", + "请输入密码": "Please enter your password", + "请输入企业名称": "Please enter the enterprise name", + "请完成安全验证": "Please complete security verification", + "请选择字典类型": "Please select a dictionary type", + "请输入字典名称": "Please enter a dictionary name", + "不能为空": "Cannot be empty", + "请选择数据字典": "Please select a data dictionary", + "请输入字典类型名称": "Please enter a dictionary type name", + "请选择文档": "Please select a document", + "请选择分组": "Please select a group", + "请选择菜单": "Please select a menu", + "请输入收件人": "Please enter the recipient", + "请输入邮件标题": "Please enter the email subject", + "请输入邮件内容": "Please enter the email content", + "请选择文件": "Please select a file", + "请选择消息": "Please select a message", + "请选择消息分类": "Please select a message category", + "请选择部门": "Please select a department", + "角色不能为空": "Role cannot be empty", + "权限不能为空": "Permissions cannot be empty", + "租户不能为空": "Tenant cannot be empty", + "请选择权限点": "Please select a permission point", + "请选择权限分组": "Please select a permission group", + "请选择套餐": "Please select a package", + "套餐不能为空": "Package cannot be empty", + "请选择地区": "Please select a region", + "请选择角色": "Please select a role", + "请选择任务": "Please select a task", + "请输入账号": "Please enter your account", + "请选择租户": "Please select a tenant", + "请输入旧密码": "Please enter your old password", + "请输入确认新密码": "Please enter your new password again", + "请输入姓名": "Please enter your name", + "请选择用户": "Please select a user", + "请选择会员": "Please select a member", + "请选择视图": "Please select a view", +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiAddInput.cs new file mode 100644 index 0000000..e5e8164 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiAddInput.cs @@ -0,0 +1,42 @@ +namespace ZhonTai.Admin.Services.Api.Dto; + +/// +/// 添加 +/// +public class ApiAddInput +{ + /// + /// 所属模块 + /// + public long? ParentId { get; set; } + + /// + /// 接口名称 + /// + public string Label { get; set; } + + /// + /// 接口地址 + /// + public string Path { get; set; } + + /// + /// 接口提交方法 + /// + public string HttpMethods { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiGetListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiGetListOutput.cs new file mode 100644 index 0000000..5cc95cd --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiGetListOutput.cs @@ -0,0 +1,67 @@ +namespace ZhonTai.Admin.Services.Api.Dto; + +/// +/// 接口列表 +/// +public class ApiGetListOutput +{ + /// + /// 接口Id + /// + public long Id { get; set; } + + /// + /// 接口父级 + /// + public long? ParentId { get; set; } + + /// + /// 接口命名 + /// + public string Name { get; set; } + + /// + /// 接口名称 + /// + public string Label { get; set; } + + /// + /// 接口地址 + /// + public string Path { get; set; } + + /// + /// 接口提交方法 + /// + public string HttpMethods { get; set; } + + /// + /// 启用操作日志 + /// + public bool EnabledLog { get; set; } + + /// + /// 启用请求参数 + /// + public bool EnabledParams { get; set; } + + /// + /// 启用响应结果 + /// + public bool EnabledResult { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiGetOutput.cs new file mode 100644 index 0000000..0dbcccd --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiGetOutput.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.Admin.Services.Api.Dto; + +/// +/// 接口 +/// +public class ApiGetOutput : ApiUpdateInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiGetPageInput.cs new file mode 100644 index 0000000..82baf89 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiGetPageInput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.Api.Dto; + +/// +/// 查询分页 +/// +public class ApiGetPageInput +{ + /// + /// 接口名称 + /// + public string Label { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSetEnableLogInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSetEnableLogInput.cs new file mode 100644 index 0000000..6bc04c5 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSetEnableLogInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.Api.Dto; + +/// +/// 设置启用请求日志 +/// +public class ApiSetEnableLogInput +{ + /// + /// 接口Id + /// + public long ApiId { get; set; } + + /// + /// 是否启用请求参数 + /// + public bool EnabledLog { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSetEnableParamsInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSetEnableParamsInput.cs new file mode 100644 index 0000000..b8dcf83 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSetEnableParamsInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.Api.Dto; + +/// +/// 设置启用请求参数 +/// +public class ApiSetEnableParamsInput +{ + /// + /// 接口Id + /// + public long ApiId { get; set; } + + /// + /// 是否启用请求参数 + /// + public bool EnabledParams { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSetEnableResultInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSetEnableResultInput.cs new file mode 100644 index 0000000..31fa93e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSetEnableResultInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.Api.Dto; + +/// +/// 设置启用请求参数 +/// +public class ApiSetEnableResultInput +{ + /// + /// 接口Id + /// + public long ApiId { get; set; } + + /// + /// 是否启用响应结果 + /// + public bool EnabledResult { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSyncInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSyncInput.cs new file mode 100644 index 0000000..d91f6bd --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSyncInput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.Api.Dto; + +/// +/// 接口同步 +/// +public class ApiSyncInput +{ + /// + /// 接口同步列表 + /// + public List Apis { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSyncModel.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSyncModel.cs new file mode 100644 index 0000000..6efb8ff --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiSyncModel.cs @@ -0,0 +1,27 @@ +namespace ZhonTai.Admin.Services.Api.Dto; + +/// +/// 接口同步模型 +/// +public class ApiSyncModel +{ + /// + /// 接口名称 + /// + public string Label { get; set; } + + /// + /// 接口地址 + /// + public string Path { get; set; } + + /// + /// 父级路径 + /// + public string ParentPath { get; set; } + + /// + /// 接口提交方法 + /// + public string HttpMethods { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiUpdateInput.cs new file mode 100644 index 0000000..110c3b3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/Dto/ApiUpdateInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Api.Dto; + +/// +/// 修改 +/// +public partial class ApiUpdateInput : ApiAddInput +{ + /// + /// 接口Id + /// + [Required] + [ValidateRequired("请选择接口")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/IApiService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/IApiService.cs new file mode 100644 index 0000000..f7183d3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Api/IApiService.cs @@ -0,0 +1,31 @@ +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.Api; +using ZhonTai.Admin.Services.Api.Dto; + +namespace ZhonTai.Admin.Services.Api; + +/// +/// api接口 +/// +public interface IApiService +{ + Task GetAsync(long id); + + Task> GetListAsync(string key); + + Task> GetPageAsync(PageInput input); + + Task AddAsync(ApiAddInput input); + + Task UpdateAsync(ApiUpdateInput input); + + Task DeleteAsync(long id); + + Task BatchDeleteAsync(long[] ids); + + Task SoftDeleteAsync(long id); + + Task BatchSoftDeleteAsync(long[] ids); + + Task SyncAsync(ApiSyncInput input); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthChangePasswordByEmailInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthChangePasswordByEmailInput.cs new file mode 100644 index 0000000..dbe4e1b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthChangePasswordByEmailInput.cs @@ -0,0 +1,38 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Auth.Dto; + +/// +/// 邮箱更改密码 +/// +public class AuthChangePasswordByEmailInput +{ + /// + /// 邮箱地址 + /// + [Required(ErrorMessage = "请输入邮箱地址")] + public string Email { get; set; } + + /// + /// 验证码 + /// + [Required(ErrorMessage = "请输入验证码")] + public string Code { get; set; } + + /// + /// 验证码Id + /// + [Required(ErrorMessage = "请获取验证码")] + public string CodeId { get; set; } + + /// + /// 新密码 + /// + [Required(ErrorMessage = "请输入新密码")] + public string NewPassword { get; set; } + + /// + /// 确认新密码 + /// + public string ConfirmPassword { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthChangePasswordByMobileInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthChangePasswordByMobileInput.cs new file mode 100644 index 0000000..3ae1031 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthChangePasswordByMobileInput.cs @@ -0,0 +1,38 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Auth.Dto; + +/// +/// 手机更改密码 +/// +public class AuthChangePasswordByMobileInput +{ + /// + /// 手机号 + /// + [Required(ErrorMessage = "请输入手机号")] + public string Mobile { get; set; } + + /// + /// 验证码 + /// + [Required(ErrorMessage = "请输入验证码")] + public string Code { get; set; } + + /// + /// 验证码Id + /// + [Required(ErrorMessage = "请获取验证码")] + public string CodeId { get; set; } + + /// + /// 新密码 + /// + [Required(ErrorMessage = "请输入新密码")] + public string NewPassword { get; set; } + + /// + /// 确认新密码 + /// + public string ConfirmPassword { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthEmailLoginInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthEmailLoginInput.cs new file mode 100644 index 0000000..cee760f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthEmailLoginInput.cs @@ -0,0 +1,27 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Auth.Dto; + +/// +/// 邮箱登录信息 +/// +public class AuthEmailLoginInput +{ + /// + /// 邮箱地址 + /// + [Required(ErrorMessage = "请输入邮箱地址")] + public string Email { get; set; } + + /// + /// 验证码 + /// + [Required(ErrorMessage = "请输入验证码")] + public string Code { get; set; } + + /// + /// 验证码Id + /// + [Required(ErrorMessage = "请获取验证码")] + public string CodeId { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthGetPasswordEncryptKeyOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthGetPasswordEncryptKeyOutput.cs new file mode 100644 index 0000000..e42f330 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthGetPasswordEncryptKeyOutput.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Services.Auth.Dto; + +/// +/// 查询密钥 +/// +public class AuthGetPasswordEncryptKeyOutput +{ + /// + /// 缓存键 + /// + public string Key { get; set; } + + /// + /// 密码加密密钥 + /// + public string EncryptKey { get; set; } + + /// + /// 密码加密向量 + /// + public string Iv { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthGetUserInfoOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthGetUserInfoOutput.cs new file mode 100644 index 0000000..6b5d087 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthGetUserInfoOutput.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Services.Auth.Dto; + +/// +/// 用户信息 +/// +public class AuthGetUserInfoOutput +{ + /// + /// 用户个人信息 + /// + public AuthUserProfileOutput User { get; set; } + + /// + /// 用户菜单列表 + /// + public List Menus { get; set; } + + /// + /// 用户权限列表 + /// + public List Permissions { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthGetUserPermissionsOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthGetUserPermissionsOutput.cs new file mode 100644 index 0000000..7d22a41 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthGetUserPermissionsOutput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.Auth.Dto; + +/// +/// 用户权限 +/// +public class AuthGetUserPermissionsOutput +{ + /// + /// 用户权限列表 + /// + public List Permissions { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthGetVerifyCodeOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthGetVerifyCodeOutput.cs new file mode 100644 index 0000000..2670206 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthGetVerifyCodeOutput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.Auth.Dto; + +/// +/// 验证码 +/// +public class AuthGetVerifyCodeOutput +{ + /// + /// 缓存键 + /// + public string Key { get; set; } + + /// + /// 图片 + /// + public string Img { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthLoginInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthLoginInput.cs new file mode 100644 index 0000000..886e154 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthLoginInput.cs @@ -0,0 +1,51 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Domain.User; + +namespace ZhonTai.Admin.Services.Auth.Dto; + +/// +/// 登录信息 +/// +public class AuthLoginInput +{ + /// + /// 用户名 + /// + public string UserName { get; set; } + + /// + /// 手机号 + /// + public string Mobile { get; set; } + + /// + /// 邮箱地址 + /// + public string Email { get; set; } + + /// + /// 账号类型 + /// + public AccountType AccountType { get; set; } = AccountType.UserName; + + /// + /// 密码 + /// + [Required(ErrorMessage = "密码不能为空")] + public string Password { get; set; } + + /// + /// 密码键 + /// + public string PasswordKey { get; set; } + + /// + /// 验证码Id + /// + public string CaptchaId { get; set; } + + /// + /// 验证码数据 + /// + public string CaptchaData { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthLoginOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthLoginOutput.cs new file mode 100644 index 0000000..f66f983 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthLoginOutput.cs @@ -0,0 +1,71 @@ +using ZhonTai.Admin.Domain.Tenant; +using ZhonTai.Admin.Domain.User; + +namespace ZhonTai.Admin.Services.Auth.Dto; + +/// +/// 登录信息 +/// +public class AuthLoginOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 账号 + /// + public string UserName { get; set; } + + /// + /// 姓名 + /// + public string Name { get; set; } + + /// + /// 用户类型 + /// + public UserType Type { get; set; } + + /// + /// 租户Id + /// + public long? TenantId { get; set; } + + /// + /// 部门Id + /// + public long? OrgId { get; set; } + + /// + /// 租户信息 + /// + public AuthLoginTenantModel Tenant { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } +} + +/// +/// 租户信息 +/// +public class AuthLoginTenantModel +{ + /// + /// 租户类型 + /// + public TenantType? TenantType { get; set; } + + /// + /// 数据库注册键 + /// + public string DbKey { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthMobileLoginInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthMobileLoginInput.cs new file mode 100644 index 0000000..501a94a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthMobileLoginInput.cs @@ -0,0 +1,27 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Auth.Dto; + +/// +/// 手机号登录信息 +/// +public class AuthMobileLoginInput +{ + /// + /// 手机号 + /// + [Required(ErrorMessage = "请输入手机号")] + public string Mobile { get; set; } + + /// + /// 验证码 + /// + [Required(ErrorMessage = "请输入验证码")] + public string Code { get; set; } + + /// + /// 验证码Id + /// + [Required(ErrorMessage = "请获取验证码")] + public string CodeId { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthRegByEmailInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthRegByEmailInput.cs new file mode 100644 index 0000000..647ab6f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthRegByEmailInput.cs @@ -0,0 +1,39 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Auth.Dto; + +/// +/// 邮箱注册 +/// +public class AuthRegByEmailInput +{ + /// + /// 邮箱地址 + /// + [Required(ErrorMessage = "请输入邮箱地址")] + public string Email { get; set; } + + /// + /// 验证码 + /// + [Required(ErrorMessage = "请输入验证码")] + public string Code { get; set; } + + /// + /// 验证码Id + /// + [Required(ErrorMessage = "请获取验证码")] + public string CodeId { get; set; } + + /// + /// 密码 + /// + [Required(ErrorMessage = "请输入密码")] + public string Password { get; set; } + + /// + /// 企业名称 + /// + [Required(ErrorMessage = "请输入企业名称")] + public string CorpName { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthRegByMobileInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthRegByMobileInput.cs new file mode 100644 index 0000000..f4583a6 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthRegByMobileInput.cs @@ -0,0 +1,39 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Auth.Dto; + +/// +/// 手机号注册 +/// +public class AuthRegByMobileInput +{ + /// + /// 手机号 + /// + [Required(ErrorMessage = "请输入手机号")] + public string Mobile { get; set; } + + /// + /// 验证码 + /// + [Required(ErrorMessage = "请输入验证码")] + public string Code { get; set; } + + /// + /// 验证码Id + /// + [Required(ErrorMessage = "请获取验证码")] + public string CodeId { get; set; } + + /// + /// 密码 + /// + [Required(ErrorMessage = "请输入密码")] + public string Password { get; set; } + + /// + /// 企业名称 + /// + [Required(ErrorMessage = "请输入企业名称")] + public string CorpName { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthUserMenuOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthUserMenuOutput.cs new file mode 100644 index 0000000..2fa0b82 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthUserMenuOutput.cs @@ -0,0 +1,95 @@ +using Newtonsoft.Json; + +namespace ZhonTai.Admin.Services.Auth.Dto; + +/// +/// 用户菜单 +/// +public class AuthUserMenuOutput +{ + /// + /// 权限Id + /// + public long Id { get; set; } + + /// + /// 父级节点 + /// + public long ParentId { get; set; } + + /// + /// 路由地址 + /// + public string Path { get; set; } + + /// + /// 路由命名 + /// + public string Name { get; set; } + + /// + /// 视图地址 + /// + public string ViewPath { get; set; } + + /// + /// 重定向地址 + /// + public string Redirect { get; set; } + + /// + /// 权限名称 + /// + public string Label { get; set; } + + /// + /// 图标 + /// + public string Icon { get; set; } + + /// + /// 打开 + /// + public bool? Opened { get; set; } + + /// + /// 隐藏 + /// + public bool Hidden { get; set; } + + /// + /// 打开新窗口 + /// + public bool? NewWindow { get; set; } + + /// + /// 链接外显 + /// + public bool? External { get; set; } + + /// + /// 是否缓存 + /// + public bool IsKeepAlive { get; set; } = true; + + /// + /// 是否固定 + /// + public bool IsAffix { get; set; } = false; + + /// + /// 链接地址 + /// + public string Link { get; set; } + + /// + /// 是否内嵌窗口 + /// + public bool IsIframe { get; set; } = false; + + /// + /// 排序 + /// + [JsonIgnore] + public int? Sort { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthUserProfileOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthUserProfileOutput.cs new file mode 100644 index 0000000..208a1dc --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/Dto/AuthUserProfileOutput.cs @@ -0,0 +1,55 @@ +using Newtonsoft.Json; + +namespace ZhonTai.Admin.Services.Auth.Dto; + +/// +/// 用户个人信息 +/// +public class AuthUserProfileOutput +{ + /// + /// 账号 + /// + public string UserName { get; set; } + + /// + /// 姓名 + /// + public string Name { get; set; } + + /// + /// 手机号 + /// + [JsonIgnore] + public string Mobile { get; set; } + + /// + /// 昵称 + /// + public string NickName { get; set; } + + /// + /// 头像 + /// + public string Avatar { get; set; } + + /// + /// 企业 + /// + public string CorpName { get; set; } + + /// + /// 职位 + /// + public string Position { get; set; } + + /// + /// 主属部门 + /// + public string DeptName { get; set; } + + /// + /// 水印文案 + /// + public string WatermarkText { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/IAuthClientService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/IAuthClientService.cs new file mode 100644 index 0000000..224bdd0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/IAuthClientService.cs @@ -0,0 +1,17 @@ +using Refit; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Auth; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Services.Auth.Dto; + +namespace ZhonTai.Admin.Services.Auth; + +/// +/// 认证授权客户端接口 +/// +[HttpClientContract(AdminConsts.AreaName)] +public interface IAuthClientService +{ + [Post("/api/admin/auth/login")] + Task LoginAsync(AuthLoginInput input); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/IAuthService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/IAuthService.cs new file mode 100644 index 0000000..91c9c4d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/IAuthService.cs @@ -0,0 +1,23 @@ +using Microsoft.AspNetCore.Mvc.ModelBinding; +using ZhonTai.Admin.Core.Auth; +using ZhonTai.Admin.Services.Auth.Dto; + +namespace ZhonTai.Admin.Services.Auth; + +/// +/// 认证授权接口 +/// +public interface IAuthService: IAuthClientService +{ + string GetToken(AuthLoginOutput user); + + TokenInfo GetTokenInfo(AuthLoginOutput user); + + Task GetUserInfoAsync(); + + Task GetPasswordEncryptKeyAsync(); + + Task Refresh([BindRequired] string token); + + Task LoginBySAML(); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/ISamlService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/ISamlService.cs new file mode 100644 index 0000000..b4cbf65 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Auth/ISamlService.cs @@ -0,0 +1,22 @@ +using ZhonTai.Admin.Core.Auth; + +namespace ZhonTai.Admin.Services.Auth; + +/// +/// SAML认证服务接口 +/// +public interface ISamlService +{ + /// + /// 获取SAML登录URL + /// + /// + Task GetLoginUrlAsync(); + + /// + /// SAML回调处理 + /// + /// + /// + Task ProcessCallbackAsync(string SAMLResponse); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardAddInput.cs new file mode 100644 index 0000000..a6580fc --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardAddInput.cs @@ -0,0 +1,48 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Contracts.Services.Board.Dto; + +/// +/// 添加看板 +/// +public class BoardAddInput +{ + /// + /// 看板名称 + /// + [Required(ErrorMessage = "请输入看板名称")] + public string Name { get; set; } + + /// + /// 功能简介 + /// + public string Description { get; set; } + + /// + /// 关键词 + /// + public string Keywords { get; set; } + + /// + /// 网址 + /// + [Required(ErrorMessage = "请输入网址")] + [Url(ErrorMessage = "请输入正确的网址格式")] + public string Url { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 排序 + /// + public int Sort { get; set; } + + + /// + /// 安全验证 + /// + public bool Safety { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardGetOutput.cs new file mode 100644 index 0000000..17d20c8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardGetOutput.cs @@ -0,0 +1,57 @@ +namespace ZhonTai.Admin.Contracts.Services.Board.Dto; + +/// +/// 看板查询输出 +/// +public class BoardGetOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 看板名称 + /// + public string Name { get; set; } + + /// + /// 功能简介 + /// + public string Description { get; set; } + + /// + /// 关键词 + /// + public string Keywords { get; set; } + + /// + /// 网址 + /// + public string Url { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 安全验证 + /// + public bool Safety { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } + + /// + /// 修改时间 + /// + public DateTime? ModifiedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardGetPageInput.cs new file mode 100644 index 0000000..90d58eb --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardGetPageInput.cs @@ -0,0 +1,27 @@ +namespace ZhonTai.Admin.Contracts.Services.Board.Dto; + +/// +/// 看板分页查询输入 +/// +public class BoardGetPageInput +{ + /// + /// 看板名称 + /// + public string Name { get; set; } + + /// + /// 关键词 + /// + public string Keywords { get; set; } + + /// + /// 创建开始时间 + /// + public DateTime? StartCreatedTime { get; set; } + + /// + /// 创建结束时间 + /// + public DateTime? EndCreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardGetPageOutput.cs new file mode 100644 index 0000000..832c3fd --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardGetPageOutput.cs @@ -0,0 +1,47 @@ +namespace ZhonTai.Admin.Contracts.Services.Board.Dto; + +/// +/// 看板分页查询输出 +/// +public class BoardGetPageOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 看板名称 + /// + public string Name { get; set; } + + /// + /// 功能简介 + /// + public string Description { get; set; } + + /// + /// 关键词 + /// + public string Keywords { get; set; } + + /// + /// 网址 + /// + public string Url { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardUpdateInput.cs new file mode 100644 index 0000000..4312862 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardUpdateInput.cs @@ -0,0 +1,15 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Contracts.Services.Board.Dto; + +/// +/// 修改看板 +/// +public class BoardUpdateInput : BoardAddInput +{ + /// + /// 主键Id + /// + [Required(ErrorMessage = "请选择要修改的看板")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardUserAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardUserAddInput.cs new file mode 100644 index 0000000..2ef247a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardUserAddInput.cs @@ -0,0 +1,21 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Contracts.Services.Board.Dto; + +/// +/// 批量添加看板用户 +/// +public class BoardUserAddInput +{ + /// + /// 看板Id列表 + /// + [Required(ErrorMessage = "请选择看板")] + public long BoardId { get; set; } + + /// + /// 用户Id列表 + /// + [Required(ErrorMessage = "请选择用户")] + public long[] UserIds { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardUserGetListInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardUserGetListInput.cs new file mode 100644 index 0000000..795fe7b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardUserGetListInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Contracts.Services.Board.Dto; + +/// +/// 看板用户列表查询 +/// +public class BoardUserGetListInput +{ + /// + /// 看板Id + /// + public long BoardId { get; set; } + + /// + /// 用户姓名 + /// + public string UserName { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardUserGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardUserGetOutput.cs new file mode 100644 index 0000000..58ee44a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/Dto/BoardUserGetOutput.cs @@ -0,0 +1,39 @@ +using ZhonTai.Admin.Domain.User; + +namespace ZhonTai.Admin.Contracts.Services.Board.Dto; + +/// +/// 看板用户 +/// +public class BoardUserGetOutput +{ + /// + /// 用户Id + /// + public long UserId { get; set; } + + /// + /// 看板Id + /// + public long BoardId { get; set; } + + /// + /// 用户姓名 + /// + public string UserName { get; set; } + + /// + /// 用户账号 + /// + public string Name { get; set; } + + /// + /// 手机号 + /// + public string Mobile { get; set; } + + /// + /// 邮箱 + /// + public string Email { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/IBoardService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/IBoardService.cs new file mode 100644 index 0000000..5fc6241 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Board/IBoardService.cs @@ -0,0 +1,72 @@ +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Contracts.Services.Board.Dto; + +namespace ZhonTai.Admin.Contracts.Services.Board; + +/// +/// 看板服务接口 +/// +public interface IBoardService +{ + /// + /// 获取看板 + /// + /// 主键Id + /// + Task GetAsync(long id); + + /// + /// 查询看板分页 + /// + /// 查询参数 + /// + Task> GetPageAsync(PageInput input); + + /// + /// 新增看板 + /// + /// 新增参数 + /// + Task AddAsync(BoardAddInput input); + + /// + /// 修改看板 + /// + /// 修改参数 + /// + Task UpdateAsync(BoardUpdateInput input); + + /// + /// 删除看板 + /// + /// 主键Id + /// + Task DeleteAsync(long id); + + /// + /// 根据用户ID获取看板列表 + /// + /// + Task> GetBoardListByUserIdAsync(); + + /// + /// 获取看板用户列表 + /// + /// 查询参数 + /// + Task> GetBoardUserListAsync(BoardUserGetListInput input); + + /// + /// 批量添加看板用户 + /// + /// 添加参数 + /// + Task AddBoardUserAsync(BoardUserAddInput input); + + /// + /// 批量移除看板用户 + /// + /// 移除参数 + /// + Task RemoveBoardUserAsync(BoardUserAddInput input); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Cache/ICacheService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Cache/ICacheService.cs new file mode 100644 index 0000000..2451f7b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Cache/ICacheService.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace ZhonTai.Admin.Services.Cache; + +/// +/// 缓存接口 +/// +public interface ICacheService +{ + /// + /// 缓存列表 + /// + /// + List GetList(); + + /// + /// 清除缓存 + /// + /// + /// + Task ClearAsync(string cacheKey); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Captcha/Dto/SendEmailCodeInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Captcha/Dto/SendEmailCodeInput.cs new file mode 100644 index 0000000..118405f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Captcha/Dto/SendEmailCodeInput.cs @@ -0,0 +1,33 @@ +using Lazy.SlideCaptcha.Core.Validator; +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Captcha.Dto; + +/// +/// 发送邮箱验证码 +/// +public class SendEmailCodeInput +{ + /// + /// 邮箱地址 + /// + [Required(ErrorMessage = "请输入邮箱地址")] + public string Email { get; set; } + + /// + /// 验证码Id + /// + public string? CodeId { get; set; } + + /// + /// 验证码Id + /// + [Required(ErrorMessage = "请完成安全验证")] + public string CaptchaId { get; set; } + + /// + /// 滑动轨迹 + /// + [Required(ErrorMessage = "请完成安全验证")] + public SlideTrack Track { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Captcha/Dto/SendSmsCodeInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Captcha/Dto/SendSmsCodeInput.cs new file mode 100644 index 0000000..ede24dc --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Captcha/Dto/SendSmsCodeInput.cs @@ -0,0 +1,33 @@ +using Lazy.SlideCaptcha.Core.Validator; +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Captcha.Dto; + +/// +/// 发送短信验证码 +/// +public class SendSmsCodeInput +{ + /// + /// 手机号 + /// + [Required(ErrorMessage = "请输入手机号")] + public string Mobile { get; set; } + + /// + /// 验证码Id + /// + public string? CodeId { get; set; } + + /// + /// 验证码Id + /// + [Required(ErrorMessage = "请完成安全验证")] + public string CaptchaId { get; set; } + + /// + /// 滑动轨迹 + /// + [Required(ErrorMessage = "请完成安全验证")] + public SlideTrack Track { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictAddInput.cs new file mode 100644 index 0000000..bff4731 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictAddInput.cs @@ -0,0 +1,47 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Dict.Dto; + +/// +/// 添加字典 +/// +public class DictAddInput +{ + /// + /// 字典类型Id + /// + [ValidateRequired(ErrorMessage = "请选择字典类型")] + public long DictTypeId { get; set; } + + /// + /// 字典名称 + /// + [Required(ErrorMessage = "请输入字典名称")] + public string Name { get; set; } + + /// + /// 字典编码 + /// + public string Code { get; set; } + + /// + /// 字典值 + /// + public string Value { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 排序 + /// + public int? Sort { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictExport.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictExport.cs new file mode 100644 index 0000000..91ffc22 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictExport.cs @@ -0,0 +1,71 @@ +using Magicodes.ExporterAndImporter.Core; +using Magicodes.ExporterAndImporter.Excel; +using Magicodes.IE.Core; +using OfficeOpenXml.Table; +using System.Reflection; + +namespace ZhonTai.Admin.Services.Dict.Dto; + +/// +/// 布尔值映射 +/// +[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)] +public class BoolValueMappingAttribute : ValueMappingsBaseAttribute +{ + public override Dictionary GetMappings(PropertyInfo propertyInfo) + { + var res = new Dictionary + { + { "是", true }, + { "否", false } + }; + return res; + } +} + +[ExcelExporter(Name = "字典列表")] +public class DictExportHeader +{ + [ExporterHeader(DisplayName = "字典分类", ColumnIndex = 2)] + public string DictTypeName { get; set; } + + [ExporterHeader(DisplayName = "字典名称", ColumnIndex = 3)] + public string Name { get; set; } + + [ExporterHeader(DisplayName = "字典编码", ColumnIndex = 4)] + public string Code { get; set; } + + [ExporterHeader(DisplayName = "字典值", ColumnIndex = 5)] + public string Value { get; set; } + + //[BoolValueMapping] + //[ValueMapping(text: "是", true)] + //[ValueMapping(text: "否", false)] + [ExporterHeader(DisplayName = "启用", ColumnIndex = 6)] + public bool Enabled { get; set; } + + [ExporterHeader(DisplayName = "排序", ColumnIndex = 7)] + public int Sort { get; set; } + + [ExporterHeader(DisplayName = "说明", ColumnIndex = 8)] + public string Description { get; set; } +} + +[ExcelExporter(Name = "字典列表", TableStyle = TableStyles.Light9, AutoFitAllColumn = true, AutoFitMaxRows = 5000)] +public class DictExport: DictExportHeader +{ + [ExporterHeader(DisplayName = "字典编号", Format = "0", ColumnIndex = 1)] + public long Id { get; set; } + + [ExporterHeader(DisplayName = "创建人员", ColumnIndex = 10)] + public string CreatedUserRealName { get; set; } + + [ExporterHeader(DisplayName = "创建时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20, ColumnIndex = 11)] + public DateTime? CreatedTime { get; set; } + + [ExporterHeader(DisplayName = "修改人员", ColumnIndex = 12)] + public string ModifiedUserRealName { get; set; } + + [ExporterHeader(DisplayName = "修改时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20, ColumnIndex = 13)] + public virtual DateTime? ModifiedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictGetListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictGetListOutput.cs new file mode 100644 index 0000000..47a9146 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictGetListOutput.cs @@ -0,0 +1,41 @@ +using Newtonsoft.Json; + +namespace ZhonTai.Admin.Services.Dict.Dto; + +/// +/// 字典列表 +/// +public class DictGetListOutput +{ + /// + /// 字典类型编码 + /// + [JsonIgnore] + public string DictTypeCode { get; set; } + + /// + /// 字典类型名称 + /// + [JsonIgnore] + public string DictTypeName { get; set; } + + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 字典名称 + /// + public string Name { get; set; } + + /// + /// 字典编码 + /// + public string Code { get; set; } + + /// + /// 字典值 + /// + public string Value { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictGetOutput.cs new file mode 100644 index 0000000..c4685e4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictGetOutput.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.Admin.Services.Dict.Dto; + +/// +/// 字典 +/// +public class DictGetOutput : DictUpdateInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictGetPageInput.cs new file mode 100644 index 0000000..1351244 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictGetPageInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Domain.Dict.Dto; + +/// +/// 字典分页请求 +/// +public partial class DictGetPageInput +{ + /// + /// 字典类型Id + /// + public long DictTypeId { get; set; } + + /// + /// 字典名称 + /// + public string Name { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictGetPageOutput.cs new file mode 100644 index 0000000..ffc3a22 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictGetPageOutput.cs @@ -0,0 +1,37 @@ +namespace ZhonTai.Admin.Services.Dict.Dto; + +/// +/// 字典分页响应 +/// +public class DictGetPageOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 字典名称 + /// + public string Name { get; set; } + + /// + /// 字典编码 + /// + public string Code { get; set; } + + /// + /// 字典值 + /// + public string Value { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictImport.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictImport.cs new file mode 100644 index 0000000..683fc21 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictImport.cs @@ -0,0 +1,71 @@ +using Magicodes.ExporterAndImporter.Core; +using Magicodes.ExporterAndImporter.Core.Filters; +using Magicodes.ExporterAndImporter.Core.Models; +using Magicodes.ExporterAndImporter.Excel; +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Dict.Dto; + +/// +/// 字典导入列头筛选器 +/// +public class DictImportHeaderFilter : IImportHeaderFilter +{ + public List Filter(List importerHeaderInfos) + { + foreach (var item in importerHeaderInfos) + { + if (item.PropertyName == "Enabled") + { + item.MappingValues = new Dictionary() + { + {"是", true }, + {"否", false } + }; + } + } + return importerHeaderInfos; + } +} + +/// +/// 字典导入 +/// +[ExcelImporter(IsLabelingError = true, ImportHeaderFilter = typeof(DictImportHeaderFilter))] +public class DictImport +{ + /// + /// 字典Id + /// + [ImporterHeader(Name = "字典Id", IsIgnore = true)] + public long Id { get; set; } + + /// + /// 字典类型Id + /// + [ImporterHeader(Name = "字典类型Id", IsIgnore = true)] + public long DictTypeId { get; set; } + + [ImporterHeader(Name = "字典分类")] + [Required(ErrorMessage = "不能为空")] + public string DictTypeName { get; set; } + + [ImporterHeader(Name = "字典名称", IsAllowRepeat = false)] + [Required(ErrorMessage = "不能为空")] + public string Name { get; set; } + + [ImporterHeader(Name = "字典编码", IsAllowRepeat = false)] + public string Code { get; set; } + + [ImporterHeader(Name = "字典值", IsAllowRepeat = false)] + public string Value { get; set; } + + [ImporterHeader(Name = "启用",IsInterValidation = false)] + public bool Enabled { get; set; } + + [ImporterHeader(Name = "排序")] + public int Sort { get; set; } + + [ImporterHeader(Name = "说明")] + public string Description { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictUpdateInput.cs new file mode 100644 index 0000000..da581bf --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/Dto/DictUpdateInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Dict.Dto; + +/// +/// 修改 +/// +public class DictUpdateInput : DictAddInput +{ + /// + /// 主键Id + /// + [Required] + [ValidateRequired("请选择数据字典")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/IDictService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/IDictService.cs new file mode 100644 index 0000000..253d0fa --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Dict/IDictService.cs @@ -0,0 +1,27 @@ +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Services.Dict.Dto; +using ZhonTai.Admin.Domain.Dict.Dto; + +namespace ZhonTai.Admin.Services.Dict; + +/// +/// 数据字典接口 +/// +public partial interface IDictService +{ + Task GetAsync(long id); + + Task> GetPageAsync(PageInput input); + + Task AddAsync(DictAddInput input); + + Task UpdateAsync(DictUpdateInput input); + + Task DeleteAsync(long id); + + Task BatchDeleteAsync(long[] ids); + + Task SoftDeleteAsync(long id); + + Task BatchSoftDeleteAsync(long[] ids); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeAddInput.cs new file mode 100644 index 0000000..7074a6d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeAddInput.cs @@ -0,0 +1,45 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.DictType.Dto; + +/// +/// 字典类型 +/// +public class DictTypeAddInput +{ + /// + /// 上级Id + /// + public long ParentId { get; set; } + + /// + /// 字典类型名称 + /// + [Required(ErrorMessage = "请输入字典类型名称")] + public string Name { get; set; } + + /// + /// 字典类型编码 + /// + public string Code { get; set; } + + /// + /// 描述 + /// + public string Description { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 是否树形 + /// + public bool IsTree { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeGetOutput.cs new file mode 100644 index 0000000..23be8a2 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeGetOutput.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.Admin.Services.DictType.Dto; + +/// +/// 字典类型 +/// +public class DictTypeGetOutput : DictTypeUpdateInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeGetPageInput.cs new file mode 100644 index 0000000..b00795c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeGetPageInput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.DictType.Dto; + +/// +/// 字典类型分页请求 +/// +public partial class DictTypeGetPageInput +{ + /// + /// 字典名称 + /// + public string Name { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeGetPageOutput.cs new file mode 100644 index 0000000..446191a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeGetPageOutput.cs @@ -0,0 +1,32 @@ +namespace ZhonTai.Admin.Services.DictType.Dto; + +/// +/// 字典类型分页响应 +/// +public class DictTypeGetPageOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 字典名称 + /// + public string Name { get; set; } + + /// + /// 字典编码 + /// + public string Code { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeUpdateInput.cs new file mode 100644 index 0000000..2db1807 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/Dto/DictTypeUpdateInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.DictType.Dto; + +/// +/// 修改 +/// +public class DictTypeUpdateInput : DictTypeAddInput +{ + /// + /// 主键Id + /// + [Required] + [ValidateRequired("请选择数据字典类型")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/IDictTypeService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/IDictTypeService.cs new file mode 100644 index 0000000..cb1eff8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/DictType/IDictTypeService.cs @@ -0,0 +1,26 @@ +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Services.DictType.Dto; + +namespace ZhonTai.Admin.Services.DictType; + +/// +/// 数据字典类型接口 +/// +public partial interface IDictTypeService +{ + Task GetAsync(long id); + + Task> GetPageAsync(PageInput input); + + Task AddAsync(DictTypeAddInput input); + + Task UpdateAsync(DictTypeUpdateInput input); + + Task DeleteAsync(long id); + + Task BatchDeleteAsync(long[] ids); + + Task SoftDeleteAsync(long id); + + Task BatchSoftDeleteAsync(long[] ids); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocAddGroupInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocAddGroupInput.cs new file mode 100644 index 0000000..3c8af65 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocAddGroupInput.cs @@ -0,0 +1,34 @@ +using ZhonTai.Admin.Domain.Doc; + +namespace ZhonTai.Admin.Services.Doc.Dto; + +/// +/// 添加分组 +/// +public class DocAddGroupInput +{ + /// + /// 父级节点 + /// + public long ParentId { get; set; } + + /// + /// 类型 + /// + public DocType Type { get; set; } + + /// + /// 名称 + /// + public string Label { get; set; } + + /// + /// 命名 + /// + public string Name { get; set; } + + /// + /// 打开 + /// + public bool? Opened { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocAddImageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocAddImageInput.cs new file mode 100644 index 0000000..b0e47a4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocAddImageInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.Doc.Dto; + +/// +/// 添加图片 +/// +public class DocAddImageInput +{ + /// + /// 用户Id + /// + public long DocumentId { get; set; } + + /// + /// 请求路径 + /// + public string Url { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocAddMenuInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocAddMenuInput.cs new file mode 100644 index 0000000..d0a4d55 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocAddMenuInput.cs @@ -0,0 +1,34 @@ +using ZhonTai.Admin.Domain.Doc; + +namespace ZhonTai.Admin.Services.Doc.Dto; + +/// +/// 添加菜单 +/// +public class DocAddMenuInput +{ + /// + /// 父级节点 + /// + public long ParentId { get; set; } + + /// + /// 类型 + /// + public DocType Type { get; set; } + + /// + /// 命名 + /// + public string Name { get; set; } + + /// + /// 名称 + /// + public string Label { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocGetContentOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocGetContentOutput.cs new file mode 100644 index 0000000..04e949b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocGetContentOutput.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Services.Doc.Dto; + +/// +/// 文档内容 +/// +public class DocGetContentOutput +{ + /// + /// 编号 + /// + public long Id { get; set; } + + /// + /// 名称 + /// + public string Label { get; set; } + + /// + /// 内容 + /// + public string Content { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocGetGroupOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocGetGroupOutput.cs new file mode 100644 index 0000000..f7486ab --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocGetGroupOutput.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.Admin.Services.Doc.Dto; + +/// +/// 文档分组 +/// +public class DocGetGroupOutput : DocUpdateGroupInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocGetMenuOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocGetMenuOutput.cs new file mode 100644 index 0000000..658f3cb --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocGetMenuOutput.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.Admin.Services.Doc.Dto; + +/// +/// 文档菜单 +/// +public class DocGetMenuOutput : DocUpdateMenuInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocListOutput.cs new file mode 100644 index 0000000..b767f82 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocListOutput.cs @@ -0,0 +1,44 @@ +using ZhonTai.Admin.Domain.Doc; + +namespace ZhonTai.Admin.Services.Doc.Dto; + +/// +/// 文档列表 +/// +public class DocListOutput +{ + /// + /// 编号 + /// + public long Id { get; set; } + + /// + /// 父级节点 + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + public string Label { get; set; } + + /// + /// 类型 + /// + public DocType Type { get; set; } + + /// + /// 命名 + /// + public string Name { get; set; } + + /// + /// 描述 + /// + public string Description { get; set; } + + /// + /// 组打开 + /// + public bool? Opened { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocUpdateContentInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocUpdateContentInput.cs new file mode 100644 index 0000000..5213842 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocUpdateContentInput.cs @@ -0,0 +1,32 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Doc.Dto; + +/// +/// 更新文档内容 +/// +public class DocUpdateContentInput +{ + /// + /// 编号 + /// + [Required] + [ValidateRequired("请选择文档")] + public long Id { get; set; } + + /// + /// 名称 + /// + public string Label { get; set; } + + /// + /// 内容 + /// + public string Content { get; set; } + + /// + /// Html + /// + public string Html { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocUpdateGroupInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocUpdateGroupInput.cs new file mode 100644 index 0000000..0eafc1a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocUpdateGroupInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Doc.Dto; + +/// +/// 更新分组 +/// +public class DocUpdateGroupInput : DocAddGroupInput +{ + /// + /// 编号 + /// + [Required] + [ValidateRequired("请选择分组")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocUpdateMenuInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocUpdateMenuInput.cs new file mode 100644 index 0000000..ee70c7f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocUpdateMenuInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Doc.Dto; + +/// +/// 更新菜单 +/// +public class DocUpdateMenuInput : DocAddMenuInput +{ + /// + /// 编号 + /// + [Required] + [ValidateRequired("请选择菜单")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocUploadImageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocUploadImageInput.cs new file mode 100644 index 0000000..56ff69f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/Dto/DocUploadImageInput.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.Http; + +namespace ZhonTai.Admin.Services.Doc.Dto; + +/// +/// 上传图片 +/// +public class DocUploadImageInput +{ + /// + /// 上传文件 + /// + public IFormFile File { get; set; } + + /// + /// 文档编号 + /// + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/IDocService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/IDocService.cs new file mode 100644 index 0000000..57a8414 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Doc/IDocService.cs @@ -0,0 +1,42 @@ +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Services.Doc.Dto; + +namespace ZhonTai.Admin.Services.Doc; + +/// +/// 文档接口 +/// +public partial interface IDocService +{ + Task> GetImageListAsync(long id); + + Task GetGroupAsync(long id); + + Task GetMenuAsync(long id); + + Task GetContentAsync(long id); + + Task> GetPlainListAsync(); + + Task> GetListAsync(string key, DateTime? start, DateTime? end); + + Task AddGroupAsync(DocAddGroupInput input); + + Task AddMenuAsync(DocAddMenuInput input); + + Task AddImageAsync(DocAddImageInput input); + + Task UpdateGroupAsync(DocUpdateGroupInput input); + + Task UpdateMenuAsync(DocUpdateMenuInput input); + + Task UpdateContentAsync(DocUpdateContentInput input); + + Task DeleteAsync(long id); + + Task DeleteImageAsync(long documentId, string url); + + Task SoftDeleteAsync(long id); + + Task UploadImage([FromForm] DocUploadImageInput input); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/Events/EmailMultipleSendEvent.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/Events/EmailMultipleSendEvent.cs new file mode 100644 index 0000000..767afcf --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/Events/EmailMultipleSendEvent.cs @@ -0,0 +1,92 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Email.Events; + +/// +/// 邮件多发 +/// +public class EmailMultipleSendEvent +{ + public static class Models + { + /// + /// 邮箱 + /// + public class EmailModel + { + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 地址 + /// + public string Address { get; set; } + } + } + + /// + /// 发件人 + /// + public Models.EmailModel? FromEmail { get; set; } + + /// + /// 收件人列表 + /// + [Required(ErrorMessage = "请输入收件人")] + public List ToEmails { get; set; } = new List(); + + /// + /// 抄送人列表 + /// + public List CcEmails { get; set; } = new List(); + + /// + /// 密送人列表 + /// + public List BccEmails { get; set; } = new List(); + + /// + /// 邮件标题 + /// + [Required(ErrorMessage = "请输入邮件标题")] + public string Subject { get; set; } + + /// + /// 邮件内容 + /// + [Required(ErrorMessage = "请输入邮件内容")] + public string Body { get; set; } + + /// + /// 是否HTML格式 + /// + public bool IsHtml { get; set; } = true; + + /// + /// 附件列表 + /// + public List Attachments { get; set; } = new List(); + + /// + /// 附件模型 + /// + public class AttachmentModel + { + /// + /// 文件名 + /// + public string FileName { get; set; } + + /// + /// 文件内容(Base64编码) + /// + public string Content { get; set; } + + /// + /// 文件类型 + /// + public string ContentType { get; set; } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/Events/EmailSendCodeEvent.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/Events/EmailSendCodeEvent.cs new file mode 100644 index 0000000..4ad6aab --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/Events/EmailSendCodeEvent.cs @@ -0,0 +1,39 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Email.Events; + +/// +/// 邮箱验证码 +/// +public class EmailSendCodeEvent +{ + public static class Models + { + /// + /// 邮箱 + /// + public class EmailModel + { + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 地址 + /// + public string Address { get; set; } + } + } + + /// + /// 收件人 + /// + [Required(ErrorMessage = "请输入收件人")] + public Models.EmailModel ToEmail { get; set; } + + /// + /// 验证码 + /// + public string Code { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/Events/EmailSingleSendEvent.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/Events/EmailSingleSendEvent.cs new file mode 100644 index 0000000..27d3564 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/Events/EmailSingleSendEvent.cs @@ -0,0 +1,51 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Email.Events; + +/// +/// 邮件单发 +/// +public class EmailSingleSendEvent +{ + public static class Models + { + /// + /// 邮箱 + /// + public class EmailModel + { + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 地址 + /// + public string Address { get; set; } + } + } + + /// + /// 发件人 + /// + public Models.EmailModel? FromEmail { get; set; } + + /// + /// 收件人 + /// + [Required(ErrorMessage = "请输入收件人")] + public Models.EmailModel ToEmail { get; set; } + + /// + /// 邮件标题 + /// + [Required(ErrorMessage = "请输入邮件标题")] + public string Subject { get; set; } + + /// + /// 邮件内容 + /// + [Required(ErrorMessage = "请输入邮件内容")] + public string Body { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/Events/SmsSingleSendEvent.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/Events/SmsSingleSendEvent.cs new file mode 100644 index 0000000..9c139c7 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/Events/SmsSingleSendEvent.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.Email.Events; + +/// +/// 短信单发事件 +/// +public class SmsSingleSendEvent +{ + /// + /// 手机号 + /// + public string Mobile { get; set; } + + /// + /// 短信内容 + /// + public string Text { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/IEmailSendService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/IEmailSendService.cs new file mode 100644 index 0000000..c1fa7d9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Email/IEmailSendService.cs @@ -0,0 +1,61 @@ +using ZhonTai.Admin.Services.Email.Events; + +namespace ZhonTai.Admin.Contracts.Services.Email; + +/// +/// 邮件发送服务接口 +/// +public interface IEmailSendService +{ + /// + /// 发送单封邮件 + /// + /// 收件人邮箱 + /// 收件人姓名 + /// 邮件主题 + /// 邮件内容 + /// 发件人邮箱(可选) + /// 发件人姓名(可选) + /// + Task SendSingleEmailAsync(string toEmail, string toName, string subject, string body, string fromEmail = null, string fromName = null); + + /// + /// 发送多封邮件 + /// + /// 收件人列表 + /// 邮件主题 + /// 邮件内容 + /// 抄送人列表(可选) + /// 密送人列表(可选) + /// 是否HTML格式 + /// 附件列表(可选) + /// 发件人邮箱(可选) + /// 发件人姓名(可选) + /// + Task SendMultipleEmailAsync( + List<(string email, string name)> toEmails, + string subject, + string body, + List<(string email, string name)> ccEmails = null, + List<(string email, string name)> bccEmails = null, + bool isHtml = true, + List attachments = null, + string fromEmail = null, + string fromName = null); + + /// + /// 发送带附件的邮件 + /// + /// 收件人列表 + /// 邮件主题 + /// 邮件内容 + /// 附件列表 + /// 是否HTML格式 + /// + Task SendEmailWithAttachmentsAsync( + List<(string email, string name)> toEmails, + string subject, + string body, + List attachments, + bool isHtml = true); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackDetailOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackDetailOutput.cs new file mode 100644 index 0000000..aab94bc --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackDetailOutput.cs @@ -0,0 +1,42 @@ +namespace ZhonTai.Admin.Contracts.Services.Feedback; + +/// +/// 反馈详情输出 +/// +public class FeedbackDetailOutput : FeedbackListOutput +{ + /// + /// 反馈内容(完整内容) + /// + public string Content { get; set; } + + /// + /// 相关知情人 + /// + public string RelatedPersons { get; set; } + + /// + /// 附件文件路径 + /// + public string AttachmentPaths { get; set; } + + /// + /// 处理备注 + /// + public string ProcessRemark { get; set; } + + /// + /// 创建人 + /// + public long? CreatedUserId { get; set; } + + /// + /// 创建人姓名 + /// + public string CreatedUserName { get; set; } + + /// + /// 修改时间 + /// + public DateTime? ModifiedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackListOutput.cs new file mode 100644 index 0000000..0f96e5a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackListOutput.cs @@ -0,0 +1,74 @@ +using ZhonTai.Admin.Contracts.Domain.Feedback; + +namespace ZhonTai.Admin.Contracts.Services.Feedback; + +/// +/// 反馈列表输出 +/// +public class FeedbackListOutput +{ + /// + /// 主键ID + /// + public long Id { get; set; } + + /// + /// 反馈标题 + /// + public string Title { get; set; } + + /// + /// 反馈类型 + /// + public FeedbackTypeEnum FeedbackType { get; set; } + + /// + /// 反馈类型名称 + /// + public string FeedbackTypeName { get; set; } + + /// + /// 被反馈团队 + /// + public string FeedbackTeam { get; set; } + + /// + /// 反馈人姓名 + /// + public string FeedbackPersonName { get; set; } + + /// + /// 反馈人邮箱 + /// + public string FeedbackPersonEmail { get; set; } + + /// + /// 处理状态 + /// + public FeedbackStatusEnum Status { get; set; } + + /// + /// 处理状态名称 + /// + public string StatusName { get; set; } + + /// + /// 处理人姓名 + /// + public string ProcessorName { get; set; } + + /// + /// 处理时间 + /// + public DateTime? ProcessTime { get; set; } + + /// + /// 反馈内容(摘要) + /// + public string ContentSummary { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackPageFilter.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackPageFilter.cs new file mode 100644 index 0000000..a5985b2 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackPageFilter.cs @@ -0,0 +1,44 @@ +using ZhonTai.Admin.Contracts.Domain.Feedback; + +namespace ZhonTai.Admin.Contracts.Services.Feedback; + +/// +/// 反馈分页过滤器 +/// +public class FeedbackPageFilter +{ + /// + /// 反馈标题 + /// + public string Title { get; set; } + + /// + /// 反馈类型 + /// + public FeedbackTypeEnum? FeedbackType { get; set; } + + /// + /// 被反馈团队 + /// + public string FeedbackTeam { get; set; } + + /// + /// 反馈人姓名 + /// + public string FeedbackPersonName { get; set; } + + /// + /// 处理状态 + /// + public FeedbackStatusEnum? Status { get; set; } + + /// + /// 创建开始时间 + /// + public DateTime? CreatedTimeStart { get; set; } + + /// + /// 创建结束时间 + /// + public DateTime? CreatedTimeEnd { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackProcessInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackProcessInput.cs new file mode 100644 index 0000000..fadd868 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackProcessInput.cs @@ -0,0 +1,21 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Contracts.Services.Feedback; + +/// +/// 反馈处理输入 +/// +public class FeedbackProcessInput +{ + /// + /// 反馈ID + /// + [Required(ErrorMessage = "反馈ID不能为空")] + public long FeedbackId { get; set; } + + /// + /// 处理备注 + /// + [StringLength(500, ErrorMessage = "处理备注长度不能超过500个字符")] + public string ProcessRemark { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackSubmitInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackSubmitInput.cs new file mode 100644 index 0000000..938109b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackSubmitInput.cs @@ -0,0 +1,53 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Contracts.Domain.Feedback; + +namespace ZhonTai.Admin.Contracts.Services.Feedback; + +/// +/// 意见反馈提交输入 +/// +public class FeedbackSubmitInput +{ + /// + /// 反馈标题 + /// + [Required(ErrorMessage = "反馈标题不能为空")] + [StringLength(200, ErrorMessage = "反馈标题长度不能超过200个字符")] + public string Title { get; set; } + + /// + /// 反馈类型 + /// + [Required(ErrorMessage = "反馈类型不能为空")] + public FeedbackTypeEnum FeedbackType { get; set; } + + /// + /// 反馈人Id + /// + public long FeedbackPersonId { get; set; } + + /// + /// 被反馈团队 + /// + [Required(ErrorMessage = "被反馈团队不能为空")] + [StringLength(100, ErrorMessage = "被反馈团队长度不能超过100个字符")] + public string FeedbackTeam { get; set; } + + /// + /// 相关知情人 + /// + [StringLength(500, ErrorMessage = "相关知情人长度不能超过500个字符")] + public string RelatedPersons { get; set; } + + /// + /// 建议内容 + /// + [Required(ErrorMessage = "建议内容不能为空")] + public string Content { get; set; } + + /// + /// 附件文件路径 + /// + [StringLength(1000, ErrorMessage = "附件路径长度不能超过1000个字符")] + public string AttachmentPaths { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackTeamProcessorAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackTeamProcessorAddInput.cs new file mode 100644 index 0000000..08ec037 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackTeamProcessorAddInput.cs @@ -0,0 +1,85 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Contracts.Services.Feedback; + +/// +/// 反馈团队负责人添加输入 +/// +public class FeedbackTeamProcessorAddInput +{ + /// + /// 团队名称 + /// + [Required(ErrorMessage = "团队名称不能为空")] + [StringLength(100, ErrorMessage = "团队名称长度不能超过100个字符")] + public string TeamName { get; set; } + + /// + /// 站点 + /// + [Required(ErrorMessage = "站点不能为空")] + [StringLength(50, ErrorMessage = "站点长度不能超过50个字符")] + public string Site { get; set; } + + /// + /// 处理人ID(模块负责人) + /// + [Required(ErrorMessage = "处理人ID不能为空")] + public long ProcessorId { get; set; } + + /// + /// 处理人姓名(模块负责人) + /// + [Required(ErrorMessage = "处理人姓名不能为空")] + [StringLength(50, ErrorMessage = "处理人姓名长度不能超过50个字符")] + public string ProcessorName { get; set; } + + /// + /// 处理人邮箱 + /// + [Required(ErrorMessage = "处理人邮箱不能为空")] + [EmailAddress(ErrorMessage = "邮箱格式不正确")] + [StringLength(100, ErrorMessage = "邮箱长度不能超过100个字符")] + public string ProcessorEmail { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } = 0; +} + +/// +/// 预定义的团队负责人配置数据 +/// +public static class FeedbackTeamProcessorSeedData +{ + /// + /// 获取预定义的团队负责人配置 + /// + /// 团队负责人配置列表 + public static List GetSeedData() + { + return new List + { + // 上游生产 + new() { TeamName = "上游生产", Site = "WGQ", ProcessorName = "程安阳", ProcessorEmail = "chenganyang@company.com", ProcessorId = 1001 }, + new() { TeamName = "上游生产", Site = "FX", ProcessorName = "方明月", ProcessorEmail = "fangmingyue@company.com", ProcessorId = 1002 }, + new() { TeamName = "上游生产", Site = "WX", ProcessorName = "马军", ProcessorEmail = "majun@company.com", ProcessorId = 1003 }, + + // 下游生产 + new() { TeamName = "下游生产", Site = "WGQ", ProcessorName = "程安阳", ProcessorEmail = "chenganyang@company.com", ProcessorId = 1001 }, + new() { TeamName = "下游生产", Site = "FX", ProcessorName = "方明月", ProcessorEmail = "fangmingyue@company.com", ProcessorId = 1002 }, + new() { TeamName = "下游生产", Site = "WX", ProcessorName = "马军", ProcessorEmail = "majun@company.com", ProcessorId = 1003 }, + + // 生产支持 + new() { TeamName = "生产支持", Site = "WGQ", ProcessorName = "李金猛", ProcessorEmail = "lijinmeng@company.com", ProcessorId = 1004 }, + new() { TeamName = "生产支持", Site = "FX", ProcessorName = "方明月", ProcessorEmail = "fangmingyue@company.com", ProcessorId = 1002 }, + new() { TeamName = "生产支持", Site = "WX", ProcessorName = "马军", ProcessorEmail = "majun@company.com", ProcessorId = 1003 }, + + // 数智化 + new() { TeamName = "数智化", Site = "WGQ", ProcessorName = "李永海", ProcessorEmail = "liyonghai@company.com", ProcessorId = 1005 }, + new() { TeamName = "数智化", Site = "FX", ProcessorName = "李永海", ProcessorEmail = "liyonghai@company.com", ProcessorId = 1005 }, + new() { TeamName = "数智化", Site = "WX", ProcessorName = "李永海", ProcessorEmail = "liyonghai@company.com", ProcessorId = 1005 } + }; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackTeamProcessorOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackTeamProcessorOutput.cs new file mode 100644 index 0000000..8c5adc9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/Dto/FeedbackTeamProcessorOutput.cs @@ -0,0 +1,42 @@ +namespace ZhonTai.Admin.Contracts.Services.Feedback; + +/// +/// 反馈团队负责人输出 +/// +public class FeedbackTeamProcessorOutput +{ + /// + /// 主键ID + /// + public long Id { get; set; } + + /// + /// 团队名称 + /// + public string TeamName { get; set; } + + /// + /// 站点 + /// + public string Site { get; set; } + + /// + /// 处理人ID(模块负责人) + /// + public long ProcessorId { get; set; } + + /// + /// 处理人姓名(模块负责人) + /// + public string ProcessorName { get; set; } + + /// + /// 处理人邮箱 + /// + public string ProcessorEmail { get; set; } + + /// + /// 显示名称(团队-站点-负责人) + /// + public string DisplayName { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/IFeedbackService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/IFeedbackService.cs new file mode 100644 index 0000000..17ea8af --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Feedback/IFeedbackService.cs @@ -0,0 +1,79 @@ +using ZhonTai.Admin.Contracts.Domain.Feedback; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.DynamicApi; + +namespace ZhonTai.Admin.Contracts.Services.Feedback; + +/// +/// 意见反馈服务接口 +/// +public interface IFeedbackService : IDynamicApi +{ + /// + /// 提交意见反馈 + /// + /// 反馈输入 + /// 反馈ID + Task SubmitFeedbackAsync(FeedbackSubmitInput input); + + /// + /// 获取反馈分页列表(用户端) + /// + /// 分页查询输入 + /// 反馈分页数据 + Task> GetPageAsync(PageInput input); + + /// + /// 获取待处理反馈列表(处理人端) + /// + /// 分页查询输入 + /// 反馈分页数据 + Task> GetPendingPageAsync(PageInput input); + + /// + /// 获取反馈详情 + /// + /// 反馈ID + /// 反馈详情 + Task GetAsync(long id); + + /// + /// 标记为处理中 + /// + /// 处理输入 + /// 处理结果 + Task MarkAsProcessingAsync(FeedbackProcessInput input); + + /// + /// 标记为已处理 + /// + /// 处理输入 + /// 处理结果 + Task MarkAsCompletedAsync(FeedbackProcessInput input); + + /// + /// 标记为已驳回 + /// + /// 驳回输入 + /// 驳回结果 + Task MarkAsRejectedAsync(FeedbackProcessInput input); + + /// + /// 获取团队负责人列表(用于下拉选择) + /// + /// 团队负责人列表 + Task> GetTeamProcessorsAsync(); + + /// + /// 添加团队负责人配置 + /// + /// 团队负责人配置输入 + /// 添加结果 + Task AddTeamProcessorAsync(FeedbackTeamProcessorAddInput input); + + /// + /// 初始化预定义的团队负责人配置数据 + /// + /// 初始化结果 + Task InitTeamProcessorSeedDataAsync(); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/File/Dto/FileDeleteInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/File/Dto/FileDeleteInput.cs new file mode 100644 index 0000000..310a0dc --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/File/Dto/FileDeleteInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Dto; + +/// +/// 删除 +/// +public class FileDeleteInput +{ + /// + /// 文件Id + /// + [Required] + [ValidateRequired("请选择文件")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/File/Dto/FileGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/File/Dto/FileGetPageInput.cs new file mode 100644 index 0000000..cc6a03d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/File/Dto/FileGetPageInput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Domain.Dto; + +/// +/// 文件分页请求 +/// +public partial class FileGetPageInput +{ + /// + /// 文件名 + /// + public string FileName { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/File/Dto/FileGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/File/Dto/FileGetPageOutput.cs new file mode 100644 index 0000000..581737e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/File/Dto/FileGetPageOutput.cs @@ -0,0 +1,72 @@ +namespace ZhonTai.Admin.Services.Dto; + +/// +/// 文件分页响应 +/// +public class FileGetPageOutput +{ + /// + /// 文件Id + /// + public long Id { get; set; } + + /// + /// OSS供应商 + /// + public string ProviderName { get; set; } + + /// + /// 存储桶名称 + /// + public string BucketName { get; set; } + + /// + /// 文件目录 + /// + public string FileDirectory { get; set; } + + /// + /// 文件Guid + /// + public Guid FileGuid { get; set; } + + /// + /// 文件名 + /// + public string FileName { get; set; } + + /// + /// 文件扩展名 + /// + public string Extension { get; set; } + + /// + /// 文件大小格式化 + /// + public string SizeFormat { get; set; } + + /// + /// 链接地址 + /// + public string LinkUrl { get; set; } + + /// + /// 创建者 + /// + public string CreatedUserName { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } + + /// + /// 修改者 + /// + public string ModifiedUserName { get; set; } + + /// + /// 修改时间 + /// + public DateTime? ModifiedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/File/IFileService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/File/IFileService.cs new file mode 100644 index 0000000..53a1725 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/File/IFileService.cs @@ -0,0 +1,24 @@ +using Microsoft.AspNetCore.Http; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain; +using ZhonTai.Admin.Domain.Dto; +using ZhonTai.Admin.Services.Dto; + +namespace ZhonTai.Admin.Services; + +/// +/// 文件接口 +/// +public interface IFileService +{ + Task> GetPageAsync(PageInput input); + + Task DeleteAsync(FileDeleteInput input); + + Task UploadFileAsync(IFormFile file, string fileDirectory = "", bool fileReName = true); + + Task> UploadFilesAsync([Required] IFormFileCollection files, string fileDirectory = "", bool fileReName = true); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/LoginLog/Dto/LoginLogAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/LoginLog/Dto/LoginLogAddInput.cs new file mode 100644 index 0000000..b2996aa --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/LoginLog/Dto/LoginLogAddInput.cs @@ -0,0 +1,72 @@ +namespace ZhonTai.Admin.Services.LoginLog.Dto; + +/// +/// 添加 +/// +public class LoginLogAddInput +{ + /// + /// 租户Id + /// + public long? TenantId { get; set; } + + /// + /// 姓名 + /// + public string Name { get; set; } + + /// + /// IP + /// + public string IP { get; set; } + + /// + /// 国家 + /// + public string Country { get; set; } + + /// + /// 省份 + /// + public string Province { get; set; } + + /// + /// 城市 + /// + public string City { get; set; } + + /// + /// 网络服务商 + /// + public string Isp { get; init; } + + /// + /// 耗时(毫秒) + /// + public long ElapsedMilliseconds { get; set; } + + /// + /// 操作状态 + /// + public bool? Status { get; set; } + + /// + /// 操作消息 + /// + public string Msg { get; set; } + + /// + /// 创建者用户Id + /// + public long? CreatedUserId { get; set; } + + /// + /// 创建者用户名 + /// + public string CreatedUserName { get; set; } + + /// + /// 创建者姓名 + /// + public string CreatedUserRealName { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/LoginLog/Dto/LoginLogGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/LoginLog/Dto/LoginLogGetPageInput.cs new file mode 100644 index 0000000..26cf41d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/LoginLog/Dto/LoginLogGetPageInput.cs @@ -0,0 +1,32 @@ +namespace ZhonTai.Admin.Services.LoginLog.Dto; + +/// +/// 分页请求 +/// +public class LoginLogGetPageInput +{ + /// + /// 创建者 + /// + public string CreatedUserName { get; set; } + + /// + /// 操作状态 + /// + public bool? Status { get; set; } + + /// + /// IP + /// + public string IP { get; set; } + + /// + /// 创建开始时间 + /// + public DateTime? AddStartTime { get; set; } + + /// + /// 创建结束时间 + /// + public DateTime? AddEndTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/LoginLog/Dto/LoginLogGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/LoginLog/Dto/LoginLogGetPageOutput.cs new file mode 100644 index 0000000..7e49b5d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/LoginLog/Dto/LoginLogGetPageOutput.cs @@ -0,0 +1,82 @@ +namespace ZhonTai.Admin.Services.LoginLog.Dto; + +/// +/// 分页响应 +/// +public class LoginLogGetPageOutput +{ + /// + /// 编号 + /// + public long Id { get; set; } + + /// + /// 昵称 + /// + public string NickName { get; set; } + + /// + /// 创建者 + /// + public string CreatedUserName { get; set; } + + /// + /// IP + /// + public string IP { get; set; } + + /// + /// 国家 + /// + public string Country { get; set; } + + /// + /// 省份 + /// + public string Province { get; set; } + + /// + /// 城市 + /// + public string City { get; set; } + + /// + /// 网络服务商 + /// + public string Isp { get; init; } + + /// + /// 浏览器 + /// + public string Browser { get; set; } + + /// + /// 操作系统 + /// + public string Os { get; set; } + + /// + /// 设备 + /// + public string Device { get; set; } + + /// + /// 耗时(毫秒) + /// + public long ElapsedMilliseconds { get; set; } + + /// + /// 操作状态 + /// + public bool Status { get; set; } + + /// + /// 操作消息 + /// + public string Msg { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/LoginLog/ILoginLogService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/LoginLog/ILoginLogService.cs new file mode 100644 index 0000000..26fcd60 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/LoginLog/ILoginLogService.cs @@ -0,0 +1,14 @@ +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Services.LoginLog.Dto; + +namespace ZhonTai.Admin.Services.LoginLog; + +/// +/// 登录日志接口 +/// +public interface ILoginLogService +{ + Task> GetPageAsync(PageInput input); + + Task AddAsync(LoginLogAddInput input); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgAddInput.cs new file mode 100644 index 0000000..5c924b3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgAddInput.cs @@ -0,0 +1,39 @@ +using ZhonTai.Admin.Domain.Msg; + +namespace ZhonTai.Admin.Services.Msg.Dto; + +/// +/// 添加 +/// +public class MsgAddInput +{ + /// + /// 标题 + /// + public string Title { get; set; } + + /// + /// 内容 + /// + public string Content { get; set; } + + /// + /// 类型Id + /// + public long TypeId { get; set; } + + /// + /// 类型名称 + /// + public string TypeName { get; set; } + + /// + /// 定时发布时间 + /// + public DateTime? PublishTime { get; set; } + + /// + /// 消息状态 + /// + public MsgStatusEnum Status { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgAddMsgUserListInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgAddMsgUserListInput.cs new file mode 100644 index 0000000..543dfbe --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgAddMsgUserListInput.cs @@ -0,0 +1,20 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Msg.Dto; + +/// +/// 添加消息用户列表 +/// +public class MsgAddMsgUserListInput +{ + /// + /// 消息 + /// + [Required(ErrorMessage = "请选择消息")] + public long MsgId { get; set; } + + /// + /// 用户 + /// + public long[] UserIds { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetMsgUserListInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetMsgUserListInput.cs new file mode 100644 index 0000000..6a1e822 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetMsgUserListInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.Msg.Dto; + +/// +/// 消息用户列表 +/// +public partial class MsgGetMsgUserListInput +{ + /// + /// 消息Id + /// + public long MsgId { get; set; } + + /// + /// 姓名 + /// + public string Name { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetMsgUserListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetMsgUserListOutput.cs new file mode 100644 index 0000000..422327b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetMsgUserListOutput.cs @@ -0,0 +1,37 @@ +namespace ZhonTai.Admin.Services.Msg.Dto; + +/// +/// 消息用户列表 +/// +public class MsgGetMsgUserListOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 姓名 + /// + public string Name { get; set; } + + /// + /// 手机号 + /// + public string Mobile { get; set; } + + /// + /// 邮箱 + /// + public string Email { get; set; } + + /// + /// 是否已读 + /// + public bool IsRead { get; set; } + + /// + /// 已读时间 + /// + public DateTime? ReadTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetOutput.cs new file mode 100644 index 0000000..bb05abd --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetOutput.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.Admin.Services.Msg.Dto; + +/// +/// 消息 +/// +public class MsgGetOutput : MsgUpdateInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetPageInput.cs new file mode 100644 index 0000000..100d8df --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetPageInput.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Services.Msg.Dto; + +/// +/// 消息分页请求 +/// +public partial class MsgGetPageInput +{ + /// + /// 标题 + /// + public string Title { get; set; } + + /// + /// 消息类型 + /// + public long? MsgTypeValue { get; set; } + + /// + /// 来源 1. 工作台 2. 后台管理 + /// + public int? Source { get; set; } = 2; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetPageOutput.cs new file mode 100644 index 0000000..77199f1 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgGetPageOutput.cs @@ -0,0 +1,39 @@ +using ZhonTai.Admin.Domain.Msg; + +namespace ZhonTai.Admin.Services.Msg.Dto; + +/// +/// 消息分页响应 +/// +public class MsgGetPageOutput +{ + /// + /// 消息Id + /// + public long Id { get; set; } + + /// + /// 标题 + /// + public string Title { get; set; } + + /// + /// 类型Id + /// + public long TypeId { get; set; } + + /// + /// 类型名称 + /// + public string TypeName { get; set; } + + /// + /// 消息状态 + /// + public MsgStatusEnum Status { get; set; } + + /// + /// 创建时间 + /// + public virtual DateTime? CreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgUpdateInput.cs new file mode 100644 index 0000000..a90ee78 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Msg/Dto/MsgUpdateInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Msg.Dto; + +/// +/// 修改 +/// +public partial class MsgUpdateInput : MsgAddInput +{ + /// + /// 消息Id + /// + [Required] + [ValidateRequired("请选择消息")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeAddInput.cs new file mode 100644 index 0000000..00bf3e7 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeAddInput.cs @@ -0,0 +1,37 @@ +namespace ZhonTai.Admin.Services.MsgType.Dto; + +/// +/// 添加 +/// +public class MsgTypeAddInput +{ + /// + /// 父级Id + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeGetListInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeGetListInput.cs new file mode 100644 index 0000000..4b91100 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeGetListInput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.MsgType.Dto; + +/// +/// 查询列表请求 +/// +public partial class MsgTypeGetListInput +{ + /// + /// 名称 + /// + public string Name { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeGetListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeGetListOutput.cs new file mode 100644 index 0000000..8e4746b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeGetListOutput.cs @@ -0,0 +1,42 @@ +namespace ZhonTai.Admin.Services.MsgType.Dto; + +/// +/// 查询列表响应 +/// +public class MsgTypeGetListOutput +{ + /// + /// 主键 + /// + public long Id { get; set; } + + /// + /// 父级Id + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 描述 + /// + public string Description { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeGetOutput.cs new file mode 100644 index 0000000..04da9ff --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeGetOutput.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.Admin.Services.MsgType.Dto; + +/// +/// 消息类型 +/// +public class MsgTypeGetOutput : MsgTypeUpdateInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeUpdateInput.cs new file mode 100644 index 0000000..6d94a71 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/MsgType/Dto/MsgTypeUpdateInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.MsgType.Dto; + +/// +/// 修改 +/// +public partial class MsgTypeUpdateInput : MsgTypeAddInput +{ + /// + /// 消息分类Id + /// + [Required] + [ValidateRequired("请选择消息分类")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppAddInput.cs new file mode 100644 index 0000000..4ea0a5d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppAddInput.cs @@ -0,0 +1,61 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.OnlineApp.Dto; + +/// +/// 添加在线应用 +/// +public class OnlineAppAddInput +{ + /// + /// 网站名称 + /// + [Required(ErrorMessage = "请输入网站名称")] + public string WebsiteName { get; set; } + + /// + /// 一级标题 + /// + [Required(ErrorMessage = "请输入一级标题")] + public string PrimaryTitle { get; set; } + + /// + /// 二级标题 + /// + public string SecondaryTitle { get; set; } + + /// + /// 联系人 + /// + [Required(ErrorMessage = "请输入联系人")] + public string ContactPerson { get; set; } + + /// + /// 系统操作教程链接 + /// + public string TutorialUrl { get; set; } + + /// + /// 适用site + /// + [Required(ErrorMessage = "请输入适用site")] + public string ApplicableSite { get; set; } + + /// + /// 功能简介 + /// + [Required(ErrorMessage = "请输入功能简介")] + public string FunctionIntro { get; set; } + + /// + /// 关键词 + /// + public string Keywords { get; set; } + + /// + /// 网址 + /// + [Required(ErrorMessage = "请输入网址")] + [Url(ErrorMessage = "请输入正确的网址格式")] + public string WebsiteUrl { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppGetOutput.cs new file mode 100644 index 0000000..1481e55 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppGetOutput.cs @@ -0,0 +1,67 @@ + namespace ZhonTai.Admin.Domain.OnlineApp; + +/// +/// 在线应用查询输出 +/// +public partial class OnlineAppGetOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 网站名称 + /// + public string WebsiteName { get; set; } + + /// + /// 一级标题 + /// + public string PrimaryTitle { get; set; } + + /// + /// 二级标题 + /// + public string SecondaryTitle { get; set; } + + /// + /// 联系人 + /// + public string ContactPerson { get; set; } + + /// + /// 系统操作教程链接 + /// + public string TutorialUrl { get; set; } + + /// + /// 适用site + /// + public string ApplicableSite { get; set; } + + /// + /// 功能简介 + /// + public string FunctionIntro { get; set; } + + /// + /// 关键词 + /// + public string Keywords { get; set; } + + /// + /// 网址 + /// + public string WebsiteUrl { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreatedTime { get; set; } + + /// + /// 修改时间 + /// + public DateTime? ModifiedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppGetPageInput.cs new file mode 100644 index 0000000..0f9d69d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppGetPageInput.cs @@ -0,0 +1,47 @@ +namespace ZhonTai.Admin.Services.OnlineApp.Dto; + +/// +/// 在线应用分页查询输入 +/// +public class OnlineAppGetPageInput +{ + /// + /// 网站名称 + /// + public string WebsiteName { get; set; } + + /// + /// 一级标题 + /// + public string PrimaryTitle { get; set; } + + /// + /// 二级标题 + /// + public string SecondaryTitle { get; set; } + + /// + /// 联系人 + /// + public string ContactPerson { get; set; } + + /// + /// 适用site + /// + public string ApplicableSite { get; set; } + + /// + /// 关键词 + /// + public string Keywords { get; set; } + + /// + /// 创建开始时间 + /// + public DateTime? StartCreatedTime { get; set; } + + /// + /// 创建结束时间 + /// + public DateTime? EndCreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppGetPageOutput.cs new file mode 100644 index 0000000..84006d5 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppGetPageOutput.cs @@ -0,0 +1,62 @@ +namespace ZhonTai.Admin.Services.OnlineApp.Dto; + +/// +/// 在线应用分页查询输出 +/// +public class OnlineAppGetPageOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 网站名称 + /// + public string WebsiteName { get; set; } + + /// + /// 一级标题 + /// + public string PrimaryTitle { get; set; } + + /// + /// 二级标题 + /// + public string SecondaryTitle { get; set; } + + /// + /// 联系人 + /// + public string ContactPerson { get; set; } + + /// + /// 系统操作教程链接 + /// + public string TutorialUrl { get; set; } + + /// + /// 适用site + /// + public string ApplicableSite { get; set; } + + /// + /// 功能简介 + /// + public string FunctionIntro { get; set; } + + /// + /// 关键词 + /// + public string Keywords { get; set; } + + /// + /// 网址 + /// + public string WebsiteUrl { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppUpdateInput.cs new file mode 100644 index 0000000..4478f59 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/Dto/OnlineAppUpdateInput.cs @@ -0,0 +1,15 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.OnlineApp.Dto; + +/// +/// 修改在线应用 +/// +public class OnlineAppUpdateInput : OnlineAppAddInput +{ + /// + /// 主键Id + /// + [Required(ErrorMessage = "请选择要修改的在线应用")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/IOnlineAppService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/IOnlineAppService.cs new file mode 100644 index 0000000..460617d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OnlineApp/IOnlineAppService.cs @@ -0,0 +1,46 @@ +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.OnlineApp; +using ZhonTai.Admin.Services.OnlineApp.Dto; + +namespace ZhonTai.Admin.Services.OnlineApp; + +/// +/// 在线应用服务接口 +/// +public interface IOnlineAppService +{ + /// + /// 获取在线应用 + /// + /// 主键Id + /// + Task GetAsync(long id); + + /// + /// 查询在线应用分页 + /// + /// 查询参数 + /// + Task> GetPageAsync(PageInput input); + + /// + /// 新增在线应用 + /// + /// 新增参数 + /// + Task AddAsync(OnlineAppAddInput input); + + /// + /// 修改在线应用 + /// + /// 修改参数 + /// + Task UpdateAsync(OnlineAppUpdateInput input); + + /// + /// 删除在线应用 + /// + /// 主键Id + /// + Task DeleteAsync(long id); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/OperationLog/Dto/OperationLogAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OperationLog/Dto/OperationLogAddInput.cs new file mode 100644 index 0000000..ef2052d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OperationLog/Dto/OperationLogAddInput.cs @@ -0,0 +1,102 @@ +namespace ZhonTai.Admin.Services.OperationLog.Dto; + +/// +/// 添加 +/// +public class OperationLogAddInput +{ + /// + /// 姓名 + /// + public string Name { get; set; } + + /// + /// 接口名称 + /// + public string ApiLabel { get; set; } + + /// + /// 接口地址 + /// + public string ApiPath { get; set; } + + /// + /// 接口提交方法 + /// + public string ApiMethod { get; set; } + + /// + /// IP + /// + public string IP { get; set; } + + /// + /// 国家 + /// + public string Country { get; set; } + + /// + /// 省份 + /// + public string Province { get; set; } + + /// + /// 城市 + /// + public string City { get; set; } + + /// + /// 网络服务商 + /// + public string Isp { get; init; } + + /// + /// 浏览器 + /// + public string Browser { get; set; } + + /// + /// 操作系统 + /// + public string Os { get; set; } + + /// + /// 设备 + /// + public string Device { get; set; } + + /// + /// 浏览器信息 + /// + public string BrowserInfo { get; set; } + + /// + /// 耗时(毫秒) + /// + public long ElapsedMilliseconds { get; set; } + + /// + /// 操作状态 + /// + public bool? Status { get; set; } + + /// + /// 操作消息 + /// + public string Msg { get; set; } + + /// + /// 操作参数 + /// + public string Params { get; set; } + + /// + /// 状态码 + /// + public int? StatusCode { get; set; } + + /// + /// 操作结果 + /// + public string Result { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/OperationLog/Dto/OperationLogGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OperationLog/Dto/OperationLogGetPageInput.cs new file mode 100644 index 0000000..466eb3e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OperationLog/Dto/OperationLogGetPageInput.cs @@ -0,0 +1,37 @@ +namespace ZhonTai.Admin.Services.OperationLog.Dto; + +/// +/// 查询分页请求 +/// +public class OperationLogGetPageInput +{ + /// + /// 创建者 + /// + public string CreatedUserName { get; set; } + + /// + /// 操作状态 + /// + public bool? Status { get; set; } + + /// + /// 操作接口 + /// + public string Api { get; set; } + + /// + /// IP + /// + public string IP { get; set; } + + /// + /// 创建开始时间 + /// + public DateTime? AddStartTime { get; set; } + + /// + /// 创建结束时间 + /// + public DateTime? AddEndTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/OperationLog/Dto/OperationLogGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OperationLog/Dto/OperationLogGetPageOutput.cs new file mode 100644 index 0000000..9ca7e75 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OperationLog/Dto/OperationLogGetPageOutput.cs @@ -0,0 +1,118 @@ +namespace ZhonTai.Admin.Services.OperationLog.Dto; + +/// +/// 查询分页响应 +/// +public class OperationLogGetPageOutput +{ + /// + /// 编号 + /// + public long Id { get; set; } + + /// + /// 昵称 + /// + public string NickName { get; set; } + + /// + /// 接口名称 + /// + public string ApiLabel { get; set; } + + /// + /// 接口地址 + /// + public string ApiPath { get; set; } + + /// + /// 接口提交方法 + /// + public string ApiMethod { get; set; } + + /// + /// IP + /// + public string IP { get; set; } + + /// + /// 国家 + /// + public string Country { get; set; } + + /// + /// 省份 + /// + public string Province { get; set; } + + /// + /// 城市 + /// + public string City { get; set; } + + /// + /// 网络服务商 + /// + public string Isp { get; init; } + + /// + /// 浏览器 + /// + public string Browser { get; set; } + + /// + /// 操作系统 + /// + public string Os { get; set; } + + /// + /// 设备 + /// + public string Device { get; set; } + + /// + /// 耗时(毫秒) + /// + public long ElapsedMilliseconds { get; set; } + + /// + /// 操作状态 + /// + public bool Status { get; set; } + + /// + /// 状态码 + /// + public int? StatusCode { get; set; } + + /// + /// 操作消息 + /// + public string Msg { get; set; } + + /// + /// 请求参数 + /// + public string Params { get; set; } + + /// + /// 响应结果 + /// + public string Result { get; set; } + + + /// + /// 创建者 + /// + public string CreatedUserName { get; set; } + + /// + /// 创建者姓名 + /// + public string CreatedUserRealName { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/OperationLog/IOperationLogService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OperationLog/IOperationLogService.cs new file mode 100644 index 0000000..749b73b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/OperationLog/IOperationLogService.cs @@ -0,0 +1,14 @@ +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Services.OperationLog.Dto; + +namespace ZhonTai.Admin.Services.OperationLog; + +/// +/// 操作日志接口 +/// +public interface IOperationLogService +{ + Task> GetPageAsync(PageInput input); + + Task AddAsync(OperationLogAddInput input); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/IOrgService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/IOrgService.cs new file mode 100644 index 0000000..79bc380 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/IOrgService.cs @@ -0,0 +1,22 @@ +using ZhonTai.Admin.Services.Org.Input; +using ZhonTai.Admin.Services.Org.Output; + +namespace ZhonTai.Admin.Services.Org; + +/// +/// 部门接口 +/// +public partial interface IOrgService +{ + Task GetAsync(long id); + + Task> GetListAsync(string key); + + Task AddAsync(OrgAddInput input); + + Task UpdateAsync(OrgUpdateInput input); + + Task DeleteAsync(long id); + + Task SoftDeleteAsync(long id); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Input/OrgAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Input/OrgAddInput.cs new file mode 100644 index 0000000..e6252f6 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Input/OrgAddInput.cs @@ -0,0 +1,42 @@ +namespace ZhonTai.Admin.Services.Org.Input; + +/// +/// 添加 +/// +public class OrgAddInput +{ + /// + /// 父级 + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 值 + /// + public string Value { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 描述 + /// + public string Description { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Input/OrgUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Input/OrgUpdateInput.cs new file mode 100644 index 0000000..88c6f9a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Input/OrgUpdateInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Org.Input; + +/// +/// 修改 +/// +public class OrgUpdateInput : OrgAddInput +{ + /// + /// 主键Id + /// + [Required] + [ValidateRequired("请选择部门")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Output/OrgGetListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Output/OrgGetListOutput.cs new file mode 100644 index 0000000..db823e9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Output/OrgGetListOutput.cs @@ -0,0 +1,52 @@ +namespace ZhonTai.Admin.Services.Org.Output; + +/// +/// 部门列表 +/// +public class OrgGetListOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 父级 + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 值 + /// + public string Value { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 描述 + /// + public string Description { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Output/OrgGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Output/OrgGetOutput.cs new file mode 100644 index 0000000..1efbd0c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Output/OrgGetOutput.cs @@ -0,0 +1,10 @@ +using ZhonTai.Admin.Services.Org.Input; + +namespace ZhonTai.Admin.Services.Org.Output; + +/// +/// 部门 +/// +public class OrgGetOutput : OrgUpdateInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Output/OrgGetSimpleListWithPathOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Output/OrgGetSimpleListWithPathOutput.cs new file mode 100644 index 0000000..ed54988 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Org/Output/OrgGetSimpleListWithPathOutput.cs @@ -0,0 +1,18 @@ +namespace ZhonTai.Admin.Services.Org.Output; + +/// +/// 部门路径列表 +/// +public class OrgGetSimpleListWithPathOutput +{ + /// + /// 部门Id + /// + public long Id { get; set; } + + /// + /// 部门路径 + /// + public string Path { get; set; } + +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionAddDotInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionAddDotInput.cs new file mode 100644 index 0000000..eb75be0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionAddDotInput.cs @@ -0,0 +1,52 @@ +namespace ZhonTai.Admin.Services.Permission.Dto; + +/// +/// 添加权限点 +/// +public class PermissionAddDotInput +{ + /// + /// 平台 + /// + public string Platform { get; set; } + + /// + /// 父级节点 + /// + public long ParentId { get; set; } + + /// + /// 关联接口 + /// + public List ApiIds { get; set; } + + /// + /// 权限名称 + /// + public string Label { get; set; } + + /// + /// 权限编码 + /// + public string Code { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } + + /// + /// 图标 + /// + public string Icon { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionAddGroupInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionAddGroupInput.cs new file mode 100644 index 0000000..ecd01b0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionAddGroupInput.cs @@ -0,0 +1,72 @@ +namespace ZhonTai.Admin.Services.Permission.Dto; + +/// +/// 条件分组 +/// +public class PermissionAddGroupInput +{ + /// + /// 平台 + /// + public string Platform { get; set; } + + /// + /// 父级节点 + /// + public long ParentId { get; set; } + + /// + /// 视图 + /// + public long? ViewId { get; set; } + + /// + /// 路由命名 + /// + public string Name { get; set; } + + /// + /// 访问路由地址 + /// + public string Path { get; set; } + + /// + /// 重定向地址 + /// + public string Redirect { get; set; } + + /// + /// 权限名称 + /// + public string Label { get; set; } + + ///// + ///// 说明 + ///// + //public string Description { get; set; } + + /// + /// 隐藏 + /// + public bool Hidden { get; set; } = false; + + /// + /// 图标 + /// + public string Icon { get; set; } + + /// + /// 展开 + /// + public bool Opened { get; set; } = true; + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionAddMenuInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionAddMenuInput.cs new file mode 100644 index 0000000..eb9fb74 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionAddMenuInput.cs @@ -0,0 +1,97 @@ +namespace ZhonTai.Admin.Services.Permission.Dto; + +/// +/// 添加菜单 +/// +public class PermissionAddMenuInput +{ + /// + /// 平台 + /// + public string Platform { get; set; } + + /// + /// 父级节点 + /// + public long ParentId { get; set; } + + /// + /// 视图 + /// + public long? ViewId { get; set; } + + /// + /// 路由命名 + /// + public string Name { get; set; } + + /// + /// 路由地址 + /// + public string Path { get; set; } + + /// + /// 权限名称 + /// + public string Label { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } + + /// + /// 隐藏 + /// + public bool Hidden { get; set; } = false; + + /// + /// 图标 + /// + public string Icon { get; set; } + + /// + /// 打开新窗口 + /// + public bool NewWindow { get; set; } = false; + + /// + /// 链接外显 + /// + public bool External { get; set; } = false; + + /// + /// 是否缓存 + /// + public bool IsKeepAlive { get; set; } = true; + + /// + /// 是否固定 + /// + public bool IsAffix { get; set; } = false; + + /// + /// 链接地址 + /// + public string Link { get; set; } + + /// + /// 是否内嵌窗口 + /// + public bool IsIframe { get; set; } = false; + + /// + /// 是否系统权限 + /// + public bool IsSystem { get; set; } = false; + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionAssignInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionAssignInput.cs new file mode 100644 index 0000000..b9787c4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionAssignInput.cs @@ -0,0 +1,21 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Consts; + +namespace ZhonTai.Admin.Services.Permission.Dto; + +/// +/// 权限分配 +/// +public class PermissionAssignInput +{ + /// + /// 平台 + /// + public string Platform { get; set; } = AdminConsts.WebName; + + [Required(ErrorMessage = "角色不能为空")] + public long RoleId { get; set; } + + [Required(ErrorMessage = "权限不能为空")] + public List PermissionIds { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetDotOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetDotOutput.cs new file mode 100644 index 0000000..7425565 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetDotOutput.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.Admin.Services.Permission.Dto; + +/// +/// 权限点 +/// +public class PermissionGetDotOutput : PermissionUpdateDotInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetGroupOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetGroupOutput.cs new file mode 100644 index 0000000..8c87e75 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetGroupOutput.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.Admin.Services.Permission.Dto; + +/// +/// 权限分组 +/// +public class PermissionGetGroupOutput : PermissionUpdateGroupInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetListInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetListInput.cs new file mode 100644 index 0000000..0cf1ae4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetListInput.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Services.Permission.Dto; + +/// +/// 查询列表 +/// +public class PermissionGetListInput +{ + /// + /// 平台 + /// + public string Platform { get; set; } + + /// + /// 路由地址 + /// + public string Path { get; set; } + + /// + /// 权限名称 + /// + public string Label { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetListOutput.cs new file mode 100644 index 0000000..64fa08c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetListOutput.cs @@ -0,0 +1,84 @@ +using ZhonTai.Admin.Domain.Permission; + +namespace ZhonTai.Admin.Services.Permission.Dto; + +/// +/// 权限列表 +/// +public class PermissionGetListOutput +{ + /// + /// 权限Id + /// + public long Id { get; set; } + + /// + /// 平台 + /// + public string Platform { get; set; } + + /// + /// 父级节点 + /// + public long ParentId { get; set; } + + /// + /// 权限名称 + /// + public string Label { get; set; } + + /// + /// 权限类型 + /// + public PermissionType Type { get; set; } + + /// + ///路由地址 + /// + public string Path { get; set; } + + /// + /// 重定向地址 + /// + public string Redirect { get; set; } + + /// + /// 视图地址 + /// + public string ViewPath { get; set; } + + /// + /// 链接地址 + /// + public string Link { get; set; } + + /// + /// 接口路径 + /// + public string ApiPaths { get; set; } + + /// + /// 图标 + /// + public string Icon { get; set; } + + /// + /// 展开 + /// + public bool Opened { get; set; } + + /// + /// 排序 + /// + public int? Sort { get; set; } + + /// + /// 描述 + /// + public string Description { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetMenuOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetMenuOutput.cs new file mode 100644 index 0000000..71418ef --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetMenuOutput.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.Admin.Services.Permission.Dto; + +/// +/// 权限菜单 +/// +public class PermissionGetMenuOutput : PermissionUpdateMenuInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetPermissionListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetPermissionListOutput.cs new file mode 100644 index 0000000..1f08204 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionGetPermissionListOutput.cs @@ -0,0 +1,32 @@ +namespace ZhonTai.Admin.Services.Permission.Dto; + +/// +/// 权限列表 +/// +public class PermissionGetPermissionListOutput +{ + /// + /// 权限Id + /// + public long Id { get; set; } + + /// + /// 父级节点 + /// + public long ParentId { get; set; } + + /// + /// 权限名称 + /// + public string Label { get; set; } + + /// + /// 行显示 + /// + public bool Row { get; set; } + + /// + /// 权限列表 + /// + public List Children { get; set; } = new List(); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionSaveTenantPermissionsInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionSaveTenantPermissionsInput.cs new file mode 100644 index 0000000..93e7248 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionSaveTenantPermissionsInput.cs @@ -0,0 +1,15 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Permission.Dto; + +/// +/// 保存租户权限 +/// +public class PermissionSaveTenantPermissionsInput +{ + [Required(ErrorMessage = "租户不能为空")] + public long TenantId { get; set; } + + [Required(ErrorMessage = "权限不能为空")] + public List PermissionIds { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionUpdateDotInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionUpdateDotInput.cs new file mode 100644 index 0000000..78f2131 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionUpdateDotInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Permission.Dto; + +/// +/// 修改权限点 +/// +public class PermissionUpdateDotInput : PermissionAddDotInput +{ + /// + /// 权限Id + /// + [Required] + [ValidateRequired("请选择权限点")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionUpdateGroupInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionUpdateGroupInput.cs new file mode 100644 index 0000000..e3924a8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionUpdateGroupInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Permission.Dto; + +/// +/// 修改权限分组 +/// +public class PermissionUpdateGroupInput : PermissionAddGroupInput +{ + /// + /// 权限Id + /// + [Required] + [ValidateRequired("请选择权限分组")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionUpdateMenuInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionUpdateMenuInput.cs new file mode 100644 index 0000000..ac729e1 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/Dto/PermissionUpdateMenuInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Permission.Dto; + +/// +/// 修改权限菜单 +/// +public class PermissionUpdateMenuInput : PermissionAddMenuInput +{ + /// + /// 权限Id + /// + [Required] + [ValidateRequired("请选择菜单")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/IPermissionService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/IPermissionService.cs new file mode 100644 index 0000000..a0bf5e8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Permission/IPermissionService.cs @@ -0,0 +1,39 @@ +using ZhonTai.Admin.Services.Permission.Dto; + +namespace ZhonTai.Admin.Services.Permission; + +/// +/// 权限接口 +/// +public partial interface IPermissionService +{ + Task GetGroupAsync(long id); + + Task GetMenuAsync(long id); + + Task GetDotAsync(long id); + + Task> GetPermissionListAsync(string platform); + + Task> GetRolePermissionListAsync(long roleId); + + Task> GetListAsync(PermissionGetListInput input); + + Task AddGroupAsync(PermissionAddGroupInput input); + + Task AddMenuAsync(PermissionAddMenuInput input); + + Task AddDotAsync(PermissionAddDotInput input); + + Task UpdateGroupAsync(PermissionUpdateGroupInput input); + + Task UpdateMenuAsync(PermissionUpdateMenuInput input); + + Task UpdateDotAsync(PermissionUpdateDotInput input); + + Task DeleteAsync(long id); + + Task SoftDeleteAsync(long id); + + Task AssignAsync(PermissionAssignInput input); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgAddInput.cs new file mode 100644 index 0000000..3ef70ba --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgAddInput.cs @@ -0,0 +1,37 @@ +namespace ZhonTai.Admin.Services.Pkg.Dto; + +/// +/// 添加 +/// +public class PkgAddInput +{ + /// + /// 父级Id + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgAddPkgTenantListInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgAddPkgTenantListInput.cs new file mode 100644 index 0000000..17b3601 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgAddPkgTenantListInput.cs @@ -0,0 +1,20 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Pkg.Dto; + +/// +/// 添加套餐租户列表 +/// +public class PkgAddPkgTenantListInput +{ + /// + /// 套餐 + /// + [Required(ErrorMessage = "请选择套餐")] + public long PkgId { get; set; } + + /// + /// 租户列表 + /// + public long[] TenantIds { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetListInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetListInput.cs new file mode 100644 index 0000000..f1a28d0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetListInput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.Pkg.Dto; + +/// +/// 套餐列表请求 +/// +public partial class PkgGetListInput +{ + /// + /// 名称 + /// + public string Name { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetListOutput.cs new file mode 100644 index 0000000..6ebf25b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetListOutput.cs @@ -0,0 +1,47 @@ +namespace ZhonTai.Admin.Services.Pkg.Dto; + +/// +/// 套餐列表响应 +/// +public class PkgGetListOutput +{ + /// + /// 主键 + /// + public long Id { get; set; } + + /// + /// 父级Id + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 描述 + /// + public string Description { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetOutput.cs new file mode 100644 index 0000000..761f460 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetOutput.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.Admin.Services.Pkg.Dto; + +/// +/// 套餐 +/// +public class PkgGetOutput : PkgUpdateInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetPageInput.cs new file mode 100644 index 0000000..0f7c0a8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetPageInput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.Pkg.Dto; + +/// +/// 套餐分页请求 +/// +public partial class PkgGetPageInput +{ + /// + /// 名称 + /// + public string Name { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetPageOutput.cs new file mode 100644 index 0000000..c799fa3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetPageOutput.cs @@ -0,0 +1,42 @@ +namespace ZhonTai.Admin.Services.Pkg.Dto; + +/// +/// 套餐分页响应 +/// +public class PkgGetPageOutput +{ + /// + /// 主键 + /// + public long Id { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetPkgTenantListInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetPkgTenantListInput.cs new file mode 100644 index 0000000..94d964d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetPkgTenantListInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.Pkg.Dto; + +/// +/// 套餐租户列表请求 +/// +public partial class PkgGetPkgTenantListInput +{ + /// + /// 租户名 + /// + public string TenantName { get; set; } + + /// + /// 套餐Id + /// + public long? PkgId { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetPkgTenantListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetPkgTenantListOutput.cs new file mode 100644 index 0000000..ce57046 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgGetPkgTenantListOutput.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Services.Pkg.Dto; + +/// +/// 套餐租户列表响应 +/// +public class PkgGetPkgTenantListOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 租户名 + /// + public string Name { get; set; } + + /// + /// 租户编码 + /// + public string Code { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgSetPkgPermissionsInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgSetPkgPermissionsInput.cs new file mode 100644 index 0000000..952c9dd --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgSetPkgPermissionsInput.cs @@ -0,0 +1,21 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Consts; + +namespace ZhonTai.Admin.Services.Pkg.Dto; + +/// +/// 设置套餐权限 +/// +public class PkgSetPkgPermissionsInput +{ + /// + /// 平台 + /// + public string Platform { get; set; } = AdminConsts.WebName; + + [Required(ErrorMessage = "套餐不能为空")] + public long PkgId { get; set; } + + [Required(ErrorMessage = "权限不能为空")] + public List PermissionIds { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgUpdateInput.cs new file mode 100644 index 0000000..8e9411e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Pkg/Dto/PkgUpdateInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Pkg.Dto; + +/// +/// 修改 +/// +public partial class PkgUpdateInput : PkgAddInput +{ + /// + /// 套餐Id + /// + [Required] + [ValidateRequired("请选择套餐")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateAddInput.cs new file mode 100644 index 0000000..3b6fbde --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateAddInput.cs @@ -0,0 +1,32 @@ +namespace ZhonTai.Admin.Services.PrintTemplate.Inputs; + +/// +/// 添加 +/// +public class PrintTemplateAddInput +{ + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 排序 + /// + public int Sort { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateGetPageInput.cs new file mode 100644 index 0000000..23072a3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateGetPageInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.PrintTemplate.Inputs; + +/// +/// 分页请求 +/// +public partial class PrintTemplateGetPageInput +{ + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateSetEnableInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateSetEnableInput.cs new file mode 100644 index 0000000..21129d0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateSetEnableInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.PrintTemplate.Inputs; + +/// +/// 设置启用 +/// +public class PrintTemplateSetEnableInput +{ + /// + /// 打印模板Id + /// + public long PrintTemplateId { get; set; } + + /// + /// 是否启用 + /// + public bool Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateUpdateInput.cs new file mode 100644 index 0000000..4ec3ac9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateUpdateInput.cs @@ -0,0 +1,22 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.PrintTemplate.Inputs; + +/// +/// 修改 +/// +public partial class PrintTemplateUpdateInput : PrintTemplateAddInput +{ + /// + /// 打印模板Id + /// + [Required] + [ValidateRequired("请选择打印模板")] + public long Id { get; set; } + + /// + /// 版本 + /// + public long Version { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateUpdateTemplateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateUpdateTemplateInput.cs new file mode 100644 index 0000000..b70060b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Inputs/PrintTemplateUpdateTemplateInput.cs @@ -0,0 +1,32 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.PrintTemplate.Inputs; + +/// +/// 修改模板 +/// +public class PrintTemplateUpdateTemplateInput +{ + /// + /// 打印模板Id + /// + [Required] + [ValidateRequired("请选择打印模板")] + public long Id { get; set; } + + /// + /// 模板 + /// + public string Template { get; set; } + + /// + /// 打印数据 + /// + public string PrintData { get; set; } + + /// + /// 版本 + /// + public long Version { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Ouputs/PrintTemplateGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Ouputs/PrintTemplateGetOutput.cs new file mode 100644 index 0000000..fb587cf --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Ouputs/PrintTemplateGetOutput.cs @@ -0,0 +1,10 @@ +using ZhonTai.Admin.Services.PrintTemplate.Inputs; + +namespace ZhonTai.Admin.Services.PrintTemplate.Outputs; + +/// +/// 表单响应 +/// +public class PrintTemplateGetOutput : PrintTemplateUpdateInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Ouputs/PrintTemplateGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Ouputs/PrintTemplateGetPageOutput.cs new file mode 100644 index 0000000..2691fd7 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Ouputs/PrintTemplateGetPageOutput.cs @@ -0,0 +1,42 @@ +namespace ZhonTai.Admin.Services.PrintTemplate.Outputs; + +/// +/// 分页响应 +/// +public class PrintTemplateGetPageOutput +{ + /// + /// 打印模板Id + /// + public long Id { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 版本 + /// + public long Version { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Ouputs/PrintTemplateGetUpdateTemplateOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Ouputs/PrintTemplateGetUpdateTemplateOutput.cs new file mode 100644 index 0000000..935b82b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/PrintTemplate/Ouputs/PrintTemplateGetUpdateTemplateOutput.cs @@ -0,0 +1,10 @@ +using ZhonTai.Admin.Services.PrintTemplate.Inputs; + +namespace ZhonTai.Admin.Services.PrintTemplate.Outputs; + +/// +/// 修改模板响应 +/// +public class PrintTemplateGetUpdateTemplateOutput : PrintTemplateUpdateTemplateInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionAddInput.cs new file mode 100644 index 0000000..1818ba5 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionAddInput.cs @@ -0,0 +1,74 @@ +using ZhonTai.Admin.Domain.Region; + +namespace ZhonTai.Admin.Services.Region; + +/// +/// 添加 +/// +public class RegionAddInput +{ + /// + /// 上级Id + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 简称 + /// + public string ShortName { get; set; } + + /// + /// 级别 + /// + public RegionLevel Level { get; set; } + + /// + /// 代码 + /// + public string Code { get; set; } + + /// + /// 驻地 + /// + public string Capital { get; set; } + + /// + /// 人口(万人) + /// + public int? Population { get; set; } + + /// + /// 面积(平方千米) + /// + public int? Area { get; set; } + + /// + /// 区号 + /// + public string AreaCode { get; set; } + + /// + /// 邮编 + /// + public string ZipCode { get; set; } + + /// + /// 排序 + /// + public int? Sort { get; set; } + + /// + /// 热门 + /// + public bool Hot { get; set; } = false; + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionGetListInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionGetListInput.cs new file mode 100644 index 0000000..9e4d5d9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionGetListInput.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Services.Region; + +/// +/// 地区列表请求 +/// +public class RegionGetListInput +{ + /// + /// 上级Id + /// + public long ParentId { get; set; } + + /// + /// 热门 + /// + public bool? Hot { get; set; } + + /// + /// 启用 + /// + public bool? Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionGetPageInput.cs new file mode 100644 index 0000000..55f0dea --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionGetPageInput.cs @@ -0,0 +1,34 @@ +using ZhonTai.Admin.Domain.Region; + +namespace ZhonTai.Admin.Services.Region; + +/// +/// 地区分页请求 +/// +public class RegionGetPageInput +{ + /// + /// 上级Id + /// + public long? ParentId { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 级别 + /// + public RegionLevel? Level { get; set; } + + /// + /// 热门 + /// + public bool? Hot { get; set; } + + /// + /// 启用 + /// + public bool? Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionSetEnableInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionSetEnableInput.cs new file mode 100644 index 0000000..79ceb78 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionSetEnableInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.Region; + +/// +/// 设置启用 +/// +public class RegionSetEnableInput +{ + /// + /// 地区Id + /// + public long RegionId { get; set; } + + /// + /// 是否启用 + /// + public bool Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionSetHotInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionSetHotInput.cs new file mode 100644 index 0000000..75da10c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionSetHotInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.Region; + +/// +/// 设置热门 +/// +public class RegionSetHotInput +{ + /// + /// 地区Id + /// + public long RegionId { get; set; } + + /// + /// 热门 + /// + public bool Hot { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionUpdateInput.cs new file mode 100644 index 0000000..15d299f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Input/RegionUpdateInput.cs @@ -0,0 +1,18 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Region; + + +/// +/// 修改 +/// +public class RegionUpdateInput : RegionAddInput +{ + /// + /// 主键Id + /// + [Required] + [ValidateRequired("请选择地区")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Output/RegionGetChildListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Output/RegionGetChildListOutput.cs new file mode 100644 index 0000000..ef2411f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Output/RegionGetChildListOutput.cs @@ -0,0 +1,49 @@ +using ZhonTai.Admin.Domain.Region; + +namespace ZhonTai.Admin.Services.Region; + +/// +/// 下级列表 +/// +public class RegionGetChildListOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 级别 + /// + public RegionLevel Level { get; set; } + + /// + /// 拼音 + /// + public string Pinyin { get; set; } + + /// + /// 拼音首字母 + /// + public string PinyinFirst { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 热门 + /// + public bool Hot { get; set; } + + /// + /// 叶子节点 + /// + public bool Leaf { get => Level >= RegionLevel.Vilage; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Output/RegionGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Output/RegionGetOutput.cs new file mode 100644 index 0000000..7fafc53 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Output/RegionGetOutput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.Region; + +/// +/// 地区 +/// +public class RegionGetOutput : RegionUpdateInput +{ + /// + /// 上级Id列表 + /// + public List ParentIdList { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Output/RegionGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Output/RegionGetPageOutput.cs new file mode 100644 index 0000000..95b6a31 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Region/Output/RegionGetPageOutput.cs @@ -0,0 +1,89 @@ +using ZhonTai.Admin.Domain.Region; + +namespace ZhonTai.Admin.Services.Region; + +/// +/// 地区分页响应 +/// +public class RegionGetPageOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 上级Id + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 简称 + /// + public string ShortName { get; set; } + + /// + /// 级别 + /// + public RegionLevel Level { get; set; } + + /// + /// 代码 + /// + public string Code { get; set; } + + /// + /// 拼音 + /// + public string Pinyin { get; set; } + + /// + /// 拼音首字母 + /// + public string PinyinFirst { get; set; } + + /// + /// 驻地 + /// + public string Capital { get; set; } + + /// + /// 人口(万人) + /// + public int? Population { get; set; } + + /// + /// 面积(平方千米) + /// + public int? Area { get; set; } + + /// + /// 区号 + /// + public string AreaCode { get; set; } + + /// + /// 邮编 + /// + public string ZipCode { get; set; } + + /// + /// 排序 + /// + public int? Sort { get; set; } + + /// + /// 热门 + /// + public bool Hot { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/RemoteApp/Dto/RemoteAppAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/RemoteApp/Dto/RemoteAppAddInput.cs new file mode 100644 index 0000000..4fa6fb5 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/RemoteApp/Dto/RemoteAppAddInput.cs @@ -0,0 +1,43 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.RemoteApp.Dto; + +/// +/// 添加远程应用 +/// +public class RemoteAppAddInput +{ + /// + /// 图片地址 + /// + public string ImgUrl { get; set; } + + /// + /// 所属site + /// + [Required(ErrorMessage = "请输入所属site")] + public string Site { get; set; } + + /// + /// 名称 + /// + [Required(ErrorMessage = "请输入名称")] + public string Name { get; set; } + + /// + /// IP地址 + /// + [Required(ErrorMessage = "请输入IP地址")] + public string IpAddress { get; set; } + + /// + /// 域 + /// + [Required(ErrorMessage = "请输入域")] + public string Domain { get; set; } + + /// + /// 用户名 + /// + public string Username { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/RemoteApp/Dto/RemoteAppGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/RemoteApp/Dto/RemoteAppGetPageInput.cs new file mode 100644 index 0000000..c570c24 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/RemoteApp/Dto/RemoteAppGetPageInput.cs @@ -0,0 +1,37 @@ +namespace ZhonTai.Admin.Services.RemoteApp.Dto; + +/// +/// 远程应用分页查询输入 +/// +public class RemoteAppGetPageInput +{ + /// + /// 所属site + /// + public string Site { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// IP地址 + /// + public string IpAddress { get; set; } + + /// + /// 域 + /// + public string Domain { get; set; } + + /// + /// 用户名 + /// + public string Username { get; set; } + + /// + /// 创建时间范围 + /// + public DateTime?[] CreatedTimeRange { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/RemoteApp/Dto/RemoteAppUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/RemoteApp/Dto/RemoteAppUpdateInput.cs new file mode 100644 index 0000000..3614f7b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/RemoteApp/Dto/RemoteAppUpdateInput.cs @@ -0,0 +1,25 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.RemoteApp.Dto; + +/// +/// 修改远程应用 +/// +public class RemoteAppUpdateInput : RemoteAppAddInput +{ + /// + /// 主键Id + /// + [Required(ErrorMessage = "请选择要修改的远程应用")] + public long Id { get; set; } +} + +public class RemoteAppConncetInput +{ + /// + /// 主键Id + /// + [Required(ErrorMessage = "请选择要修改的远程应用")] + public long Id { get; set; } +} + diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/RemoteApp/IRemoteAppService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/RemoteApp/IRemoteAppService.cs new file mode 100644 index 0000000..c57b3a2 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/RemoteApp/IRemoteAppService.cs @@ -0,0 +1,63 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.RemoteApp; +using ZhonTai.Admin.Services.RemoteApp.Dto; + +namespace ZhonTai.Admin.Services.RemoteApp; + +/// +/// 远程应用服务 +/// +public interface IRemoteAppService +{ + /// + /// 获取远程应用 + /// + /// + /// + Task GetAsync(long id); + + /// + /// 查询远程应用分页 + /// + /// + /// + Task> GetPageAsync(PageInput input); + + /// + /// 新增远程应用 + /// + /// + /// + Task AddAsync(RemoteAppAddInput input); + + /// + /// 修改远程应用 + /// + /// + /// + Task UpdateAsync(RemoteAppUpdateInput input); + + /// + /// 删除远程应用 + /// + /// + /// + Task DeleteAsync(long id); + + /// + /// 生成远程链接信息 + /// + /// + /// + Task RemoteConnect(RemoteAppConncetInput input); + + /// + /// 上传图片 + /// + /// + /// + /// + Task RemoteUpload(IFormFile file, bool autoUpdate = false); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleAddInput.cs new file mode 100644 index 0000000..7d37202 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleAddInput.cs @@ -0,0 +1,57 @@ +using Newtonsoft.Json; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Domain.Role; + +namespace ZhonTai.Admin.Services.Role.Dto; + +/// +/// 添加 +/// +public class RoleAddInput +{ + /// + /// 父级Id + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 角色类型 + /// + public RoleType Type { get; set; } + + /// + /// 数据范围 + /// + public DataScope DataScope { get; set; } = DataScope.All; + + /// + /// 指定部门 + /// + public long[] OrgIds { get; set; } + + /// + /// 部门列表 + /// + [JsonIgnore] + public ICollection Orgs { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleAddRoleUserListInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleAddRoleUserListInput.cs new file mode 100644 index 0000000..296f89b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleAddRoleUserListInput.cs @@ -0,0 +1,20 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Role.Dto; + +/// +/// 添加角色用户列表 +/// +public class RoleAddRoleUserListInput +{ + /// + /// 角色 + /// + [Required(ErrorMessage = "请选择角色")] + public long RoleId { get; set; } + + /// + /// 用户 + /// + public long[] UserIds { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetListInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetListInput.cs new file mode 100644 index 0000000..b9a0e80 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetListInput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.Role.Dto; + +/// +/// 角色列表请求 +/// +public partial class RoleGetListInput +{ + /// + /// 名称 + /// + public string Name { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetListOutput.cs new file mode 100644 index 0000000..8670032 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetListOutput.cs @@ -0,0 +1,44 @@ +using ZhonTai.Admin.Domain.Role; + +namespace ZhonTai.Admin.Services.Role.Dto; + +/// +/// 角色列表响应 +/// +public class RoleGetListOutput +{ + /// + /// 主键 + /// + public long Id { get; set; } + + /// + /// 父级Id + /// + public long ParentId { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 角色类型 + /// + public RoleType Type { get; set; } + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 描述 + /// + public string Description { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetOutput.cs new file mode 100644 index 0000000..27464ff --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetOutput.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.Admin.Services.Role.Dto; + +/// +/// 角色 +/// +public class RoleGetOutput : RoleUpdateInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetPageInput.cs new file mode 100644 index 0000000..e9f791e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetPageInput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.Role.Dto; + +/// +/// 角色分页请求 +/// +public partial class RoleGetPageInput +{ + /// + /// 名称 + /// + public string Name { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetPageOutput.cs new file mode 100644 index 0000000..c4ab51c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetPageOutput.cs @@ -0,0 +1,37 @@ +namespace ZhonTai.Admin.Services.Role.Dto; + +/// +/// 角色分页响应 +/// +public class RoleGetPageOutput +{ + /// + /// 主键 + /// + public long Id { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } + + /// + /// 隐藏 + /// + public bool Hidden { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetRoleUserListInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetRoleUserListInput.cs new file mode 100644 index 0000000..3e4134d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetRoleUserListInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.Role.Dto; + +/// +/// 角色用户列表请求 +/// +public partial class RoleGetRoleUserListInput +{ + /// + /// 姓名 + /// + public string Name { get; set; } + + /// + /// 角色Id + /// + public long? RoleId { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetRoleUserListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetRoleUserListOutput.cs new file mode 100644 index 0000000..8f2f1fa --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleGetRoleUserListOutput.cs @@ -0,0 +1,27 @@ +namespace ZhonTai.Admin.Services.Role.Dto; + +/// +/// 角色用户列表响应 +/// +public class RoleGetRoleUserListOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 姓名 + /// + public string Name { get; set; } + + /// + /// 手机号 + /// + public string Mobile { get; set; } + + /// + /// 邮箱 + /// + public string Email { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleSetDataScopeInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleSetDataScopeInput.cs new file mode 100644 index 0000000..83d2a83 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleSetDataScopeInput.cs @@ -0,0 +1,28 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; +using ZhonTai.Admin.Domain.Role; + +namespace ZhonTai.Admin.Services.Role.Dto; + +/// +/// 设置数据范围 +/// +public class RoleSetDataScopeInput +{ + /// + /// 角色Id + /// + [Required] + [ValidateRequired("请选择角色")] + public long RoleId { get; set; } + + /// + /// 数据范围 + /// + public DataScope DataScope { get; set; } + + /// + /// 指定部门 + /// + public long[] OrgIds { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleUpdateInput.cs new file mode 100644 index 0000000..154d052 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/Dto/RoleUpdateInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Role.Dto; + +/// +/// 修改 +/// +public partial class RoleUpdateInput : RoleAddInput +{ + /// + /// 角色Id + /// + [Required] + [ValidateRequired("请选择角色")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/IRoleService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/IRoleService.cs new file mode 100644 index 0000000..50ad196 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Role/IRoleService.cs @@ -0,0 +1,34 @@ +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Services.Role.Dto; + +namespace ZhonTai.Admin.Services.Role; + +/// +/// 角色接口 +/// +public interface IRoleService +{ + Task GetAsync(long id); + + Task> GetListAsync(RoleGetListInput input); + + Task> GetPageAsync(PageInput input); + + Task AddAsync(RoleAddInput input); + + Task AddRoleUserAsync(RoleAddRoleUserListInput input); + + Task RemoveRoleUserAsync(RoleAddRoleUserListInput input); + + Task UpdateAsync(RoleUpdateInput input); + + Task DeleteAsync(long id); + + Task BatchDeleteAsync(long[] ids); + + Task SoftDeleteAsync(long id); + + Task BatchSoftDeleteAsync(long[] ids); + + Task SetDataScopeAsync(RoleSetDataScopeInput input); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/SearchTemplate/Inputs/SearchTemplateSaveInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/SearchTemplate/Inputs/SearchTemplateSaveInput.cs new file mode 100644 index 0000000..19cbbba --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/SearchTemplate/Inputs/SearchTemplateSaveInput.cs @@ -0,0 +1,27 @@ +namespace ZhonTai.Admin.Services.SearchTemplate.Inputs; + +/// +/// 保存请求 +/// +public class SearchTemplateSaveInput +{ + /// + /// 模块Id + /// + public long ModuleId { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 模板 + /// + public string Template { get; set; } + + /// + /// 版本 + /// + public long Version { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/SearchTemplate/Ouputs/SearchTemplateGetListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/SearchTemplate/Ouputs/SearchTemplateGetListOutput.cs new file mode 100644 index 0000000..54b272f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/SearchTemplate/Ouputs/SearchTemplateGetListOutput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.SearchTemplate.Outputs; + +/// +/// 查询模板列表 +/// +public class SearchTemplateGetListOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/SearchTemplate/Ouputs/SearchTemplateGetUpdateOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/SearchTemplate/Ouputs/SearchTemplateGetUpdateOutput.cs new file mode 100644 index 0000000..5d81a91 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/SearchTemplate/Ouputs/SearchTemplateGetUpdateOutput.cs @@ -0,0 +1,10 @@ +using ZhonTai.Admin.Services.SearchTemplate.Inputs; + +namespace ZhonTai.Admin.Services.SearchTemplate.Outputs; + +/// +/// 修改响应 +/// +public class SearchTemplateGetUpdateOutput : SearchTemplateSaveInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/SiteMsg/Dto/SiteMsgGetContentOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/SiteMsg/Dto/SiteMsgGetContentOutput.cs new file mode 100644 index 0000000..141ccbf --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/SiteMsg/Dto/SiteMsgGetContentOutput.cs @@ -0,0 +1,37 @@ +namespace ZhonTai.Admin.Services.SiteMsg.Dto; + +/// +/// 消息内容 +/// +public class SiteMsgGetContentOutput +{ + /// + /// 消息Id + /// + public long MsgId { get; set; } + + /// + /// 标题 + /// + public string Title { get; set; } + + /// + /// 类型名称 + /// + public string TypeName { get; set; } + + /// + /// 内容 + /// + public string Content { get; set; } + + /// + /// 接收时间 + /// + public virtual DateTime? ReceivedTime { get; set; } + + /// + /// 是否已读 + /// + public bool? IsRead { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/SiteMsg/Dto/SiteMsgGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/SiteMsg/Dto/SiteMsgGetPageInput.cs new file mode 100644 index 0000000..6b242b3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/SiteMsg/Dto/SiteMsgGetPageInput.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Services.SiteMsg.Dto; + +/// +/// 站点消息分页请求 +/// +public partial class SiteMsgGetPageInput +{ + /// + /// 是否已读 + /// + public bool? IsRead { get; set; } + + /// + /// 分类Id + /// + public long? TypeId { get; set; } + + /// + /// 标题 + /// + public string Title { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/SiteMsg/Dto/SiteMsgGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/SiteMsg/Dto/SiteMsgGetPageOutput.cs new file mode 100644 index 0000000..8c2e3fe --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/SiteMsg/Dto/SiteMsgGetPageOutput.cs @@ -0,0 +1,42 @@ +namespace ZhonTai.Admin.Services.SiteMsg.Dto; + +/// +/// 站点消息分页响应 +/// +public class SiteMsgGetPageOutput +{ + /// + /// 唯一Id + /// + public long Id { get; set; } + + /// + /// 消息Id + /// + public long MsgId { get; set; } + + /// + /// 标题 + /// + public string Title { get; set; } + + /// + /// 类型Id + /// + public long TypeId { get; set; } + + /// + /// 类型名称 + /// + public string TypeName { get; set; } + + /// + /// 是否已读 + /// + public bool? IsRead { get; set; } + + /// + /// 接收时间 + /// + public virtual DateTime? ReceivedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskAddInput.cs new file mode 100644 index 0000000..6163d0e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskAddInput.cs @@ -0,0 +1,49 @@ +using FreeScheduler; + +namespace ZhonTai.Admin.Services.TaskScheduler.Dto; + +/// +/// 添加 +/// +public class TaskAddInput +{ + /// + /// 任务标题 + /// + public string Topic { get; set; } + + /// + /// 任务参数 + /// + public string Body { get; set; } + + /// + /// 任务执行多少轮,-1为永久循环 + /// + public int Round { get; set; } + + /// + /// 定时类型 + /// + public TaskInterval Interval { get; set; } + + /// + /// 定时参数 60,60,60,120,120,1200,1200 + /// + public string IntervalArgument { get; set; } + + /// + /// 报警邮件,多个邮件地址则逗号分隔 + /// + public string AlarmEmail { get; set; } + + /// + /// 失败重试次数 + /// + public int? FailRetryCount { get; set; } + + /// + /// 失败重试间隔(秒) + /// + public int? FailRetryInterval { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskGetOutput.cs new file mode 100644 index 0000000..7b28307 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskGetOutput.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.Admin.Services.TaskScheduler.Dto; + +/// +/// 任务 +/// +public class TaskGetOutput : TaskUpdateInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskGetPageInput.cs new file mode 100644 index 0000000..f22ac3f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskGetPageInput.cs @@ -0,0 +1,39 @@ +using TaskStatus = FreeScheduler.TaskStatus; + +namespace ZhonTai.Admin.Domain.Task.Dto; + +/// +/// 任务分页请求 +/// +public partial class TaskGetPageInput +{ + /// + /// 分组名称 + /// + public string GroupName { get; set; } + + /// + /// 任务名称 + /// + public string TaskName { get; set; } + + /// + /// 集群Id + /// + public string ClusterId { get; set; } + + /// + /// 任务状态 + /// + public TaskStatus? TaskStatus { get; set; } + + /// + /// 创建开始时间 + /// + public DateTime? StartAddTime { get; set; } + + /// + /// 创建结束时间 + /// + public DateTime? EndAddTime { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskGetPageOutput.cs new file mode 100644 index 0000000..13ac137 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskGetPageOutput.cs @@ -0,0 +1,65 @@ +using FreeScheduler; +using TaskStatus = FreeScheduler.TaskStatus; + +namespace ZhonTai.Admin.Services.TaskScheduler.Dto; + +/// +/// 任务分页响应 +/// +public class TaskGetPageOutput +{ + /// + /// 主键 + /// + public string Id { get; set; } + + /// + /// 任务标题 + /// + public string Topic { get; set; } + + /// + /// 任务数据 + /// + public string Body { get; set; } + + /// + /// 任务执行多少轮 + /// + public int Round { get; set; } + + /// + /// 定时类型 + /// + public TaskInterval Interval { get; set; } + + /// + /// 定时参数值 + /// + public string IntervalArgument { get; set; } + + /// + /// 任务状态 + /// + public TaskStatus Status { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreateTime { get; set; } + + /// + /// 最后运行时间 + /// + public DateTime LastRunTime { get; set; } + + /// + /// 当前运行到第几轮 + /// + public int CurrentRound { get; set; } + + /// + /// 错次数 + /// + public int ErrorTimes { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskLogGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskLogGetPageInput.cs new file mode 100644 index 0000000..32506ba --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskLogGetPageInput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Domain.Task.Dto; + +/// +/// 任务日志分页请求 +/// +public partial class TaskLogGetPageInput +{ + /// + /// 任务Id + /// + public string TaskId { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskUpdateInput.cs new file mode 100644 index 0000000..3a22c58 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/Dto/TaskUpdateInput.cs @@ -0,0 +1,15 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.TaskScheduler.Dto; + +/// +/// 修改 +/// +public partial class TaskUpdateInput : TaskAddInput +{ + /// + /// 任务Id + /// + [Required(ErrorMessage = "请选择任务")] + public string Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/ITaskLogService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/ITaskLogService.cs new file mode 100644 index 0000000..96931b1 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/ITaskLogService.cs @@ -0,0 +1,15 @@ +using FreeScheduler; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.Task.Dto; + +namespace ZhonTai.Admin.Services.TaskScheduler; + +/// +/// 任务日志接口 +/// +public interface ITaskLogService +{ + PageOutput GetPage(PageInput input); + + void Add(TaskLog input); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/ITaskService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/ITaskService.cs new file mode 100644 index 0000000..bfce962 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TaskScheduler/ITaskService.cs @@ -0,0 +1,27 @@ +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.Task.Dto; +using ZhonTai.Admin.Services.TaskScheduler.Dto; + +namespace ZhonTai.Admin.Services.TaskScheduler; + +/// +/// 任务接口 +/// +public interface ITaskService +{ + Task GetAsync(string id); + + Task> GetPage(PageInput input); + + Task Add(TaskAddInput input); + + Task UpdateAsync(TaskUpdateInput input); + + void Pause(string id); + + void Resume(string id); + + void Run(string id); + + Task Delete(string id); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/TemplateCenter/Dto/TemplateCenterAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TemplateCenter/Dto/TemplateCenterAddInput.cs new file mode 100644 index 0000000..0fba645 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TemplateCenter/Dto/TemplateCenterAddInput.cs @@ -0,0 +1,60 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Contracts.Services.TemplateCenter.Dto; + +/// +/// 添加模板中心 +/// +public class TemplateCenterAddInput +{ + /// + /// 父级ID + /// + public long ParentId { get; set; } + + /// + /// 模板名称 + /// + [Required(ErrorMessage = "请输入模板名称")] + public string Name { get; set; } + + /// + /// 类型:1-文件夹,2-文件 + /// + public int Type { get; set; } + + /// + /// 联系人 + /// + public string ContactPerson { get; set; } + + /// + /// 功能简介 + /// + public string FunctionIntro { get; set; } + + /// + /// 关键词 + /// + public string Keywords { get; set; } + + /// + /// 网址 + /// + public string Site { get; set; } + + /// + /// 文件路径 + /// + public string FilePath { get; set; } + + /// + /// 文件关键词 + /// + public string FileKeword { get; set; } + + /// + /// 文件URL + /// + public string FileUrl { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/TemplateCenter/Dto/TemplateCenterGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TemplateCenter/Dto/TemplateCenterGetOutput.cs new file mode 100644 index 0000000..400aa18 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TemplateCenter/Dto/TemplateCenterGetOutput.cs @@ -0,0 +1,77 @@ +namespace ZhonTai.Admin.Contracts.Services.TemplateCenter.Dto; + +/// +/// 模板中心查询输出 +/// +public class TemplateCenterGetOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 父级ID + /// + public long ParentId { get; set; } + + /// + /// 模板名称 + /// + public string Name { get; set; } + + /// + /// 联系人 + /// + public string ContactPerson { get; set; } + + /// + /// 功能简介 + /// + public string FunctionIntro { get; set; } + + /// + /// 关键词 + /// + public string Keywords { get; set; } + + /// + /// 网址 + /// + public string Site { get; set; } + + /// + /// 类型:1-文件夹,2-文件 + /// + public int Type { get; set; } + + /// + /// 文件路径 + /// + public string FilePath { get; set; } + + /// + /// 文件关键词 + /// + public string FileKeword { get; set; } + + /// + /// 文件URL + /// + public string FileUrl { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } + + /// + /// 修改时间 + /// + public DateTime? ModifiedTime { get; set; } + + /// + /// 子级模板列表 + /// + public List Children { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/TemplateCenter/Dto/TemplateCenterUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TemplateCenter/Dto/TemplateCenterUpdateInput.cs new file mode 100644 index 0000000..55c3cd0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TemplateCenter/Dto/TemplateCenterUpdateInput.cs @@ -0,0 +1,15 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Contracts.Services.TemplateCenter.Dto; + +/// +/// 修改模板中心 +/// +public class TemplateCenterUpdateInput : TemplateCenterAddInput +{ + /// + /// 主键Id + /// + [Required(ErrorMessage = "请选择模板")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/TemplateCenter/ITemplateCenterService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TemplateCenter/ITemplateCenterService.cs new file mode 100644 index 0000000..03204fb --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/TemplateCenter/ITemplateCenterService.cs @@ -0,0 +1,45 @@ +using ZhonTai.Admin.Contracts.Services.TemplateCenter.Dto; + +namespace ZhonTai.Admin.Contracts.Services.TemplateCenter; + +/// +/// 模板中心服务接口 +/// +public interface ITemplateCenterService +{ + /// + /// 获取模板树形结构列表 + /// + /// + Task> GetTreeAsync(); + + /// + /// 新增模板 + /// + /// 新增参数 + /// + Task AddAsync(TemplateCenterAddInput input); + + /// + /// 修改模板 + /// + /// 修改参数 + /// + Task UpdateAsync(TemplateCenterUpdateInput input); + + /// + /// 删除模板 + /// + /// 主键Id + /// + Task DeleteAsync(long id); + + /// + /// 读取共享文件夹内容并添加到指定父级下(加载子集) + /// + /// 文件夹路径 + /// 父级模板ID + /// 是否包含子文件夹 + /// + Task> GetSharedFolderContentAsync(string folderPath, long parentId, bool includeSubfolders = true); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantAddInput.cs new file mode 100644 index 0000000..30aec62 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantAddInput.cs @@ -0,0 +1,86 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Tenant.Dto; + +/// +/// 添加 +/// +public class TenantAddInput +{ + /// + /// 租户Id + /// + public virtual long Id { get; set; } + + /// + /// 企业名称 + /// + [Required(ErrorMessage = "请输入企业名称")] + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 套餐Ids + /// + public virtual long[] PkgIds { get; set; } + + /// + /// 姓名 + /// + public string RealName { get; set; } + + /// + /// 账号 + /// + [Required(ErrorMessage = "请输入账号")] + public string UserName { get; set; } + + /// + /// 密码 + /// + public string Password { get; set; } + + /// + /// 手机号码 + /// + public string Phone { get; set; } + + /// + /// 邮箱地址 + /// + public string Email { get; set; } + + /// + /// 域名 + /// + public string Domain { get; set; } + + /// + /// 数据库注册键 + /// + public string DbKey { get; set; } + + /// + /// 数据库 + /// + public FreeSql.DataType? DbType { get; set; } + + /// + /// 连接字符串 + /// + public string ConnectionString { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantGetOutput.cs new file mode 100644 index 0000000..eebcf98 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantGetOutput.cs @@ -0,0 +1,18 @@ +using Newtonsoft.Json; +using ZhonTai.Admin.Domain.Pkg; + +namespace ZhonTai.Admin.Services.Tenant.Dto; + +public class TenantGetOutput : TenantUpdateInput +{ + /// + /// 套餐列表 + /// + [JsonIgnore] + public ICollection Pkgs { get; set; } + + /// + /// 套餐Id列表 + /// + public override long[] PkgIds => Pkgs?.Select(a => a.Id)?.ToArray(); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantGetPageInput.cs new file mode 100644 index 0000000..6160ae7 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantGetPageInput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.Tenant.Dto; + +/// +/// 租户分页请求 +/// +public class TenantGetPageInput +{ + /// + /// 企业名称 + /// + public string Name { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantGetPageOutput.cs new file mode 100644 index 0000000..39adcf8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantGetPageOutput.cs @@ -0,0 +1,79 @@ +using Newtonsoft.Json; +using ZhonTai.Admin.Domain.Pkg; + +namespace ZhonTai.Admin.Services.Tenant.Dto; + +/// +/// 租户分页响应 +/// +public class TenantGetPageOutput +{ + /// + /// 主键 + /// + public long Id { get; set; } + + /// + /// 企业名称 + /// + public string Name { get; set; } + + /// + /// 企业编码 + /// + public string Code { get; set; } + + [JsonIgnore] + public ICollection Pkgs { get; set; } + + /// + /// 套餐 + /// + public string[] PkgNames { get; set; } + + /// + /// 姓名 + /// + public string RealName { get; set; } + + /// + /// 账号 + /// + public string UserName { get; set; } + + /// + /// 手机号码 + /// + public string Phone { get; set; } + + /// + /// 邮箱地址 + /// + public string Email { get; set; } + + /// + /// 数据库 + /// + [JsonIgnore] + public FreeSql.DataType? DbType { get; set; } + + /// + /// 数据库名称 + /// + public string DbTypeName => DbType?.ToDescriptionOrString(); + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantRegInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantRegInput.cs new file mode 100644 index 0000000..9f73671 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantRegInput.cs @@ -0,0 +1,66 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.Tenant.Dto; + +/// +/// 注册 +/// +public class TenantRegInput +{ + /// + /// 租户Id + /// + public virtual long Id { get; set; } + + /// + /// 企业名称 + /// + [Required(ErrorMessage = "请输入企业名称")] + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 套餐Ids + /// + public virtual long[] PkgIds { get; set; } + + /// + /// 姓名 + /// + public string RealName { get; set; } + + /// + /// 账号 + /// + [Required(ErrorMessage = "请输入账号")] + public string UserName { get; set; } + + /// + /// 密码 + /// + public string Password { get; set; } + + /// + /// 手机号 + /// + public string Mobile { get; set; } + + /// + /// 邮箱地址 + /// + public string Email { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantSetEnableInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantSetEnableInput.cs new file mode 100644 index 0000000..68cea50 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantSetEnableInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.Tenant.Dto; + +/// +/// 设置启用 +/// +public class TenantSetEnableInput +{ + /// + /// 租户Id + /// + public long TenantId { get; set; } + + /// + /// 是否启用 + /// + public bool Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantUpdateInput.cs new file mode 100644 index 0000000..2d3962f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/Dto/TenantUpdateInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.Tenant.Dto; + +/// +/// 修改 +/// +public partial class TenantUpdateInput : TenantAddInput +{ + /// + /// 租户Id + /// + [Required] + [ValidateRequired("请选择租户")] + public override long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/ITenantService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/ITenantService.cs new file mode 100644 index 0000000..b1d2cda --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/Tenant/ITenantService.cs @@ -0,0 +1,26 @@ +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Services.Tenant.Dto; + +namespace ZhonTai.Admin.Services.Tenant; + +/// +/// 租户接口 +/// +public interface ITenantService +{ + Task GetAsync(long id); + + Task> GetPageAsync(PageInput input); + + Task AddAsync(TenantAddInput input); + + Task RegAsync(TenantRegInput input); + + Task UpdateAsync(TenantUpdateInput input); + + Task DeleteAsync(long id); + + Task SoftDeleteAsync(long id); + + Task BatchSoftDeleteAsync(long[] ids); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/StaffAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/StaffAddInput.cs new file mode 100644 index 0000000..1ea5f57 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/StaffAddInput.cs @@ -0,0 +1,39 @@ +using ZhonTai.Admin.Domain.UserStaff; + +namespace ZhonTai.Admin.Domain.User; + +/// +/// 员工添加 +/// +public class StaffAddInput +{ + /// + /// 工号 + /// + public string JobNumber { get; set; } + + /// + /// 职位 + /// + public string Position { get; set; } + + /// + /// 性别 + /// + public Sex? Sex { get; set; } + + /// + /// 入职时间 + /// + public DateTime? EntryTime { get; set; } + + /// + /// 企业微信名片 + /// + public string WorkWeChatCard { get; set; } + + /// + /// 个人简介 + /// + public string Introduce { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/StaffUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/StaffUpdateInput.cs new file mode 100644 index 0000000..65b5f26 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/StaffUpdateInput.cs @@ -0,0 +1,13 @@ + +namespace ZhonTai.Admin.Domain.User; + +/// +/// 员工修改 +/// +public class StaffUpdateInput: StaffAddInput +{ + /// + /// 编号 + /// + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserAddInput.cs new file mode 100644 index 0000000..338ae5f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserAddInput.cs @@ -0,0 +1,27 @@ +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 添加 +/// +public class UserAddInput: UserFormInput +{ + /// + /// 所属部门Ids + /// + public virtual long[] OrgIds { get; set; } + + /// + /// 主属部门Id + /// + public long OrgId { get; set; } + + /// + /// 密码 + /// + public virtual string Password { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserAddMemberInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserAddMemberInput.cs new file mode 100644 index 0000000..2ff0b99 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserAddMemberInput.cs @@ -0,0 +1,21 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Domain.User; + +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 添加会员 +/// +public class UserAddMemberInput: UserMemberFormInput +{ + /// + /// 密码 + /// + [Required(ErrorMessage = "请输入密码")] + public string Password { get; set; } + + /// + /// 状态 + /// + public UserStatus Status { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserBatchSetOrgInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserBatchSetOrgInput.cs new file mode 100644 index 0000000..7a27fa9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserBatchSetOrgInput.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 批量设置部门 +/// +public class UserBatchSetOrgInput +{ + /// + /// 用户Id列表 + /// + public long[] UserIds { get; set; } + + /// + /// 所属部门Ids + /// + public virtual long[] OrgIds { get; set; } + + /// + /// 主属部门Id + /// + public long OrgId { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserChangePasswordInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserChangePasswordInput.cs new file mode 100644 index 0000000..55d8755 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserChangePasswordInput.cs @@ -0,0 +1,27 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 修改密码 +/// +public class UserChangePasswordInput +{ + /// + /// 旧密码 + /// + [Required(ErrorMessage = "请输入旧密码")] + public string OldPassword { get; set; } + + /// + /// 新密码 + /// + [Required(ErrorMessage = "请输入新密码")] + public string NewPassword { get; set; } + + /// + /// 确认新密码 + /// + [Required(ErrorMessage = "请输入确认新密码")] + public string ConfirmPassword { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserFormInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserFormInput.cs new file mode 100644 index 0000000..ad1c481 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserFormInput.cs @@ -0,0 +1,58 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Domain.User; + +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 用户表单 +/// +public class UserFormInput +{ + /// + /// 用户Id + /// + public virtual long Id { get; set; } + + /// + /// 账号 + /// + [Required(ErrorMessage = "请输入账号")] + public string UserName { get; set; } + + /// + /// 姓名 + /// + [Required(ErrorMessage = "请输入姓名")] + public string Name { get; set; } + + /// + /// 手机号 + /// + public string Mobile { get; set; } + + /// + /// 邮箱 + /// + public string Email { get; set; } + + /// + /// 角色Ids + /// + public virtual long[] RoleIds { get; set; } + + /// + /// 直属主管Id + /// + public long? ManagerUserId { get; set; } + + /// + /// 直属主管姓名 + /// + public string ManagerUserName { get; set; } + + /// + /// 员工 + /// + [Required] + public StaffAddInput Staff { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetBasicOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetBasicOutput.cs new file mode 100644 index 0000000..3c28448 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetBasicOutput.cs @@ -0,0 +1,57 @@ +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 用户基本信息 +/// +public class UserGetBasicOutput +{ + /// + /// 头像 + /// + public string Avatar { get; set; } + + /// + /// 姓名 + /// + public string Name { get; set; } + + /// + /// 昵称 + /// + public string NickName { get; set; } + + /// + /// 手机号 + /// + public string Mobile { get; set; } + + /// + /// 邮箱 + /// + public string Email { get; set; } + + /// + /// 最后登录时间 + /// + public DateTime? LastLoginTime { get; set; } + + /// + /// 最后登录IP + /// + public string LastLoginIP { get; set; } + + /// + /// 最后登录国家 + /// + public string LastLoginCountry { get; set; } + + /// + /// 最后登录省份 + /// + public string LastLoginProvince { get; set; } + + /// + /// 最后登录城市 + /// + public string LastLoginCity { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetDeletedUserPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetDeletedUserPageOutput.cs new file mode 100644 index 0000000..e93f7e8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetDeletedUserPageOutput.cs @@ -0,0 +1,119 @@ +using Newtonsoft.Json; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Domain.Role; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.UserStaff; + +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 已删除用户分页查询响应 +/// +public class UserGetDeletedUserPageOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 账号 + /// + public string UserName { get; set; } + + /// + /// 姓名 + /// + public string Name { get; set; } + + /// + /// 手机号 + /// + public string Mobile { get; set; } + + /// + /// 邮箱 + /// + public string Email { get; set; } + + /// + /// 用户类型 + /// + public UserType Type { get; set; } + + [JsonIgnore] + public ICollection Roles { get; set; } + + /// + /// 角色 + /// + public string RoleNames => string.Join(",", Roles?.Select(a => a.Name)?.ToArray()); + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 性别 + /// + public Sex? Sex { get; set; } + + /// + /// 主属部门Id + /// + [JsonIgnore] + public long OrgId { get; set; } + + /// + /// 主属部门 + /// + public string OrgPath { get; set; } + + /// + /// 部门列表 + /// + [JsonIgnore] + public ICollection Orgs { get; set; } + + /// + /// 所属部门Id列表 + /// + [JsonIgnore] + public long[] OrgIds => Orgs?.Select(a => a.Id)?.ToArray(); + + /// + /// 所属部门 + /// + public string OrgPaths { get; set; } + + /// + /// 创建者用户名 + /// + public string CreatedUserName { get; set; } + + /// + /// 创建者姓名 + /// + public string CreatedUserRealName { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } + + /// + /// 修改者用户名 + /// + public string ModifiedUserName { get; set; } + + /// + /// 修改者姓名 + /// + public string ModifiedUserRealName { get; set; } + + /// + /// 修改时间 + /// + public DateTime? ModifiedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetOutput.cs new file mode 100644 index 0000000..759a69b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetOutput.cs @@ -0,0 +1,21 @@ +using System.Text.Json.Serialization; +using ZhonTai.Admin.Domain.Role; + +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 用户 +/// +public class UserGetOutput : UserUpdateInput +{ + /// + /// 角色列表 + /// + [JsonIgnore] + public ICollection Roles { get; set; } + + /// + /// 角色Id列表 + /// + public override long[] RoleIds => Roles?.Select(a => a.Id)?.ToArray(); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetPageInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetPageInput.cs new file mode 100644 index 0000000..ce7957d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetPageInput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 用户分页查询条件 +/// +public class UserGetPageInput +{ + /// + /// 部门Id + /// + public long? OrgId { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetPageOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetPageOutput.cs new file mode 100644 index 0000000..4aef078 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserGetPageOutput.cs @@ -0,0 +1,129 @@ +using Newtonsoft.Json; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Domain.Role; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.UserStaff; + +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 用户分页查询响应 +/// +public class UserGetPageOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 账号 + /// + public string UserName { get; set; } + + /// + /// 姓名 + /// + public string Name { get; set; } + + /// + /// 手机号 + /// + public string Mobile { get; set; } + + /// + /// 邮箱 + /// + public string Email { get; set; } + + /// + /// 用户类型 + /// + public UserType Type { get; set; } + + [JsonIgnore] + public ICollection Roles { get; set; } + + /// + /// 角色 + /// + public string RoleNames => string.Join(",", Roles?.Select(a => a.Name)?.ToArray()); + + /// + /// 是否主管 + /// + public bool IsManager { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 在线 + /// + public bool Online { get; set; } + + /// + /// 性别 + /// + public Sex? Sex { get; set; } + + /// + /// 主属部门Id + /// + [JsonIgnore] + public long OrgId { get; set; } + + /// + /// 主属部门 + /// + public string OrgPath { get; set; } + + /// + /// 部门列表 + /// + [JsonIgnore] + public ICollection Orgs { get; set; } + + /// + /// 所属部门Id列表 + /// + [JsonIgnore] + public long[] OrgIds => Orgs?.Select(a => a.Id)?.ToArray(); + + /// + /// 所属部门 + /// + public string OrgPaths { get; set; } + + /// + /// 创建者用户名 + /// + public string CreatedUserName { get; set; } + + /// + /// 创建者姓名 + /// + public string CreatedUserRealName { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } + + /// + /// 修改者用户名 + /// + public string ModifiedUserName { get; set; } + + /// + /// 修改者姓名 + /// + public string ModifiedUserRealName { get; set; } + + /// + /// 修改时间 + /// + public DateTime? ModifiedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserMemberFormInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserMemberFormInput.cs new file mode 100644 index 0000000..635a0eb --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserMemberFormInput.cs @@ -0,0 +1,35 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 会员表单 +/// +public class UserMemberFormInput +{ + /// + /// 会员Id + /// + public virtual long Id { get; set; } + + /// + /// 账号 + /// + [Required(ErrorMessage = "请输入账号")] + public string UserName { get; set; } + + /// + /// 姓名 + /// + public string Name { get; set; } + + /// + /// 手机号 + /// + public string Mobile { get; set; } + + /// + /// 邮箱 + /// + public string Email { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserResetPasswordInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserResetPasswordInput.cs new file mode 100644 index 0000000..27c7911 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserResetPasswordInput.cs @@ -0,0 +1,14 @@ +using ZhonTai.Admin.Core.Entities; + +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 重置密码 +/// +public class UserResetPasswordInput : Entity +{ + /// + /// 密码 + /// + public string Password { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserRestoreInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserRestoreInput.cs new file mode 100644 index 0000000..dfbe293 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserRestoreInput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 恢复 +/// +public class UserRestoreInput +{ + /// + /// 用户Id列表 + /// + public long[] UserIds { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserSetEnableInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserSetEnableInput.cs new file mode 100644 index 0000000..ac95341 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserSetEnableInput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 设置启用 +/// +public class UserSetEnableInput +{ + /// + /// 用户Id + /// + public long UserId { get; set; } + + /// + /// 是否启用 + /// + public bool Enabled { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserSetManagerInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserSetManagerInput.cs new file mode 100644 index 0000000..ef73480 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserSetManagerInput.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 设置主管 +/// +public class UserSetManagerInput +{ + /// + /// 用户Id + /// + public long UserId { get; set; } + + /// + /// 部门Id + /// + public long OrgId { get; set; } + + /// + /// 是否主管 + /// + public bool IsManager { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserUpdateBasicInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserUpdateBasicInput.cs new file mode 100644 index 0000000..113353e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserUpdateBasicInput.cs @@ -0,0 +1,20 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 更新基本信息 +/// +public class UserUpdateBasicInput +{ + /// + /// 姓名 + /// + [Required(ErrorMessage = "请输入姓名")] + public string Name { get; set; } + + /// + /// 昵称 + /// + public string NickName { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserUpdateInput.cs new file mode 100644 index 0000000..891c966 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserUpdateInput.cs @@ -0,0 +1,18 @@ +using Newtonsoft.Json; +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 修改 +/// +public partial class UserUpdateInput: UserFormInput +{ + /// + /// 主键Id + /// + [Required] + [ValidateRequired("请选择用户")] + public override long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserUpdateMemberInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserUpdateMemberInput.cs new file mode 100644 index 0000000..ffad706 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Dto/UserUpdateMemberInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 修改会员 +/// +public class UserUpdateMemberInput: UserMemberFormInput +{ + /// + /// 主键Id + /// + [Required] + [ValidateRequired("请选择会员")] + public override long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Events/UserOrgChangeEvent.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Events/UserOrgChangeEvent.cs new file mode 100644 index 0000000..114a512 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/Events/UserOrgChangeEvent.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Services.User.Events; + +/// +/// 部门转移 +/// +public class UserOrgChangeEvent +{ + /// + /// 用户Id列表 + /// + public long[] UserIds { get; set; } + + /// + /// 所属部门Id列表 + /// + public virtual long[] OrgIds { get; set; } + + /// + /// 主属部门Id + /// + public long OrgId { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/IUserService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/IUserService.cs new file mode 100644 index 0000000..adce8c5 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/User/IUserService.cs @@ -0,0 +1,52 @@ +using Microsoft.AspNetCore.Http; +using ZhonTai.Admin.Core.Auth; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.User.Dto; +using ZhonTai.Admin.Services.Auth.Dto; +using ZhonTai.Admin.Services.User.Dto; + +namespace ZhonTai.Admin.Services.User; + +/// +/// 用户接口 +/// +public interface IUserService +{ + Task GetAsync(long id); + + Task> GetPageAsync(PageInput input); + + Task GetLoginUserAsync(long id); + + Task GetDataPermissionAsync(string? apiPath); + + Task AddAsync(UserAddInput input); + + Task AddMemberAsync(UserAddMemberInput input); + + Task UpdateAsync(UserUpdateInput input); + + Task DeleteAsync(long id); + + Task BatchDeleteAsync(long[] ids); + + Task SoftDeleteAsync(long id); + + Task BatchSoftDeleteAsync(long[] ids); + + Task ChangePasswordAsync(UserChangePasswordInput input); + + Task ResetPasswordAsync(UserResetPasswordInput input); + + Task SetManagerAsync(UserSetManagerInput input); + + Task UpdateBasicAsync(UserUpdateBasicInput input); + + Task GetBasicAsync(); + + Task GetPermissionAsync(); + + Task AvatarUpload(IFormFile file, bool autoUpdate = false); + + Task OneClickLoginAsync(string userName); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/UserClickStats/Dto/UserClickStatsDto.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/UserClickStats/Dto/UserClickStatsDto.cs new file mode 100644 index 0000000..48bd6c9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/UserClickStats/Dto/UserClickStatsDto.cs @@ -0,0 +1,197 @@ +using System; +using ZhonTai.Admin.Core.Dto; + +namespace ZhonTai.Admin.Services.UserClickStats.Dto; + +/// +/// 用户点击统计查询 +/// +public class UserClickStatsGetInput +{ + /// + /// 主键Id + /// + public long Id { get; set; } +} + +/// +/// 用户点击统计添加 +/// +public class UserClickStatsAddInput +{ + /// + /// 网页类型 1 在线应用 3 模板中心 5 在线看板 + /// + public int WebType { get; set; } + + /// + /// 网页Id + /// + public long WebId { get; set; } + + /// + /// 用户Id + /// + public long UserId { get; set; } + + /// + /// 页面点击次数 + /// + public int PageClicks { get; set; } + + /// + /// 最后点击时间 + /// + public DateTime LastClickTime { get; set; } +} + +/// +/// 用户点击统计更新 +/// +public class UserClickStatsUpdateInput : UserClickStatsAddInput +{ + /// + /// 主键Id + /// + public long Id { get; set; } +} + +/// +/// 用户点击统计列表查询 +/// +public class UserClickStatsGetListInput : PageInput +{ + /// + /// 网页类型 + /// + public int? WebType { get; set; } + + /// + /// 网页Id + /// + public long? WebId { get; set; } + + /// + /// 用户Id + /// + public long? UserId { get; set; } +} + +/// +/// 用户点击统计输出 +/// +public class UserClickStatsGetOutput +{ + /// + /// 主键Id + /// + public long Id { get; set; } + + /// + /// 网页类型 1 在线应用 3 模板中心 5 在线看板 + /// + public int WebType { get; set; } + + /// + /// 网页Id + /// + public long WebId { get; set; } + + /// + /// 用户Id + /// + public long UserId { get; set; } + + /// + /// 页面点击次数 + /// + public int PageClicks { get; set; } + + /// + /// 最后点击时间 + /// + public DateTime LastClickTime { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } +} + +/// +/// 记录用户点击输入 +/// +public class RecordUserClickInput +{ + /// + /// 网页类型 1 在线应用 3 模板中心 5 在线看板 + /// + public int WebType { get; set; } + + /// + /// 网页Id + /// + public long WebId { get; set; } + + /// + /// 用户Id + /// + public long UserId { get; set; } +} + +/// +/// 获取热门网站列表输入 +/// +public class GetTopClickedWebsitesInput +{ + /// + /// 用户Id + /// + public long UserId { get; set;} +} + +/// +/// 热门网站输出 +/// +public class TopClickedWebsiteOutput +{ + /// + /// 网页类型 1 在线应用 3 模板中心 5 在线看板 + /// + public int WebType { get; set; } + + /// + /// 网页Id + /// + public long WebId { get; set; } + + /// + /// 网页名称 + /// + public string WebName { get; set; } + + /// + /// 联系人 + /// + public string ContactPerson {get; set;} + + /// + /// 教程地址 + /// + public string TutorialUrl {get; set;} + + /// + /// 标签 + /// + public string TagName { get; set; } + + /// + /// 网站地址 + /// + public string WebsiteUrl { get; set; } + + /// + /// 点击次数 + /// + public int PageClicks { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/UserClickStats/IUserClickService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/UserClickStats/IUserClickService.cs new file mode 100644 index 0000000..8f91214 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/UserClickStats/IUserClickService.cs @@ -0,0 +1,25 @@ +using System.Threading.Tasks; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Services.UserClickStats.Dto; + +namespace ZhonTai.Admin.Services.UserClickStats; + +/// +/// 用户点击统计服务 +/// +public interface IUserClickService +{ + /// + /// 记录用户点击 + /// + /// 点击记录输入参数 + /// + Task RecordClickAsync(RecordUserClickInput input); + + /// + /// 获取点击率最高的网站列表 + /// + /// 查询条件 + /// 热门网站列表 + Task> GetTopClickedWebsitesAsync(); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/UserCustomNavigation/Dto/UserCustomNavigationDto.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/UserCustomNavigation/Dto/UserCustomNavigationDto.cs new file mode 100644 index 0000000..3bf5697 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/UserCustomNavigation/Dto/UserCustomNavigationDto.cs @@ -0,0 +1,23 @@ +namespace ZhonTai.Admin.Services.UserCustomNavigation.Dto; + +/// +/// 保存自定义导航输入 +/// +public class SaveUserCustomNavigationInput +{ + /// + /// JSON字符串 + /// + public string Json { get; set; } +} + +/// +/// 加载自定义导航输出 +/// +public class UserCustomNavigationOutput +{ + /// + /// JSON字符串 + /// + public string Json { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/UserCustomNavigation/IUserCustomNavigationService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/UserCustomNavigation/IUserCustomNavigationService.cs new file mode 100644 index 0000000..706dce2 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/UserCustomNavigation/IUserCustomNavigationService.cs @@ -0,0 +1,21 @@ +using System.Threading.Tasks; +using ZhonTai.Admin.Services.UserCustomNavigation.Dto; + +namespace ZhonTai.Admin.Services.UserCustomNavigation; + +public interface IUserCustomNavigationService +{ + /// + /// 保存自定义导航 + /// + /// 用户ID + /// 导航JSON + Task SaveAsync(SaveUserCustomNavigationInput input); + + /// + /// 加载自定义导航 + /// + /// 用户ID + /// 导航JSON + Task GetAsync(); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewAddInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewAddInput.cs new file mode 100644 index 0000000..832232b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewAddInput.cs @@ -0,0 +1,52 @@ +namespace ZhonTai.Admin.Services.View.Dto; + +/// +/// 添加 +/// +public class ViewAddInput +{ + /// + /// 平台 + /// + public string Platform { get; set; } + + /// + /// 所属节点 + /// + public long ParentId { get; set; } + + /// + /// 视图命名 + /// + public string Name { get; set; } + + /// + /// 视图名称 + /// + public string Label { get; set; } + + /// + /// 视图路径 + /// + public string Path { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } + + /// + /// 缓存 + /// + public bool Cache { get; set; } = true; + + /// + /// 排序 + /// + public int? Sort { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } = true; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewGetListInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewGetListInput.cs new file mode 100644 index 0000000..81214ef --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewGetListInput.cs @@ -0,0 +1,27 @@ +namespace ZhonTai.Admin.Services.View.Dto; + +/// +/// 视图查询 +/// +public class ViewGetListInput +{ + /// + /// 平台 + /// + public string Platform { get; set; } + + /// + /// 视图命名 + /// + public string Name { get; set; } + + /// + /// 视图名称 + /// + public string Label { get; set; } + + /// + /// 视图路径 + /// + public string Path { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewGetListOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewGetListOutput.cs new file mode 100644 index 0000000..f8baab7 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewGetListOutput.cs @@ -0,0 +1,57 @@ +namespace ZhonTai.Admin.Services.View.Dto; + +/// +/// 视图列表 +/// +public class ViewGetListOutput +{ + /// + /// 视图Id + /// + public long Id { get; set; } + + /// + /// 视图父级 + /// + public long? ParentId { get; set; } + + /// + /// 平台 + /// + public string Platform { get; set; } + + /// + /// 视图命名 + /// + public string Name { get; set; } + + /// + /// 视图名称 + /// + public string Label { get; set; } + + /// + /// 视图路径 + /// + public string Path { get; set; } + + /// + /// 缓存 + /// + public bool Cache { get; set; } = true; + + /// + /// 排序 + /// + public int Sort { get; set; } + + /// + /// 启用 + /// + public bool Enabled { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewGetOutput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewGetOutput.cs new file mode 100644 index 0000000..9cc7da3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewGetOutput.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.Admin.Services.View.Dto; + +/// +/// 视图 +/// +public class ViewGetOutput : ViewUpdateInput +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewSyncInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewSyncInput.cs new file mode 100644 index 0000000..a47a86f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewSyncInput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.View.Dto; + +/// +/// 视图同步 +/// +public class ViewSyncInput +{ + /// + /// 视图列表 + /// + public List Views { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewSyncModel.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewSyncModel.cs new file mode 100644 index 0000000..f186256 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewSyncModel.cs @@ -0,0 +1,32 @@ +namespace ZhonTai.Admin.Services.View.Dto; + +/// +/// 视图同步模型 +/// +public class ViewSyncModel +{ + /// + /// 视图命名 + /// + public string Name { get; set; } + + /// + /// 地址 + /// + public string Path { get; set; } + + /// + /// 视图名称 + /// + public string Label { get; set; } + + /// + /// 说明 + /// + public string Description { get; set; } + + /// + /// 缓存 + /// + public bool Cache { get; set; } = true; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewUpdateInput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewUpdateInput.cs new file mode 100644 index 0000000..2083e71 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/Dto/ViewUpdateInput.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Validators; + +namespace ZhonTai.Admin.Services.View.Dto; + +/// +/// 修改 +/// +public class ViewUpdateInput : ViewAddInput +{ + /// + /// 视图Id + /// + [Required] + [ValidateRequired("请选择视图")] + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/IViewService.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/IViewService.cs new file mode 100644 index 0000000..3a0f938 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/View/IViewService.cs @@ -0,0 +1,27 @@ +using ZhonTai.Admin.Services.View.Dto; + +namespace ZhonTai.Admin.Services.View; + +/// +/// 视图接口 +/// +public interface IViewService +{ + Task GetAsync(long id); + + Task> GetListAsync(ViewGetListInput input); + + Task AddAsync(ViewAddInput input); + + Task UpdateAsync(ViewUpdateInput input); + + Task DeleteAsync(long id); + + Task BatchDeleteAsync(long[] ids); + + Task SoftDeleteAsync(long id); + + Task BatchSoftDeleteAsync(long[] ids); + + Task SyncAsync(ViewSyncInput input); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/Services/WebSocket/Dto/WebSocketPreConnectInpput.cs b/src/modules/admin/ZhonTai.Admin.Contracts/Services/WebSocket/Dto/WebSocketPreConnectInpput.cs new file mode 100644 index 0000000..ac1577f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/Services/WebSocket/Dto/WebSocketPreConnectInpput.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Services.WebSocket.Dto; + +/// +/// WebSocket请求 +/// +public class WebSocketPreConnectInput +{ + /// + /// WebSocketId + /// + public long? WebsocketId { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/ZhonTai.Admin.Contracts.csproj b/src/modules/admin/ZhonTai.Admin.Contracts/ZhonTai.Admin.Contracts.csproj new file mode 100644 index 0000000..c18ec9f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Contracts/ZhonTai.Admin.Contracts.csproj @@ -0,0 +1,29 @@ + + + + 中台Admin权限管理契约库 + false + + + + 1701;1702;1591;8632;RF001; + + + + + PreserveNewest + + + + + + + + + + + + + + + diff --git a/src/modules/admin/ZhonTai.Admin.Contracts/key.snk b/src/modules/admin/ZhonTai.Admin.Contracts/key.snk new file mode 100644 index 0000000..28444d9 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Contracts/key.snk differ diff --git a/src/modules/admin/ZhonTai.Admin.Core/Aop/AopHelper.cs b/src/modules/admin/ZhonTai.Admin.Core/Aop/AopHelper.cs new file mode 100644 index 0000000..c067c73 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Aop/AopHelper.cs @@ -0,0 +1,34 @@ +using Castle.DynamicProxy; +using System.Reflection; + +namespace ZhonTai.Admin.Core.Aop; + +public class AopHelper +{ + public static async Task ExecuteGenericMethod(Task returnValue, Action callBackAction, Action exceptionAction, Action finallyAction) + { + try + { + var result = await returnValue; + callBackAction?.Invoke(result); + return result; + } + catch (Exception ex) + { + exceptionAction?.Invoke(ex); + return default; + } + finally + { + finallyAction?.Invoke(); + } + } + + public static object CallGenericMethod(IInvocation invocation, Action callBackAction, Action exceptionAction, Action finallyAction) + { + return typeof(AopHelper) + .GetMethod("ExecuteGenericMethod", BindingFlags.Public | BindingFlags.Static) + .MakeGenericMethod(invocation.Method.ReturnType.GenericTypeArguments[0]) + .Invoke(null, new object[] { invocation.ReturnValue, callBackAction, exceptionAction, finallyAction }); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/AppInfo.cs b/src/modules/admin/ZhonTai.Admin.Core/AppInfo.cs new file mode 100644 index 0000000..30141d4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/AppInfo.cs @@ -0,0 +1,260 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyModel; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Options; +using NLog; +using NLog.Web; +using System.Reflection; +using System.Runtime.Loader; +using ZhonTai.Admin.Core.Auth; + +namespace ZhonTai.Admin.Core; + +/// +/// 应用全局信息 +/// +public static class AppInfo +{ + static AppInfo() + { + + } + + private static bool _isRun; + + /// + /// 应用是否运行 + /// + public static bool IsRun + { + get => _isRun; + set => _isRun = value; + } + + /// + /// 服务提供程序 + /// + public static IServiceProvider ServiceProvider => IsRun ? AppInfoBase.ServiceProvider : null; + + /// + /// Web主机环境 + /// + public static IWebHostEnvironment WebHostEnvironment => AppInfoBase.WebHostEnvironment; + + /// + /// 泛型主机环境 + /// + public static IHostEnvironment HostEnvironment => AppInfoBase.HostEnvironment; + + /// + /// 配置 + /// + public static IConfiguration Configuration => AppInfoBase.Configuration; + + /// + /// 请求上下文 + /// + public static HttpContext HttpContext => ServiceProvider?.GetService()?.HttpContext; + + /// + /// 用户 + /// + public static IUser User => HttpContext == null ? null : ServiceProvider?.GetService(); + + /// + /// 日志 + /// + public static Logger Log => LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger(); + + static readonly AsyncLocal _asyncLocal = new(); + + /// + /// 数据权限接口路径 + /// + public static string CurrentDataPermissionApiPath + { + get => _asyncLocal.Value; + set => _asyncLocal.Value = value; + } + + /// + /// 模块信息 + /// + public static HostInfo HostInfo => AppInfoBase.HostInfo; + + #region private + + private static IEnumerable GetTypes(Assembly ass) + { + Type[] source = Array.Empty(); + try + { + source = ass.GetTypes(); + } + catch (Exception e) + { + Log.Error(e, "GetTypes Exception:{msg}", e.Message); + Console.WriteLine($@"Error load `{ass.FullName}` assembly."); + } + + return source.Where(u => u.IsPublic); + } + + private static IList GetAllAssemblies() + { + var list = new List(); + var deps = DependencyContext.Default; + var libs = deps.CompileLibraries.Where(lib => !lib.Serviceable && lib.Type != "package"); + foreach (var lib in libs) + { + try + { + var assembly = AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(lib.Name)); + list.Add(assembly); + } + catch (Exception e) + { + Log.Error(e, "GetAllAssemblies Exception:{msg}", e.Message); + } + } + return list; + } + #endregion + + #region Service + /// + /// 获得服务提供程序 + /// + /// + /// + /// + /// + public static IServiceProvider GetServiceProvider(Type serviceType, bool isBuild = false) + { + if (HostEnvironment == null || ServiceProvider != null && + AppInfoBase.Services + .Where(u => u.ServiceType == (serviceType.IsGenericType ? serviceType.GetGenericTypeDefinition() : serviceType)) + .Any(u => u.Lifetime == ServiceLifetime.Singleton)) + return ServiceProvider; + HttpContext httpContext = HttpContext; + + if (httpContext?.RequestServices != null) + return httpContext.RequestServices; + + if (ServiceProvider != null) + { + IServiceScope scope = ServiceProvider.CreateScope(); + return scope.ServiceProvider; + } + + if (isBuild) + { + throw new ApplicationException("The current is not available and must wait until the WebApplication Build is completed."); + } + + var serviceProvider = AppInfoBase.Services.BuildServiceProvider(); + + return serviceProvider; + } + + /// + /// 获得请求生存周期的服务 + /// + /// + /// + /// + public static TService GetService(bool isBuild = true) where TService : class => + GetService(typeof(TService), null, isBuild) as TService; + + /// + /// 获得请求生存周期的服务 + /// + /// + /// + /// + /// + public static TService GetService(IServiceProvider serviceProvider, bool isBuild = true) where TService : class => + GetService(typeof(TService), serviceProvider, isBuild) as TService; + + /// + /// 获得服务 + /// + /// + /// + /// + /// + public static object GetService(Type type, IServiceProvider serviceProvider = null, bool isBuild = true) => + (serviceProvider ?? GetServiceProvider(type, isBuild)).GetService(type); + + /// + /// 获得服务 + /// + /// + /// + /// + public static TService GetRequiredService(bool isBuild = true) where TService : class => + GetRequiredService(typeof(TService), null, isBuild) as TService; + + /// + /// 获取服务 + /// + /// + /// + /// + /// + public static TService GetRequiredService(IServiceProvider serviceProvider, bool isBuild = true) where TService : class => + GetRequiredService(typeof(TService), serviceProvider, isBuild) as TService; + + /// + /// 获得服务 + /// + /// + /// + /// + /// + public static object GetRequiredService(Type type, IServiceProvider serviceProvider = null, bool isBuild = true) => + (serviceProvider ?? GetServiceProvider(type, isBuild)).GetRequiredService(type); + + #endregion + + #region Options + /// + /// 获得选项 + /// + /// + /// + /// + public static TOptions GetOptions(string path) where TOptions : class, new() => + Configuration.GetSection(path).Get(); + + /// + /// 获得选项 + /// + /// + /// + /// + public static TOptions GetOptions(IServiceProvider serviceProvider = null) where TOptions : class, new() => + GetService>(serviceProvider ?? ServiceProvider, false)?.Value; + + /// + /// 获得选项 + /// + /// + /// + /// + public static TOptions GetOptionsMonitor(IServiceProvider serviceProvider = null) where TOptions : class, new() => + GetService>(serviceProvider ?? ServiceProvider, false)?.CurrentValue; + + /// + /// 获得选项 + /// + /// + /// + /// + public static TOptions GetOptionsSnapshot(IServiceProvider serviceProvider = null) where TOptions : class, new() => + GetService>(serviceProvider, false)?.Value; + #endregion +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/AppInfoBase.cs b/src/modules/admin/ZhonTai.Admin.Core/AppInfoBase.cs new file mode 100644 index 0000000..db2025d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/AppInfoBase.cs @@ -0,0 +1,40 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using System.Reflection; + +namespace ZhonTai.Admin.Core; + +/// +/// 应用基础信息 +/// +internal static class AppInfoBase +{ + internal static IServiceCollection Services; + + internal static IServiceProvider ServiceProvider; + + internal static IWebHostEnvironment WebHostEnvironment; + + internal static IHostEnvironment HostEnvironment; + + internal static IConfiguration Configuration; + + internal static HostInfo HostInfo; + + internal static void ConfigureApplication(this WebApplicationBuilder webApplicationBuilder, Assembly assembly) + { + HostEnvironment = webApplicationBuilder.Environment; + WebHostEnvironment = webApplicationBuilder.Environment; + Services = webApplicationBuilder.Services; + Configuration = webApplicationBuilder.Configuration; + HostInfo = HostInfo.CreateInstance(assembly); + } + + internal static void ConfigureApplication(this WebApplication app) + { + ServiceProvider = app.Services; + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/AppSettings.cs b/src/modules/admin/ZhonTai.Admin.Core/AppSettings.cs new file mode 100644 index 0000000..2bd2be1 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/AppSettings.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Core; + +/// +/// 应用配置 +/// +public class AppSettings +{ + /// + /// 使用配置中心 + /// + public bool UseConfigCenter { get; set; } = false; + + /// + /// 配置中心路径 + /// + public string ConfigCenterPath { get; set; } = "ConfigCenter"; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/AdminTransactionAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/AdminTransactionAttribute.cs new file mode 100644 index 0000000..a39f74a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/AdminTransactionAttribute.cs @@ -0,0 +1,14 @@ +using ZhonTai.Admin.Core.Consts; + +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 启用权限库事务 +/// +[AttributeUsage(AttributeTargets.Method, Inherited = true)] +public class AdminTransactionAttribute : TransactionAttribute +{ + public AdminTransactionAttribute():base(DbKeys.AppDb) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/ApiAccessAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ApiAccessAttribute.cs new file mode 100644 index 0000000..b4cd7a5 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ApiAccessAttribute.cs @@ -0,0 +1,27 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 接口访问 +/// +[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] +public class ApiAccessAttribute : Attribute +{ + /// + /// 默认 false, 满足任意一个可访问。若设置 true 全部满足可访问 + /// + public bool All { get; set; } = false; + + /// + /// 权限点 + /// + public string[] Codes { get; set; } + + /// + /// + /// + /// 权限点 + public ApiAccessAttribute(params string[] codes) + { + Codes = codes; + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/ApiGroupAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ApiGroupAttribute.cs new file mode 100644 index 0000000..c61e695 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ApiGroupAttribute.cs @@ -0,0 +1,23 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 接口分组 +/// +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true)] +public class ApiGroupAttribute : Attribute +{ + /// + /// 是否不分组 + /// + public bool NonGroup { get; set; } + + /// + /// 分组名称列表 + /// + public string[] GroupNames { get; set; } + + public ApiGroupAttribute(params string[] groupNames) + { + GroupNames = groupNames; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/HttpClientContractAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/HttpClientContractAttribute.cs new file mode 100644 index 0000000..339424a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/HttpClientContractAttribute.cs @@ -0,0 +1,18 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// Http接口客户端契约 +/// +[AttributeUsage(AttributeTargets.Interface, Inherited = false, AllowMultiple = false)] +public sealed class HttpClientContractAttribute: Attribute +{ + /// + /// 模块名 + /// + public string ModuleName { get; set; } + + public HttpClientContractAttribute(string moduleName) + { + ModuleName = moduleName; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/InjectScopedAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/InjectScopedAttribute.cs new file mode 100644 index 0000000..5b04ed3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/InjectScopedAttribute.cs @@ -0,0 +1,9 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 作用域注入 +/// +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property)] +public class InjectScopedAttribute : Attribute +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/InjectSingletonAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/InjectSingletonAttribute.cs new file mode 100644 index 0000000..9a35920 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/InjectSingletonAttribute.cs @@ -0,0 +1,9 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 单例注入 +/// +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property)] +public class InjectSingletonAttribute : Attribute +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/InjectTransientAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/InjectTransientAttribute.cs new file mode 100644 index 0000000..528eeb8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/InjectTransientAttribute.cs @@ -0,0 +1,9 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 瞬时注入 +/// +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property)] +public class InjectTransientAttribute : Attribute +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/LoginAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/LoginAttribute.cs new file mode 100644 index 0000000..a584726 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/LoginAttribute.cs @@ -0,0 +1,9 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 启用登录 +/// +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] +public class LoginAttribute : Attribute +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/NoOeprationLogAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/NoOeprationLogAttribute.cs new file mode 100644 index 0000000..a399696 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/NoOeprationLogAttribute.cs @@ -0,0 +1,9 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 禁用操作日志 +/// +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] +public class NoOperationLogAttribute : Attribute +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/NonRegisterIOCAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/NonRegisterIOCAttribute.cs new file mode 100644 index 0000000..f4ddac1 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/NonRegisterIOCAttribute.cs @@ -0,0 +1,9 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 不注册到第三方IOC容器 +/// +[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] +public class NonRegisterIOCAttribute : Attribute +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/NotGenAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/NotGenAttribute.cs new file mode 100644 index 0000000..c4be60b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/NotGenAttribute.cs @@ -0,0 +1,9 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 不生成特性 +/// +[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)] +public class NotGenAttribute : Attribute +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/OrderGuidAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/OrderGuidAttribute.cs new file mode 100644 index 0000000..1dba944 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/OrderGuidAttribute.cs @@ -0,0 +1,10 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 排序Guid特性 +/// +[AttributeUsage(AttributeTargets.Property)] +public class OrderGuidAttribute : Attribute +{ + public bool Enable { get; set; } = true; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/ScanCacheKeysAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ScanCacheKeysAttribute.cs new file mode 100644 index 0000000..4aea393 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ScanCacheKeysAttribute.cs @@ -0,0 +1,9 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 扫描缓存Key特性 +/// +[AttributeUsage(AttributeTargets.Class)] +public class ScanCacheKeysAttribute : Attribute +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/ScanTaskNamesAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ScanTaskNamesAttribute.cs new file mode 100644 index 0000000..4393c2f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ScanTaskNamesAttribute.cs @@ -0,0 +1,9 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 扫描任务名称特性 +/// +[AttributeUsage(AttributeTargets.Class)] +public class ScanTaskNamesAttribute : Attribute +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/SchemaIdAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/SchemaIdAttribute.cs new file mode 100644 index 0000000..4efe777 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/SchemaIdAttribute.cs @@ -0,0 +1,32 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// SchemaId特性 +/// +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true)] +public class SchemaIdAttribute : Attribute +{ + /// + /// 前缀 + /// + public string Prefix { get; set; } + + /// + /// 后缀 + /// + public string Suffix { get; set; } + + /// + /// SchemaId + /// + public string SchemaId { get; set; } + + public SchemaIdAttribute() + { + } + + public SchemaIdAttribute(string schemaId) + { + SchemaId = schemaId; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/ServerTimeAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ServerTimeAttribute.cs new file mode 100644 index 0000000..71c0757 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ServerTimeAttribute.cs @@ -0,0 +1,18 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 服务端时间 +/// +[AttributeUsage(AttributeTargets.Property)] +public class ServerTimeAttribute : Attribute +{ + /// + /// 更新设置该字段服务器端时间,默认值false,指定为true更新时设置 + /// + public bool CanUpdate { get; set; } = false; + + /// + /// 插入设置该字段服务器端时间,默认值true,指定为false插入时不设置 + /// + public bool CanInsert { get; set; } = true; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/SnowflakeAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/SnowflakeAttribute.cs new file mode 100644 index 0000000..bcc290e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/SnowflakeAttribute.cs @@ -0,0 +1,10 @@ +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 雪花算法特性 +/// +[AttributeUsage(AttributeTargets.Property)] +public class SnowflakeAttribute : Attribute +{ + public bool Enable { get; set; } = true; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/TransactionAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/TransactionAttribute.cs new file mode 100644 index 0000000..ce9ee45 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/TransactionAttribute.cs @@ -0,0 +1,35 @@ +using FreeSql; +using System.Data; + +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 启用事务 +/// +[AttributeUsage(AttributeTargets.Method, Inherited = true)] +public class TransactionAttribute : Attribute +{ + /// + /// 事务传播方式 + /// + public Propagation Propagation { get; set; } = Propagation.Required; + + /// + /// 事务隔离级别 + /// + public IsolationLevel IsolationLevel { get; set; } + + /// + /// 数据库注册键 + /// + public string DbKey { get; set; } + + public TransactionAttribute() + { + } + + public TransactionAttribute(string dbKey) + { + DbKey = dbKey; + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/ValidateInputAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ValidateInputAttribute.cs new file mode 100644 index 0000000..16bfef3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ValidateInputAttribute.cs @@ -0,0 +1,42 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.AspNetCore.Mvc.ModelBinding; +using Microsoft.Extensions.Logging; +using System.Text; +using ZhonTai.Admin.Core.Dto; + +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 输入模型验证 +/// +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] +public class ValidateInputAttribute : ActionFilterAttribute +{ + public override void OnResultExecuting(ResultExecutingContext context) + { + if (!context.ModelState.IsValid) + { + try + { + var logger = (ILogger)context.HttpContext.RequestServices.GetService(typeof(ILogger)); + var errors = context.ModelState + .Where(m => m.Value.ValidationState == ModelValidationState.Invalid) + .Select(m => + { + var sb = new StringBuilder(); + sb.AppendFormat("{0}:", m.Key); + sb.Append(m.Value.Errors.Select(n => n.ErrorMessage).Aggregate((x, y) => x + ";" + y)); + return sb.ToString(); + }) + .Aggregate((x, y) => x + "|" + y); + context.Result = new JsonResult(ResultOutput.NotOk(errors)); + } + catch + { + context.Result = new StatusCodeResult(StatusCodes.Status500InternalServerError); + } + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/ValidatePermissionAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ValidatePermissionAttribute.cs new file mode 100644 index 0000000..77f6008 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ValidatePermissionAttribute.cs @@ -0,0 +1,78 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.Extensions.DependencyInjection; +using ZhonTai.Admin.Core.Auth; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Handlers; + +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 启用权限验证 +/// +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] +public class ValidatePermissionAttribute : AuthorizeAttribute, IAuthorizationFilter, IAsyncAuthorizationFilter +{ + private async Task PermissionAuthorization(AuthorizationFilterContext context) + { + //排除匿名访问 + if (context.ActionDescriptor.EndpointMetadata.Any(m => m.GetType() == typeof(AllowAnonymousAttribute))) + return; + + var serviceProvider = context.HttpContext.RequestServices; + //登录验证 + var user = serviceProvider.GetService(); + if (user == null || !(user?.Id > 0)) + { + context.Result = new ChallengeResult(); + return; + } + + //排除登录接口 + if (context.ActionDescriptor.EndpointMetadata.Any(m => m.GetType() == typeof(LoginAttribute))) + return; + + if (user.PlatformAdmin) + { + return; + } + + //自定义权限验证 + var customPermissionHandler = serviceProvider.GetService(); + if (customPermissionHandler != null) + { + var isValid = await customPermissionHandler.ValidateAsync(context); + if (!isValid) + { + return; + } + } + + //权限验证 + if (serviceProvider.GetRequiredService().Validate.Permission) + { + var apiAccess = context.HttpContext.GetEndpoint()?.Metadata?.GetMetadata(); + + var httpMethod = context.HttpContext.Request.Method; + var api = context.ActionDescriptor.AttributeRouteInfo.Template; + var permissionHandler = serviceProvider.GetService(); + var isValid = await permissionHandler.ValidateAsync(api, httpMethod, apiAccess); + if (!isValid) + { + context.Result = new ForbidResult(); + } + } + } + + public async void OnAuthorization(AuthorizationFilterContext context) + { + await PermissionAuthorization(context); + } + + public async Task OnAuthorizationAsync(AuthorizationFilterContext context) + { + await PermissionAuthorization(context); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/ValidateRequiredAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ValidateRequiredAttribute.cs new file mode 100644 index 0000000..88c0daa --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/ValidateRequiredAttribute.cs @@ -0,0 +1,33 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZhonTai.Admin.Core.Validators; + +/// +/// 指定属性、字段、参数必填 +/// +[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter)] +public class ValidateRequiredAttribute : ValidationAttribute +{ + public ValidateRequiredAttribute() : base("{0} 为必填项") { } + + public ValidateRequiredAttribute(string errorMessage) : base(errorMessage) { } + + public override bool IsValid(object value) + { + if (value is null) + { + return false; + } + + var valid = value switch + { + Guid guid => guid != Guid.Empty, + long longValue => longValue > 0, + int intValue => intValue > 0, + string strValue => strValue.NotNull(), + _ => true + }; + + return valid; + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Attributes/VersionRouteAttribute.cs b/src/modules/admin/ZhonTai.Admin.Core/Attributes/VersionRouteAttribute.cs new file mode 100644 index 0000000..17597e3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Attributes/VersionRouteAttribute.cs @@ -0,0 +1,20 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.ApiExplorer; +using ZhonTai.Admin.Core.Enums; + +namespace ZhonTai.Admin.Core.Attributes; + +/// +/// 自定义路由 /api/{version}/[area]/[controler]/[action] +/// +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] +public class VersionRouteAttribute : RouteAttribute, IApiDescriptionGroupNameProvider +{ + public string GroupName { get; set; } + + public VersionRouteAttribute(ApiVersion version = ApiVersion.V2, string action = "[action]") + : base($"/api/{version}/[area]/[controller]/{action}") + { + GroupName = version.ToString(); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Auth/ClaimAttributes.cs b/src/modules/admin/ZhonTai.Admin.Core/Auth/ClaimAttributes.cs new file mode 100644 index 0000000..4231565 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Auth/ClaimAttributes.cs @@ -0,0 +1,47 @@ +namespace ZhonTai.Admin.Core.Auth; + +/// +/// Claim属性 +/// +public static class ClaimAttributes +{ + /// + /// 用户Id + /// + public const string UserId = "uid"; + + /// + /// 用户名 + /// + public const string UserName = "un"; + + /// + /// 姓名 + /// + public const string Name = "na"; + + /// + /// 刷新有效期 + /// + public const string RefreshExpires = "re"; + + /// + /// 用户类型 + /// + public const string UserType = "ut"; + + /// + /// 租户Id + /// + public const string TenantId = "ti"; + + /// + /// 租户类型 + /// + public const string TenantType = "tt"; + + /// + /// 数据库注册键 + /// + public const string DbKey = "dk"; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Auth/IUser.cs b/src/modules/admin/ZhonTai.Admin.Core/Auth/IUser.cs new file mode 100644 index 0000000..29291e0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Auth/IUser.cs @@ -0,0 +1,87 @@ +using ZhonTai.Admin.Domain.Tenant; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.User.Dto; +using ZhonTai.Admin.Services.User.Dto; + +namespace ZhonTai.Admin.Core.Auth; + +/// +/// 用户信息接口 +/// +public interface IUser +{ + /// + /// 用户Id + /// + long Id { get; } + + /// + /// 用户名 + /// + string UserName { get; } + + /// + /// 姓名 + /// + string Name { get; } + + /// + /// 用户类型 + /// + UserType Type { get; } + + /// + /// 默认用户 + /// + bool DefaultUser { get; } + + /// + /// 平台管理员 + /// + bool PlatformAdmin { get; } + + /// + /// 租户管理员 + /// + bool TenantAdmin { get; } + + /// + /// 租户Id + /// + long? TenantId { get; } + + /// + /// 租户类型 + /// + TenantType? TenantType { get; } + + /// + /// 数据库注册键 + /// + string DbKey { get; } + + /// + /// 数据权限 + /// + DataPermissionOutput DataPermission { get; } + + /// + /// 用户权限 + /// + UserGetPermissionOutput UserPermission { get; } + + /// + /// 检查用户是否拥有某个权限点 + /// + /// 权限点编码 + /// + bool HasPermission(string permissionCode); + + /// + /// 检查用户是否拥有这些权限点 + /// + /// 权限点编码列表 + /// 是否全部满足 + /// + bool HasPermissions(string[] permissionCodes, bool all = false); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Auth/IUserToken.cs b/src/modules/admin/ZhonTai.Admin.Core/Auth/IUserToken.cs new file mode 100644 index 0000000..2d22b64 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Auth/IUserToken.cs @@ -0,0 +1,11 @@ +using System.IdentityModel.Tokens.Jwt; +using System.Security.Claims; + +namespace ZhonTai.Admin.Core.Auth; + +public interface IUserToken +{ + string Create(Claim[] claims); + + JwtSecurityToken Decode(string jwtToken); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Auth/TokenInfo.cs b/src/modules/admin/ZhonTai.Admin.Core/Auth/TokenInfo.cs new file mode 100644 index 0000000..8a04f02 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Auth/TokenInfo.cs @@ -0,0 +1,51 @@ +namespace ZhonTai.Admin.Core.Auth; + +/// +/// 令牌信息 +/// +public class TokenInfo +{ + private string _accessToken; + + /// + /// 访问令牌 + /// + public string AccessToken + { + get => _accessToken; + set + { + _accessToken = value; + } + } + + /// + /// 访问令牌的过期时间 + /// + public DateTime AccessTokenExpiresAt { get; set; } + + /// + /// 访问令牌的生命周期(以秒为单位) + /// + public int AccessTokenLifeTime { get; set; } + + /// + /// 刷新令牌 + /// + public string RefreshToken { get; set; } + + /// + /// 刷新令牌的过期时间 + /// + public DateTime RefreshTokenExpiresAt { get; set; } + + /// + /// 刷新令牌的生命周期(以秒为单位) + /// + public int RefreshTokenLifeTime { get; set; } + + /// + /// 创建令牌信息时间戳 + /// + public long Timestamp { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Auth/User.cs b/src/modules/admin/ZhonTai.Admin.Core/Auth/User.cs new file mode 100644 index 0000000..189d998 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Auth/User.cs @@ -0,0 +1,258 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; +using ZhonTai.Common.Extensions; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Tools.Cache; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.Tenant; +using ZhonTai.Admin.Domain.User.Dto; +using ZhonTai.Admin.Services.User.Dto; + +namespace ZhonTai.Admin.Core.Auth; + +/// +/// 用户信息 +/// +public class User : IUser +{ + private readonly IHttpContextAccessor _accessor; + + public User(IHttpContextAccessor accessor) + { + _accessor = accessor; + } + + /// + /// 用户Id + /// + public virtual long Id + { + get + { + var id = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.UserId); + if (id != null && id.Value.NotNull()) + { + return id.Value.ToLong(); + } + return 0; + } + } + + /// + /// 用户名 + /// + public string UserName + { + get + { + var name = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.UserName); + + if (name != null && name.Value.NotNull()) + { + return name.Value; + } + + return ""; + } + } + + /// + /// 姓名 + /// + public string Name + { + get + { + var name = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.Name); + + if (name != null && name.Value.NotNull()) + { + return name.Value; + } + + return ""; + } + } + + /// + /// 租户Id + /// + public virtual long? TenantId + { + get + { + var tenantId = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.TenantId); + if (tenantId != null && tenantId.Value.NotNull()) + { + return tenantId.Value.ToLong(); + } + return null; + } + } + + /// + /// 用户类型 + /// + public virtual UserType Type + { + get + { + var userType = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.UserType); + if (userType != null && userType.Value.NotNull()) + { + return (UserType)Enum.Parse(typeof(UserType), userType.Value, true); + } + return UserType.DefaultUser; + } + } + + /// + /// 默认用户 + /// + public virtual bool DefaultUser + { + get + { + return Type == UserType.DefaultUser; + } + } + + + /// + /// 平台管理员 + /// + public virtual bool PlatformAdmin + { + get + { + return Type == UserType.PlatformAdmin; + } + } + + /// + /// 租户管理员 + /// + public virtual bool TenantAdmin + { + get + { + return Type == UserType.TenantAdmin; + } + } + + /// + /// 租户类型 + /// + public virtual TenantType? TenantType + { + get + { + var tenantType = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.TenantType); + if (tenantType != null && tenantType.Value.NotNull()) + { + return (TenantType)Enum.Parse(typeof(TenantType), tenantType.Value, true); + } + return null; + } + } + + /// + /// 数据库注册键 + /// + public virtual string DbKey + { + get + { + var dbKey = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.DbKey); + if (dbKey != null && dbKey.Value.NotNull()) + { + return dbKey.Value; + } + return ""; + } + } + + /// + /// 获得数据权限 + /// + /// + DataPermissionOutput GetDataPermission() + { + var cache = _accessor?.HttpContext?.RequestServices.GetRequiredService(); + if (cache == null) + { + return null; + } + else + { + return cache.Get(CacheKeys.GetDataPermissionKey(Id)); + } + } + + /// + /// 数据权限 + /// + public virtual DataPermissionOutput DataPermission => GetDataPermission(); + + /// + /// 获得用户权限 + /// + /// + UserGetPermissionOutput GetUserPermission() + { + var cache = _accessor?.HttpContext?.RequestServices.GetRequiredService(); + if (cache == null) + { + return null; + } + else + { + return cache.Get(CacheKeys.GetUserPermissionKey(Id)); + } + } + + /// + /// 用户权限 + /// + public virtual UserGetPermissionOutput UserPermission => GetUserPermission(); + + /// + /// 检查用户是否拥有某个权限点 + /// + /// 权限点编码 + /// + public virtual bool HasPermission(string permissionCode) + { + ArgumentNullException.ThrowIfNull(permissionCode, nameof(permissionCode)); + + return HasPermissions([permissionCode]); + } + + /// + /// 检查用户是否拥有这些权限点 + /// + /// 权限点编码列表 + /// 是否全部满足 + /// + public virtual bool HasPermissions(string[] permissionCodes, bool all = false) + { + ArgumentNullException.ThrowIfNull(permissionCodes, nameof(permissionCodes)); + + if (PlatformAdmin) + { + return true; + } + + var valid = false; + if (all) + { + valid = UserPermission.Codes.All(a => permissionCodes.Contains(a)); + } + else + { + valid = UserPermission.Codes.Any(a => permissionCodes.Contains(a)); + } + + return valid; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Auth/UserToken.cs b/src/modules/admin/ZhonTai.Admin.Core/Auth/UserToken.cs new file mode 100644 index 0000000..dfc5231 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Auth/UserToken.cs @@ -0,0 +1,47 @@ +using Microsoft.IdentityModel.Tokens; +using System.IdentityModel.Tokens.Jwt; +using System.Security.Claims; +using System.Text; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Admin.Core.Auth; + +[InjectSingleton] +public class UserToken : IUserToken +{ + private readonly JwtConfig _jwtConfig; + + public UserToken(JwtConfig jwtConfig) + { + _jwtConfig = jwtConfig; + } + + public string Create(Claim[] claims) + { + var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtConfig.SecurityKey)); + var signingCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); + var timestamp = DateTime.Now.AddMinutes(_jwtConfig.Expires + _jwtConfig.RefreshExpires).ToTimestamp().ToString(); + claims = claims.Append(new Claim(ClaimAttributes.RefreshExpires, timestamp)).ToArray(); + + var token = new JwtSecurityToken( + issuer: _jwtConfig.Issuer, + audience: _jwtConfig.Audience, + claims: claims, + notBefore: DateTime.Now, + expires: DateTime.Now.AddMinutes(_jwtConfig.Expires), + signingCredentials: signingCredentials + ); + return new JwtSecurityTokenHandler().WriteToken(token); + } + + public JwtSecurityToken Decode(string jwtToken) + { + var jwtSecurityTokenHandler = new JwtSecurityTokenHandler(); + + var jwtSecurityToken = jwtSecurityTokenHandler.ReadJwtToken(jwtToken); + + return jwtSecurityToken; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Base/BaseService.cs b/src/modules/admin/ZhonTai.Admin.Core/Base/BaseService.cs new file mode 100644 index 0000000..966f5b4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Base/BaseService.cs @@ -0,0 +1,87 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using MapsterMapper; +using ZhonTai.Admin.Core.Auth; +using ZhonTai.Admin.Tools.Cache; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Admin.Services; + +public abstract class BaseService: IBaseService +{ + protected readonly object ServiceProviderLock = new object(); + protected IDictionary CachedServices = new Dictionary(); + private ICacheTool _cache; + private ILoggerFactory _loggerFactory; + private IMapper _mapper; + private IUser _user; + + /// + /// 缓存 + /// + public ICacheTool Cache => LazyGetRequiredService(ref _cache); + + /// + /// 日志工厂 + /// + public ILoggerFactory LoggerFactory => LazyGetRequiredService(ref _loggerFactory); + + /// + /// 映射 + /// + public IMapper Mapper => LazyGetRequiredService(ref _mapper); + + public IServiceProvider ServiceProvider { get; set; } + + /// + /// 用户信息 + /// + public IUser User => LazyGetRequiredService(ref _user); + + /// + /// 日志 + /// + protected ILogger Logger => _lazyLogger.Value; + + private Lazy _lazyLogger => new Lazy(() => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance, true); + + protected TService LazyGetRequiredService(ref TService reference) + { + if (reference == null) + { + lock (ServiceProviderLock) + { + if (reference == null) + { + reference = ServiceProvider.GetRequiredService(); + } + } + } + + return reference; + } + + /// + /// 获得懒加载服务 + /// + /// 服务接口 + /// + [NonAction] + public virtual TService LazyGetRequiredService() + { + return (TService)LazyGetRequiredService(typeof(TService)); + } + + /// + /// 根据服务类型获得懒加载服务 + /// + /// 服务类型 + /// + [NonAction] + public virtual object LazyGetRequiredService(Type serviceType) + { + return CachedServices.GetOrAdd(serviceType, () => ServiceProvider.GetRequiredService(serviceType)); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Base/IBaseService.cs b/src/modules/admin/ZhonTai.Admin.Core/Base/IBaseService.cs new file mode 100644 index 0000000..150a3c6 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Base/IBaseService.cs @@ -0,0 +1,6 @@ +namespace ZhonTai.Admin.Services; + +public interface IBaseService +{ + +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/BaseController.cs b/src/modules/admin/ZhonTai.Admin.Core/BaseController.cs new file mode 100644 index 0000000..a3acc65 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/BaseController.cs @@ -0,0 +1,15 @@ +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Core; + +/// +/// 基础控制器 +/// +[Route("api/[area]/[controller]/[action]")] +[ApiController] +[ValidatePermission] +[ValidateInput] +public abstract class BaseController : ControllerBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Captcha/ISlideCaptcha.cs b/src/modules/admin/ZhonTai.Admin.Core/Captcha/ISlideCaptcha.cs new file mode 100644 index 0000000..b452b49 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Captcha/ISlideCaptcha.cs @@ -0,0 +1,17 @@ +using Lazy.SlideCaptcha.Core.Validator; +using Lazy.SlideCaptcha.Core; + +namespace ZhonTai.Admin.Core.Captcha +{ + public interface ISlideCaptcha + { + /// + /// 校验 + /// + /// 验证码id + /// 滑动轨迹 + /// 校验成功时是否移除缓存(用于多次验证) + /// + ValidateResult Validate(string captchaId, SlideTrack slideTrack, bool removeIfSuccess = true); + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Captcha/SlideCaptcha.cs b/src/modules/admin/ZhonTai.Admin.Core/Captcha/SlideCaptcha.cs new file mode 100644 index 0000000..246c19d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Captcha/SlideCaptcha.cs @@ -0,0 +1,33 @@ +using Lazy.SlideCaptcha.Core; +using Lazy.SlideCaptcha.Core.Storage; +using Lazy.SlideCaptcha.Core.Validator; + +namespace ZhonTai.Admin.Core.Captcha +{ + public class SlideCaptcha: ISlideCaptcha + { + private IValidator _validator; + private IStorage _storage; + + public SlideCaptcha(IValidator validator, IStorage storage) + { + _storage = storage; + _validator = validator; + } + + public ValidateResult Validate(string captchaId, SlideTrack slideTrack, bool removeIfSuccess = true) + { + + var captchaValidateData = _storage.Get(captchaId); + if (captchaValidateData == null) return ValidateResult.Timeout(); + var success = _validator.Validate(slideTrack, captchaValidateData); + if (!success || (success && removeIfSuccess)) + { + _storage.Remove(captchaId); + } + + return success ? ValidateResult.Success() : ValidateResult.Fail(); + + } + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Configs/AppConfig.cs b/src/modules/admin/ZhonTai.Admin.Core/Configs/AppConfig.cs new file mode 100644 index 0000000..1e6efc8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Configs/AppConfig.cs @@ -0,0 +1,516 @@ +using System.Text.RegularExpressions; +using Yitter.IdGenerator; + +namespace ZhonTai.Admin.Core.Configs; + +/// +/// 应用配置 +/// +public class AppConfig +{ + public AppType AppType { get; set; } = AppType.Controllers; + + /// + /// Api地址 + /// + public string[] Urls { get; set; } + + /// + /// 跨域地址 + /// + public string[] CorUrls { get; set; } + + private string[] _assemblyNames; + + /// + /// 程序集名称 + /// + public string[] AssemblyNames + { + get => _assemblyNames; + set + { + _assemblyNames = value; + + if (value.Contains("ZhonTai.Admin")) + { + if (!value.Contains("ZhonTai.Admin.Contracts")) + { + _assemblyNames = [.. _assemblyNames, "ZhonTai.Admin.Contracts"]; + } + } + + if (!value.Contains("ZhonTai.Admin.Core")) + { + _assemblyNames = [.. _assemblyNames, "ZhonTai.Admin.Core"]; + } + } + } + + private string[] _enumListAssemblyNames; + + /// + /// 枚举列表程序集名称 + /// + public string[] EnumListAssemblyNames + { + get => _enumListAssemblyNames; + set + { + _enumListAssemblyNames = value; + if (value.Contains("ZhonTai.Admin")) + { + if (!value.Contains("ZhonTai.Admin.Contracts")) + { + _enumListAssemblyNames = [.. _enumListAssemblyNames, "ZhonTai.Admin.Contracts"]; + } + + if (!value.Contains("ZhonTai.Admin.Core")) + { + _enumListAssemblyNames = [.. _enumListAssemblyNames, "ZhonTai.Admin.Core"]; + } + } + } + } + + /// + /// 租户类型 + /// + public bool Tenant { get; set; } = false; + + /// + /// 分布式事务唯一标识 + /// + public string DistributeKey { get; set; } + + /// + /// Swagger文档 + /// + public SwaggerConfig Swagger { get; set; } = new SwaggerConfig(); + + /// + /// 新版Api文档 + /// + public ApiUIConfig ApiUI { get; set; } = new ApiUIConfig(); + + /// + /// MiniProfiler性能分析器 + /// + public bool MiniProfiler { get; set; } = false; + + /// + /// 统一认证授权服务器 + /// + public IdentityServer IdentityServer { get; set; } = new IdentityServer(); + + /// + /// Aop配置 + /// + public AopConfig Aop { get; set; } = new AopConfig(); + + /// + /// 日志配置 + /// + public LogConfig Log { get; set; } = new LogConfig(); + + /// + /// 验证配置 + /// + public ValidateConfig Validate { get; set; } = new ValidateConfig(); + + /// + /// 限流 + /// + public bool RateLimit { get; set; } = false; + + /// + /// 验证码配置 + /// + public VarifyCodeConfig VarifyCode { get; set; } = new VarifyCodeConfig(); + + /// + /// 默认密码 + /// + public string DefaultPassword { get; set; } = "123asd"; + + /// + /// 动态Api配置 + /// + public DynamicApiConfig DynamicApi { get; set; } = new DynamicApiConfig(); + + /// + /// 实现标准标识密码哈希 + /// + public bool PasswordHasher { get; set; } = false; + + /// + /// 最大请求大小 + /// + [Obsolete("请使用 Kestrel: { MaxRequestBodySize: 104857600 }配置")] + public long? MaxRequestBodySize { get; set; } = 104857600; + + /// + /// Kestrel服务器 + /// + public KestrelConfig Kestrel { get; set; } = new KestrelConfig(); + + /// + /// 健康检查配置 + /// + public HealthChecksConfig HealthChecks { get; set; } = new HealthChecksConfig(); + + /// + /// 指定跨域访问时预检等待时间,以秒为单位,默认30分钟 + /// + public int PreflightMaxAge { get; set; } + + /// + /// 任务调度管理界面配置 + /// + public TaskSchedulerUIConfig TaskSchedulerUI { get; set; } = new TaskSchedulerUIConfig(); + + /// + /// Id生成器配置 + /// + public IdGeneratorConfig IdGenerator { get; set; } = new IdGeneratorConfig(); + + /// + /// 语言配置 + /// + public LangConfig Lang { get; set; } = new LangConfig(); + + /// + /// IP地址定位配置 + /// + public IP2RegionConfig IP2Region { get; set; } = new IP2RegionConfig(); +} + +/// +/// Kestrel服务器配置 +/// +public class KestrelConfig +{ + /// + /// HTTP连接保活最长时间,单位秒 + /// + public double KeepAliveTimeout { get; set; } = 130; + + /// + /// 发送请求头最长时间,单位秒 + /// + public double RequestHeadersTimeout { get; set; } = 30; + + /// + /// 最大请求大小,单位bytes + /// + public long? MaxRequestBodySize { get; set; } = 30000000; +} + +/// +/// 语言配置 +/// +public class LangConfig +{ + /// + /// 启用Json配置 + /// + public bool EnableJson { get; set; } = true; + + /// + /// 默认语言 + /// + public string DefaultLang { get; set; } = "zh"; + + /// + /// 语言列表 + /// + public string[] Langs { get; set; } + + /// + /// 语言请求解析列表 + /// + public string[] RequestCultureProviders { get; set; } +} + +/// +/// IP地址定位配置 +/// +public class IP2RegionConfig +{ + /// + /// 启用 + /// + public bool Enable { get; set; } = false; + + /// + /// 数据库路径 + /// + public string DbPath { get; set; } +} + +/// +/// Swagger配置 +/// +public class SwaggerConfig +{ + /// + /// 启用 + /// + public bool Enable { get; set; } = false; + + /// + /// 启用枚举架构过滤器 + /// + public bool EnableEnumSchemaFilter { get; set; } = true; + + /// + /// 启用接口排序文档过滤器 + /// + public bool EnableOrderTagsDocumentFilter { get; set; } = true; + + /// + /// 启用枚举属性名 + /// + public bool EnableJsonStringEnumConverter { get; set; } = false; + + /// + /// 启用SchemaId命名空间 + /// + public bool EnableSchemaIdNamespace { get; set; } = false; + + /// + /// 程序集列表 + /// + public string[] AssemblyNameList { get; set; } + + private string _RoutePrefix = "swagger"; + /// + /// 访问地址 + /// + public string RoutePrefix { get => Regex.Replace(_RoutePrefix, "^\\/+|\\/+$", ""); set => _RoutePrefix = value; } + + /// + /// 地址 + /// + public string Url { get; set; } + + /// + /// 项目列表 + /// + public List Projects { get; set; } + + /// + /// 启用自动同步 + /// + public bool EnableAutoSync { get; set; } +} + +/// +///新版Api文档配置 +/// +public class ApiUIConfig +{ + /// + /// 启用 + /// + public bool Enable { get; set; } = false; + + + private string _RoutePrefix=""; + /// + /// 访问地址 + /// + public string RoutePrefix { get => Regex.Replace(_RoutePrefix, "^\\/+|\\/+$", ""); set => _RoutePrefix = value; } + + public SwaggerFooterConfig Footer { get; set; } = new SwaggerFooterConfig(); +} + +/// +/// Swagger页脚配置 +/// +public class SwaggerFooterConfig +{ + /// + /// 启用 + /// + public bool Enable { get; set; } = false; + + /// + /// 内容 + /// + public string Content { get; set; } +} + +/// +/// 统一认证授权服务器配置 +/// +public class IdentityServer +{ + /// + /// 启用 + /// + public bool Enable { get; set; } = false; + + /// + /// 地址 + /// + public string Url { get; set; } = "https://localhost:5000"; + + /// + /// 启用Https + /// + public bool RequireHttpsMetadata { get; set; } = false; + + /// + /// 受众 + /// + public string Audience { get; set; } = "admin.server.api"; +} + +/// +/// Aop配置 +/// +public class AopConfig +{ + /// + /// 事务 + /// + public bool Transaction { get; set; } = true; +} + +/// +/// 日志配置 +/// +public class LogConfig +{ + /// + /// 操作日志 + /// + public bool Operation { get; set; } = true; +} + +/// +/// 验证配置 +/// +public class ValidateConfig +{ + /// + /// 登录 + /// + public bool Login { get; set; } = true; + + /// + /// 接口权限 + /// + public bool Permission { get; set; } = true; + + /// + /// 数据权限 + /// + public bool DataPermission { get; set; } = true; + + /// + /// 接口数据权限 + /// + public bool ApiDataPermission { get; set; } = false; +} + +/// +/// 验证码配置 +/// +public class VarifyCodeConfig +{ + /// + /// 启用 + /// + public bool Enable { get; set; } = true; + + /// + /// 操作日志 + /// + public string[] Fonts { get; set; }// = new[] { "Times New Roman", "Verdana", "Arial", "Gungsuh", "Impact" }; +} + +/// +/// 项目配置 +/// +public class ProjectConfig +{ + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 版本 + /// + public string Version { get; set; } + + /// + /// 描述 + /// + public string Description { get; set; } +} + +/// +/// 动态api配置 +/// +public class DynamicApiConfig +{ + /// + /// 结果格式化 + /// + public bool FormatResult { get; set; } = true; +} + +/// +/// 健康检查配置 +/// +public class HealthChecksConfig +{ + /// + /// 启用 + /// + public bool Enable { get; set; } = true; + + /// + /// 访问路径 + /// + public string Path { get; set; } = "/health"; +} + +/// +/// 任务调度管理界面 +/// +public class TaskSchedulerUIConfig +{ + /// + /// 启用 + /// + public bool Enable { get; set; } = false; + + /// + /// 访问路径 + /// + public string Path { get; set; } = "/task"; +} + +public class IdGeneratorConfig: IdGeneratorOptions +{ + public string CachePrefix { get; set; } = "zhontai:workerid:"; +} + +/// +/// 应用程序类型 +/// +public enum AppType +{ + Controllers, + ControllersWithViews, + MVC +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Configs/DbConfig.cs b/src/modules/admin/ZhonTai.Admin.Core/Configs/DbConfig.cs new file mode 100644 index 0000000..30a964d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Configs/DbConfig.cs @@ -0,0 +1,216 @@ +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Common.Helpers; +using DataType = FreeSql.DataType; + +namespace ZhonTai.Admin.Core.Configs; + +/// +/// 数据库配置 +/// +public class DbConfig +{ + /// + /// 数据库注册键 + /// + public string Key { get; set; } = DbKeys.AppDb; + + private string[] _assemblyNames; + + /// + /// 程序集名称 + /// + public string[] AssemblyNames + { + get => _assemblyNames; + set + { + var expandedNames = new List(); + if (value != null) + { + foreach (var name in value) + { + expandedNames.Add(name); + + if (!name.EndsWith(".Contracts")) + { + string contractsName = name + ".Contracts"; + if (AssemblyHelper.Exists(contractsName) && !expandedNames.Contains(contractsName)) + { + expandedNames.Add(contractsName); + } + } + } + } + + _assemblyNames = [.. expandedNames]; + } + } + + /// + /// 数据库类型 + /// + public DataType Type { get; set; } = DataType.Sqlite; + + /// + /// 数据库字符串 + /// + public string ConnectionString { get; set; } = "Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1"; + + /// + /// 指定程序集 + /// + public string ProviderType { get; set; } + + /// + /// 生成数据 + /// + public bool GenerateData { get; set; } = false; + + /// + /// 同步结构 + /// + public bool SyncStructure { get; set; } = false; + + /// + /// 同步结构脚本 + /// + public bool SyncStructureSql { get; set; } = false; + + private int _syncStructureEntityBatchSize = 1; + + /// + /// 同步结构批次实体数 + /// + public int SyncStructureEntityBatchSize + { + get => _syncStructureEntityBatchSize <= 1 ? 1 : _syncStructureEntityBatchSize; + set => _syncStructureEntityBatchSize = value; + } + + /// + /// 同步数据 + /// + public bool SyncData { get; set; } = false; + + /// + /// 同步数据监听Curd操作 + /// + public bool SyncDataCurd { get; set; } = false; + + /// + /// 同步更新数据 + /// + public bool SysUpdateData { get; set; } = false; + + /// + /// 同步数据地址 + /// + public string SyncDataPath { get; set; } = "InitData/Admin"; + + /// + /// 同步数据包含表列表 + /// + public string[] SyncDataIncludeTables { get; set; } + + /// + /// 同步数据排除表列表 + /// + public string[] SyncDataExcludeTables { get; set; } + + /// + /// 同步数据操作用户 + /// + public SyncDataUser SyncDataUser { get; set; } = new SyncDataUser { Id = 161223411986501, UserName = "admin", TenantId = 161223412138053 }; + + /// + /// 建库 + /// + public bool CreateDb { get; set; } = false; + + /// + /// 建库连接字符串 + /// + public string CreateDbConnectionString { get; set; } + + /// + /// 建库脚本 + /// + public string CreateDbSql { get; set; } + + /// + /// 建库脚本文件 + /// + public string CreateDbSqlFile { get; set; } = "Configs/createdbsql.txt"; + + /// + /// 监听所有操作 + /// + public bool MonitorCommand { get; set; } = false; + + /// + /// 监听Curd操作 + /// + public bool Curd { get; set; } = false; + + /// + /// 空闲时间(分),默认10分钟,设置idleTime=0则不自动回收 + /// + public int? IdleTime { get; set; } = 10; + + /// + /// 多数据库 + /// + public DbConfig[] Dbs { get; set; } + + /// + /// 读写分离从库列表 + /// + public SlaveDb[] SlaveList { get; set; } + + /// + /// 强制更新 + /// + public bool ForceUpdate { get; set; } = false; +} + +/// +/// 读写分离从库 +/// +public class SlaveDb +{ + /// + /// 数据库类型 + /// + public int Weight { get; set; } = 1; + + /// + /// 数据库连接字符串 + /// + public string ConnectionString { get; set; } +} + +/// +/// 同步数据操作用户 +/// +public class SyncDataUser +{ + /// + /// 用户Id + /// + public long Id { get; set; } + + /// + /// 账号 + /// + public string UserName { get; set; } + + /// + /// 姓名 + /// + public string Name { get; set; } + + /// + /// 租户Id + /// + public long TenantId { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Configs/EmailConfig.cs b/src/modules/admin/ZhonTai.Admin.Core/Configs/EmailConfig.cs new file mode 100644 index 0000000..dadca4d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Configs/EmailConfig.cs @@ -0,0 +1,61 @@ +namespace ZhonTai.Admin.Core.Configs; + +/// +/// 邮件配置 +/// +public class EmailConfig +{ + public static class Models + { + /// + /// 邮箱 + /// + public class EmailModel + { + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 地址 + /// + public string Address { get; set; } + } + } + + /// + /// 主机 + /// + public string Host { get; set; } + + /// + /// 端口 + /// + public int Port { get; set; } + + /// + /// 启用SSL + /// + public bool UseSsl { get; set; } + + /// + /// 邮箱账号 + /// + public string UserName { get; set; } + + /// + /// 邮箱密码 + /// + public string Password { get; set; } + + /// + /// 发件人 + /// + public Models.EmailModel FromEmail { get; set; } + + /// + /// 收件人 + /// + public Models.EmailModel ToEmail { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Configs/ImConfig.cs b/src/modules/admin/ZhonTai.Admin.Core/Configs/ImConfig.cs new file mode 100644 index 0000000..5f8dd59 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Configs/ImConfig.cs @@ -0,0 +1,27 @@ +namespace ZhonTai.Admin.Core.Configs; + +/// +/// im配置 +/// +public class ImConfig +{ + /// + /// 启用 + /// + public bool Enable { get; set; } = false; + + /// + /// im服务器集群地址 + /// + public string[] Servers { get; set; } + + /// + /// ws业务端地址 + /// + public string Server { get; set; } + + /// + /// Redis连接字符串 + /// + public string RedisConnectionString { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Configs/JwtConfig.cs b/src/modules/admin/ZhonTai.Admin.Core/Configs/JwtConfig.cs new file mode 100644 index 0000000..780c29e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Configs/JwtConfig.cs @@ -0,0 +1,32 @@ +namespace ZhonTai.Admin.Core.Configs; + +/// +/// Jwt配置 +/// +public class JwtConfig +{ + /// + /// 发行者 + /// + public string Issuer { get; set; } = "admin.core"; + + /// + /// 订阅者 + /// + public string Audience { get; set; } = "admin.core"; + + /// + /// 密钥 + /// + public string SecurityKey { get; set; } + + /// + /// 有效期(分钟) + /// + public int Expires { get; set; } = 120; + + /// + /// 刷新有效期(分钟) + /// + public int RefreshExpires { get; set; } = 480; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Configs/OSSConfig.cs b/src/modules/admin/ZhonTai.Admin.Core/Configs/OSSConfig.cs new file mode 100644 index 0000000..9caccb9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Configs/OSSConfig.cs @@ -0,0 +1,115 @@ +using OnceMi.AspNetCore.OSS; + +namespace ZhonTai.Admin.Core.Configs; + +/// +/// OSS配置 +/// +public class OSSOptions +{ + /// + /// 文件存储供应商 + /// + public OSSProvider Provider { get; set; } = OSSProvider.Minio; + /// + /// 域名 + /// + public string Endpoint { get; set; } + /// + /// 账号 + /// + public string AccessKey { get; set; } + /// + /// 密码 + /// + public string SecretKey { get; set; } + /// + /// 地区 + /// + public string Region { get; set; } + /// + /// 会话Token + /// + public string SessionToken { get; set; } + /// + /// 启用Https + /// + public bool IsEnableHttps { get; set; } + /// + /// 启用缓存 + /// + public bool IsEnableCache { get; set; } + /// + /// 存储桶 + /// + public string BucketName { get; set; } = "admin"; + /// + /// 文件地址 + /// + public string Url { get; set; } + /// + /// 文件Md5码 + /// + public bool Md5 { get; set; } = false; + /// + /// 启用 + /// + public bool Enable { get; set; } = false; +} + +/// +/// 本地上传配置 +/// +public class LocalUploadConfig +{ + /// + /// 上传目录 + /// + public string Directory { get; set; } = "upload"; + + /// + /// 日期目录 + /// + public string DateTimeDirectory { get; set; } = "yyyy/MM/dd"; + + /// + /// 文件Md5码 + /// + public bool Md5 { get; set; } = false; + + /// + /// 文件大小 + /// + public long MaxSize { get; set; } = 104857600; + + /// + /// 包含文件拓展名列表 + /// + public string[] IncludeExtension { get; set; } + + /// + /// 排除文件拓展名列表 + /// + public string[] ExcludeExtension { get; set; } +} + +/// +/// OSS配置 +/// +public class OSSConfig +{ + /// + /// 本地上传配置 + /// + public LocalUploadConfig LocalUploadConfig { get; set; } + + /// + /// 文件存储供应商 + /// + public OSSProvider Provider { get; set; } = OSSProvider.Minio; + + /// + /// OSS配置列表 + /// + public List OSSConfigs { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Configs/RpcConfig.cs b/src/modules/admin/ZhonTai.Admin.Core/Configs/RpcConfig.cs new file mode 100644 index 0000000..e56e443 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Configs/RpcConfig.cs @@ -0,0 +1,109 @@ +namespace ZhonTai.Admin.Core.Configs; + +/// +/// 远程过程调用配置 +/// +public class RpcConfig +{ + public static class Models + { + /// + /// Http远程配置 + /// + public class HttpModel + { + /// + /// 启用 + /// + public bool Enable { get; set; } = true; + + private string[] _assemblyNames; + + /// + /// 程序集名称 + /// + public string[] AssemblyNames + { + get => _assemblyNames; + set + { + _assemblyNames = value; + if (!value.Contains("ZhonTai.Admin.Contracts")) + { + _assemblyNames = [.. _assemblyNames, "ZhonTai.Admin.Contracts"]; + } + } + } + } + + /// + /// Grpc远程配置 + /// + public class GrpcModel + { + /// + /// 启用 + /// + public bool Enable { get; set; } = true; + + private string[] _assemblyNames; + + /// + /// 程序集名称 + /// + public string[] AssemblyNames + { + get => _assemblyNames; + set + { + _assemblyNames = value; + if (!value.Contains("ZhonTai.Admin.Core")) + { + _assemblyNames = [.. _assemblyNames, "ZhonTai.Admin.Core"]; + } + } + } + + /// + /// 服务端程序集名称 + /// + public string[] ServerAssemblyNames { get; set; } + } + + /// + /// 地址 + /// + public class Endpoint + { + /// + /// 模块命名 + /// + public string Name { get; set; } + + /// + /// Http地址 + /// + public string HttpUrl { get; set; } + + /// + /// Grpc地址 + /// + public string GrpcUrl { get; set; } + } + } + + /// + /// Http远程配置 + /// + public Models.HttpModel Http { get; set; } = new Models.HttpModel(); + + /// + /// Grpc远程配置 + /// + public Models.GrpcModel Grpc { get; set; } = new Models.GrpcModel(); + + /// + /// 地址列表 + /// + public List Endpoints { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Configs/SamlConfig.cs b/src/modules/admin/ZhonTai.Admin.Core/Configs/SamlConfig.cs new file mode 100644 index 0000000..ad880a3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Configs/SamlConfig.cs @@ -0,0 +1,82 @@ +namespace ZhonTai.Admin.Core.Configs; + +/// +/// SAML配置 +/// +public class SamlConfig +{ + /// + /// 启用SAML认证 + /// + public bool Enable { get; set; } = false; + + /// + /// 服务提供商实体ID + /// + public string EntityId { get; set; } = "https://your-app-domain.com"; + + /// + /// 断言消费者服务URL (ACS URL) + /// + public string AssertionConsumerServiceUrl { get; set; } = "https://your-app-domain.com/api/admin/auth/saml/callback"; + + /// + /// 单点登录服务URL (SSO URL) + /// + public string SingleSignOnServiceUrl { get; set; } + + /// + /// 单点登出服务URL (SLO URL) + /// + public string SingleLogoutServiceUrl { get; set; } + + /// + /// 身份提供商证书 (Base64编码) + /// + public string IdpCertificate { get; set; } + + /// + /// 服务提供商私钥 (Base64编码) + /// + public string SpPrivateKey { get; set; } + + /// + /// 服务提供商证书 (Base64编码) + /// + public string SpCertificate { get; set; } + + /// + /// 是否强制使用SAML认证 + /// + public bool ForceSaml { get; set; } = false; + + /// + /// 用户名属性名 + /// + public string UserNameAttribute { get; set; } = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"; + + /// + /// 邮箱属性名 + /// + public string EmailAttribute { get; set; } = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"; + + /// + /// 姓名属性名 + /// + public string NameAttribute { get; set; } = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"; + + /// + /// 是否自动创建用户 + /// + public bool AutoCreateUser { get; set; } = true; + + /// + /// 默认用户类型 + /// + public int DefaultUserType { get; set; } = 1; + + /// + /// 默认租户ID + /// + public long? DefaultTenantId { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Consts/AdminConsts.cs b/src/modules/admin/ZhonTai.Admin.Core/Consts/AdminConsts.cs new file mode 100644 index 0000000..965748a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Consts/AdminConsts.cs @@ -0,0 +1,24 @@ +namespace ZhonTai.Admin.Core.Consts; + +public static partial class AdminConsts +{ + /// + /// 默认域 + /// + public const string AreaName = "admin"; + + /// + /// 默认租户 + /// + public const string TenantName = "Default"; + + /// + /// 允许所有源访问策略 + /// + public const string AllowAnyPolicyName = "AllowAnyPolicy"; + + /// + /// Web端 + /// + public const string WebName = "web"; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Consts/CacheKeys.cs b/src/modules/admin/ZhonTai.Admin.Core/Consts/CacheKeys.cs new file mode 100644 index 0000000..0779796 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Consts/CacheKeys.cs @@ -0,0 +1,113 @@ +using System.ComponentModel; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Core.Consts; + +/// +/// 缓存键 +/// +[ScanCacheKeys] +public static partial class CacheKeys +{ + /// + /// 验证码 admin:captcha:guid + /// + [Description("验证码")] + public const string Captcha = "admin:captcha:"; + + /// + /// 密码加密 admin:password:encrypt:guid + /// + [Description("密码加密")] + public const string PassWordEncrypt = "admin:password:encrypt:"; + + /// + /// 用户权限 admin:user:permissions:userId + /// + [Description("用户权限")] + public const string UserPermission = "admin:user:permission:"; + + /// + /// 数据权限 admin:user:data:permission:userId + /// + [Description("数据权限")] + public const string DataPermission = "admin:user:data:permission:"; + + /// + /// 短信验证码 admin:sms:code:guid + /// + [Description("短信验证码")] + public const string SmsCode = "admin:sms:code:"; + + /// + /// 邮箱验证码 admin:email:code:guid + /// + [Description("邮箱验证码")] + public const string EmailCode = "admin:email:code:"; + + /// + /// 接口列表 admin:api:list + /// + [Description("接口列表")] + public const string ApiList = "admin:api:list"; + + /// + /// Excel错误标记文件 admin:excel:error_mark:userId:fileId + /// + [Description("Excel错误标记文件")] + public const string ExcelErrorMark = "admin:excel:error_mark:"; + + /// + /// 获取短信验证码缓存键 + /// + /// 手机号 + /// 唯一码 + /// + public static string GetSmsCodeKey(string mobile, string code) => $"{SmsCode}{mobile}:{code}"; + + /// + /// 获取邮箱验证码缓存键 + /// + /// 邮件地址 + /// 唯一码 + /// + public static string GetEmailCodeKey(string email, string code) => $"{EmailCode}{email}:{code}"; + + /// + /// 获取数据权限缓存键 + /// + /// 用户Id + /// 请求接口路径 + /// + public static string GetDataPermissionKey(long userId, string apiPath = null) + { + if(apiPath.IsNull()) + { + apiPath = AppInfo.CurrentDataPermissionApiPath; + } + + return $"{DataPermission}{userId}{(apiPath.NotNull() ? (":" + apiPath) : "")}"; + } + + /// + /// 获取数据权限缓存键 + /// + /// 用户Id + /// + public static string GetUserPermissionKey(long userId) => $"{UserPermission}{userId}"; + + /// + /// 获取数据权限模板 + /// + /// 用户Id + /// + public static string GetDataPermissionPattern(long userId) => $"{DataPermission}{userId}*"; + + /// + /// 获取Excel错误标记文件缓存键 + /// + /// 用户Id + /// 文件Id + /// + public static string GetExcelErrorMarkKey(long userId, string fileId) => $"{ExcelErrorMark}{userId}{(fileId.NotNull() ? (":" + fileId) : "")}"; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Consts/DbKeys.cs b/src/modules/admin/ZhonTai.Admin.Core/Consts/DbKeys.cs new file mode 100644 index 0000000..42c4456 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Consts/DbKeys.cs @@ -0,0 +1,22 @@ +using System.ComponentModel; +using ZhonTai.Admin.Core.Configs; + +namespace ZhonTai.Admin.Core.Consts; + +/// +/// 数据库键名 +/// +public class DbKeys +{ + /// + /// 数据库注册键 + /// + [Description("数据库注册键")] + public static string AppDb { get; set; } = AppInfo.GetOptions()?.Key ?? "admindb"; + + /// + /// 任务调度数据库注册键 + /// + [Description("任务调度数据库注册键")] + public static string TaskDb { get; set; } = AppInfo.GetOptions()?.Key ?? "admindb"; +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Consts/FilterNames.cs b/src/modules/admin/ZhonTai.Admin.Core/Consts/FilterNames.cs new file mode 100644 index 0000000..d93ba98 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Consts/FilterNames.cs @@ -0,0 +1,39 @@ +using System.ComponentModel; + +namespace ZhonTai.Admin.Core.Consts; + +/// +/// 全局过滤器名 +/// +public static partial class FilterNames +{ + /// + /// 删除 + /// + [Description("删除")] + public const string Delete = "Delete"; + + /// + /// 租户 + /// + [Description("租户")] + public const string Tenant = "Tenant"; + + /// + /// 本人权限 + /// + [Description("本人权限")] + public const string Self = "Self"; + + /// + /// 数据权限 + /// + [Description("数据权限")] + public const string Data = "Data"; + + /// + /// 会员 + /// + [Description("会员")] + public const string Member = "Member"; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Consts/SubscribeNames.cs b/src/modules/admin/ZhonTai.Admin.Core/Consts/SubscribeNames.cs new file mode 100644 index 0000000..7cbea3e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Consts/SubscribeNames.cs @@ -0,0 +1,45 @@ +using System.ComponentModel; + +namespace ZhonTai.Admin.Core.Consts; + +/// +/// 订阅命名 +/// +public class SubscribeNames +{ + /// + /// 短信单发 + /// + [Description("短信单发")] + public const string SmsSingleSend = "zhontai.admin.sms:singleSend"; + + /// + /// 短信验证码发送 + /// + [Description("短信验证码发送")] + public const string SmsSendCode = "zhontai.admin.sms:sendCode"; + + /// + /// 邮件单发 + /// + [Description("邮件单发")] + public const string EmailSingleSend = "zhontai.admin.email:singleSend"; + + /// + /// 邮件多发 + /// + [Description("邮件多发")] + public const string EmailMultipleSend = "zhontai.admin.email:multipleSend"; + + /// + /// 邮箱验证码发送 + /// + [Description("邮箱验证码发送")] + public const string EmailSendCode = "zhontai.admin.email:sendCode"; + + /// + /// 用户部门转移 + /// + [Description("用户部门转移")] + public const string UserOrgChange = "zhontai.admin.user.orgChange"; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Conventions/ApiGroupConvention.cs b/src/modules/admin/ZhonTai.Admin.Core/Conventions/ApiGroupConvention.cs new file mode 100644 index 0000000..e62204d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Conventions/ApiGroupConvention.cs @@ -0,0 +1,37 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.ApplicationModels; +using ZhonTai.DynamicApi.Attributes; + +namespace ZhonTai.Admin.Core.Conventions; + +/// +/// Api分组约定 +/// +public class ApiGroupConvention : IControllerModelConvention +{ + public void Apply(ControllerModel controller) + { + if (controller.Attributes?.Count > 0) + { + foreach (var attribute in controller.Attributes) + { + if (attribute is AreaAttribute area) + { + if (controller.ApiExplorer.GroupName.IsNull()) + { + controller.ApiExplorer.GroupName = area.RouteValue?.ToLower(); + } + break; + } + else if (attribute is DynamicApiAttribute dynamicApi) + { + if (controller.ApiExplorer.GroupName.IsNull()) + { + controller.ApiExplorer.GroupName = dynamicApi.Area?.ToLower(); + } + break; + } + } + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Db/DBServiceCollectionExtensions.cs b/src/modules/admin/ZhonTai.Admin.Core/Db/DBServiceCollectionExtensions.cs new file mode 100644 index 0000000..7a0f3e5 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Db/DBServiceCollectionExtensions.cs @@ -0,0 +1,69 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using System.Collections.Concurrent; +using System.Reflection; +using FreeSql; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Auth; +using ZhonTai.Admin.Core.Startup; +using ZhonTai.Admin.Core.Db.Transaction; + +namespace ZhonTai.Admin.Core.Db; + +/// +/// 数据库服务集合扩展 +/// +public static class DBServiceCollectionExtensions +{ + /// + /// 添加数据库 + /// + /// + /// + /// + /// + public static void AddDb(this IServiceCollection services, IHostEnvironment env, HostAppOptions hostAppOptions) + { + var dbConfig = AppInfo.GetOptions(); + var appConfig = AppInfo.GetOptions(); + var user = services.BuildServiceProvider().GetService(); + var freeSqlCloud = appConfig.DistributeKey.IsNull() ? new FreeSqlCloud() : new FreeSqlCloud(appConfig.DistributeKey); + DbHelper.RegisterDb(freeSqlCloud, user, dbConfig, appConfig, hostAppOptions); + + //运行主库 + var masterDb = freeSqlCloud.Use(dbConfig.Key); + services.AddSingleton(provider => masterDb); + masterDb.Select(); + + //注册多数据库 + if (dbConfig.Dbs?.Length > 0) + { + foreach (var db in dbConfig.Dbs) + { + DbHelper.RegisterDb(freeSqlCloud, user, db, appConfig, null); + //运行当前库 + var currentDb = freeSqlCloud.Use(db.Key); + currentDb.Select(); + } + } + + services.AddSingleton(freeSqlCloud); + services.AddSingleton(freeSqlCloud); + services.AddScoped(); + } + + /// + /// 添加TiDb数据库 + /// + /// + /// + /// 版本 + public static void AddTiDb(this IServiceCollection _, HostAppContext context, string version = "8.0") + { + var dbConfig = AppInfo.GetOptions(); + var _dicMySqlVersion = typeof(FreeSqlGlobalExtensions).GetField("_dicMySqlVersion", BindingFlags.NonPublic | BindingFlags.Static); + var dicMySqlVersion = new ConcurrentDictionary(); + dicMySqlVersion[dbConfig.ConnectionString] = version; + _dicMySqlVersion.SetValue(new ConcurrentDictionary(), dicMySqlVersion); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Db/Data/GenerateData.cs b/src/modules/admin/ZhonTai.Admin.Core/Db/Data/GenerateData.cs new file mode 100644 index 0000000..cc7ac0c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Db/Data/GenerateData.cs @@ -0,0 +1,85 @@ +using System.Text.Json; +using System.Text.Encodings.Web; +using System.Text.Unicode; +using System.Text.Json.Serialization.Metadata; +using FreeSql.DataAnnotations; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Entities; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Common.Helpers; + +namespace ZhonTai.Admin.Core.Db.Data; + +/// +/// 生成数据 +/// +public abstract class GenerateData +{ + private readonly string _tenantName = InterfaceHelper.GetPropertyNames().FirstOrDefault()?.ToLower(); + + /// + /// 忽略属性名 + /// + /// + /// + protected virtual void IgnorePropName(JsonTypeInfo ti, bool isTenant) + { + foreach (var jsonPropertyInfo in ti.Properties) + { + jsonPropertyInfo.ShouldSerialize = (obj, _) => + { + if (jsonPropertyInfo.Name.ToLower() == _tenantName && EntityHelper.IsImplementInterface(ti.Type, typeof(ITenant))) + { + return isTenant; + } + + return !jsonPropertyInfo.AttributeProvider.IsDefined(typeof(NotGenAttribute), false); + }; + } + } + + /// + /// 保存数据到Json文件 + /// + /// + /// + /// + /// + protected virtual void SaveDataToJsonFile(object data, bool isTenant = false, string path = "InitData/Admin") where T : class, new() + { + var jsonSerializerOptions = new JsonSerializerOptions + { + WriteIndented = true, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + Encoder = JavaScriptEncoder.Create(new TextEncoderSettings(UnicodeRanges.All)), + TypeInfoResolver = new DefaultJsonTypeInfoResolver + { + Modifiers = { (JsonTypeInfo ti) => IgnorePropName(ti, isTenant) } + } + }; + + var table = typeof(T).GetCustomAttributes(typeof(TableAttribute), false).FirstOrDefault() as TableAttribute; + var filePath = Path.Combine(Directory.GetCurrentDirectory(), $"{path}/{table.Name}{(isTenant ? ".tenant" : "")}.json").ToPath(); + + var jsonData = JsonSerializer.Serialize(data, jsonSerializerOptions); + + FileHelper.WriteFile(filePath, jsonData); + } + + /// + /// 保存实体数据 + /// + /// + /// + /// 应用配置 + /// 输出路径 InitData/xxx + /// + protected virtual async Task SaveEntityAsync(IFreeSql db, AppConfig appConfig, string outPath) where T : EntityBase, new() + { + var modules = await db.Queryable().ToListAsync(); + //是否多租户 + var isTenant = appConfig.Tenant && typeof(T).IsAssignableFrom(typeof(EntityTenant)); + + SaveDataToJsonFile(modules, isTenant, outPath); + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Db/Data/IGenerateData.cs b/src/modules/admin/ZhonTai.Admin.Core/Db/Data/IGenerateData.cs new file mode 100644 index 0000000..d8e278b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Db/Data/IGenerateData.cs @@ -0,0 +1,11 @@ +using ZhonTai.Admin.Core.Configs; + +namespace ZhonTai.Admin.Core.Db.Data; + +/// +/// 生成数据接口 +/// +public interface IGenerateData +{ + Task GenerateDataAsync(IFreeSql db, AppConfig appConfig); +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Db/Data/ISyncData.cs b/src/modules/admin/ZhonTai.Admin.Core/Db/Data/ISyncData.cs new file mode 100644 index 0000000..8b71de6 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Db/Data/ISyncData.cs @@ -0,0 +1,11 @@ +using ZhonTai.Admin.Core.Configs; + +namespace ZhonTai.Admin.Core.Db.Data; + +/// +/// 同步数据接口 +/// +public interface ISyncData +{ + Task SyncDataAsync(IFreeSql db, DbConfig dbConfig = null, AppConfig appConfig = null); +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Db/Data/PropsContractResolver.cs b/src/modules/admin/ZhonTai.Admin.Core/Db/Data/PropsContractResolver.cs new file mode 100644 index 0000000..b07631c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Db/Data/PropsContractResolver.cs @@ -0,0 +1,30 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using System.Reflection; + +namespace ZhonTai.Admin.Core.Db.Data; + +/// +/// 属性解析器 +/// +public class PropsContractResolver : CamelCasePropertyNamesContractResolver +{ + private bool _ignore; + private List _propNames = null; + + public PropsContractResolver(List propNames = null, bool ignore = true) + { + _propNames = propNames; + _ignore = ignore; + } + + protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) + { + if (_propNames != null && _propNames.Contains(member.Name)) + { + return _ignore ? null : base.CreateProperty(member, memberSerialization); + } + + return base.CreateProperty(member, memberSerialization); + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Db/Data/SyncData.cs b/src/modules/admin/ZhonTai.Admin.Core/Db/Data/SyncData.cs new file mode 100644 index 0000000..02f67c4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Db/Data/SyncData.cs @@ -0,0 +1,224 @@ +using Mapster; +using Newtonsoft.Json; +using FreeSql; +using FreeSql.DataAnnotations; +using ZhonTai.Common.Extensions; +using ZhonTai.Common.Helpers; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Entities; + +namespace ZhonTai.Admin.Core.Db.Data; + +/// +/// 同步数据 +/// +public abstract class SyncData +{ + /// + /// 检查实体属性是否为自增长 + /// + /// + /// + private static bool CheckIdentity() where T : class + { + var isIdentity = false; + var properties = typeof(T).GetProperties(); + foreach (var property in properties) + { + if (property.GetCustomAttributes(typeof(ColumnAttribute), false).FirstOrDefault() is ColumnAttribute columnAttribute && columnAttribute.IsIdentity) + { + isIdentity = true; + break; + } + } + + return isIdentity; + } + + /// + /// 获得表名 + /// + /// + /// + protected static string GetTableName() where T : class, new() + { + var table = typeof(T).GetCustomAttributes(typeof(TableAttribute), false).FirstOrDefault() as TableAttribute; + return table.Name; + } + + protected static bool IsSyncData(string tableName, DbConfig dbConfig) + { + var isSyncData = true; + + var hasDataIncludeTables = dbConfig.SyncDataIncludeTables?.Length > 0; + if (hasDataIncludeTables && !dbConfig.SyncDataIncludeTables.Contains(tableName)) + { + isSyncData = false; + } + + var hasSyncDataExcludeTables = dbConfig.SyncDataExcludeTables?.Length > 0; + if (hasSyncDataExcludeTables && dbConfig.SyncDataExcludeTables.Contains(tableName)) + { + isSyncData = false; + } + + return isSyncData; + } + + /// + /// 初始化数据表数据 + /// + /// + /// + /// + /// + /// + /// + protected virtual async Task InitDataAsync( + IFreeSql db, + System.Data.Common.DbTransaction tran, + T[] dataList, + DbConfig dbConfig = null + ) where T : class, new() + { + var table = typeof(T).GetCustomAttributes(typeof(TableAttribute), false).FirstOrDefault() as TableAttribute; + var tableName = table.Name; + + try + { + if (!(dataList?.Length > 0)) + { + Console.WriteLine($"table: {tableName} import data []"); + return; + } + + var insertOrUpdate = db.InsertOrUpdate(); + if (tran != null) + { + insertOrUpdate = insertOrUpdate.WithTransaction(tran); + } + if (!dbConfig.SysUpdateData) + { + insertOrUpdate.IfExistsDoNothing(); + } + await insertOrUpdate.SetSource(dataList).ExecuteAffrowsAsync(); + + Console.WriteLine($"table: {tableName} sync data succeed"); + } + catch (Exception ex) + { + var msg = $"table: {tableName} sync data failed.\n{ex.Message}"; + Console.WriteLine(msg); + throw new Exception(msg); + } + } + + /// + /// 获得数据 + /// + /// + /// + /// + /// + /// + protected virtual T[] GetData(bool isTenant = false, string path = "InitData/Admin") + { + var table = typeof(T).GetCustomAttributes(typeof(TableAttribute), false).FirstOrDefault() as TableAttribute; + var fileName = $"{table.Name}{(isTenant ? ".tenant" : "")}.json"; + var filePath = Path.Combine(AppContext.BaseDirectory, $"{path}/{fileName}").ToPath(); + if (!File.Exists(filePath)) + { + var msg = $"数据文件{filePath}不存在"; + ConsoleHelper.WriteWarningLine(msg); + return null; + //throw new Exception(msg); + } + var jsonData = FileHelper.ReadFile(filePath); + var data = JsonConvert.DeserializeObject(jsonData); + + return data; + } + + /// + /// 同步实体数据 + /// + /// + /// + /// 模块数据库配置 + /// 应用配置 + /// 读取数据路径 InitData/xxx + /// 处理子级列表 + /// + protected virtual async Task SyncEntityAsync(IFreeSql db, + IRepositoryUnitOfWork unitOfWork, + DbConfig dbConfig, + AppConfig appConfig, + string readPath = null, + bool processChilds = false) + where T : Entity, new() + { + if (processChilds && !typeof(T).IsAssignableTo(typeof(IChilds))) + { + throw new InvalidOperationException("processChilds is true but T does not implement IChilds"); + } + + var tableName = GetTableName(); + try + { + if (!IsSyncData(tableName, dbConfig)) + { + return; + } + + var isTenant = appConfig.Tenant && typeof(T).IsAssignableTo(typeof(ITenant)); + var rep = db.GetRepository(); + rep.UnitOfWork = unitOfWork; + + //数据列表 + var dataList = GetData(isTenant, readPath ?? dbConfig.SyncDataPath); + + if (!(dataList?.Length > 0)) + { + Console.WriteLine($"table: {tableName} import data []"); + return; + } + + if (processChilds) + { + dataList = dataList.ToList().ToPlainList((a) => ((IChilds)a).Childs).ToArray(); + } + + //查询 + var dataIds = dataList.Select(e => e.Id).ToList(); + var dbDataList = await rep.Where(a => dataIds.Contains(a.Id)).ToListAsync(); + + //新增 + var dbDataIds = dbDataList.Select(a => a.Id).ToList(); + var insertDataList = dataList.Where(a => !dbDataIds.Contains(a.Id)); + if (insertDataList.Any()) + { + await rep.InsertAsync(insertDataList); + } + + //修改 + if (dbConfig.SysUpdateData && dbDataList?.Count > 0) + { + foreach (var dbData in dbDataList) + { + var data = dataList.Where(a => a.Id == dbData.Id).First(); + data.Adapt(dbData); + } + + await rep.UpdateAsync(dbDataList); + } + + Console.WriteLine($"table: {tableName} sync data succeed"); + } + catch (Exception ex) + { + var msg = $"table: {tableName} sync data failed.\n{ex.Message}"; + Console.WriteLine(msg); + throw new Exception(msg); + } + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Db/DbHelper.cs b/src/modules/admin/ZhonTai.Admin.Core/Db/DbHelper.cs new file mode 100644 index 0000000..a6f8b5d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Db/DbHelper.cs @@ -0,0 +1,691 @@ +using StackExchange.Profiling; +using System.Reflection; +using FreeSql; +using FreeSql.Aop; +using FreeSql.DataAnnotations; +using Yitter.IdGenerator; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Entities; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Auth; +using ZhonTai.Common.Helpers; +using ZhonTai.Admin.Core.Db.Data; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Startup; +using ZhonTai.Admin.Domain.Role; +using ZhonTai.Admin.Domain.User; + +namespace ZhonTai.Admin.Core.Db; + +/// +/// 数据库帮助类 +/// +public class DbHelper +{ + /// + /// 偏移时间 + /// + private static TimeSpan timeOffset; + + public static TimeSpan TimeOffset { get => timeOffset; set => timeOffset = value; } + + /// + /// 数据库时间 + /// + public static DateTime ServerTime => DateTime.Now.Subtract(timeOffset); + + /// + /// 创建数据库 + /// + /// + /// + public async static Task CreateDatabaseAsync(DbConfig dbConfig) + { + if (!dbConfig.CreateDb || dbConfig.Type == DataType.Sqlite) + { + return; + } + + var db = new FreeSqlBuilder() + .UseConnectionString(dbConfig.Type, dbConfig.CreateDbConnectionString) + .Build(); + + try + { + Console.WriteLine($"{Environment.NewLine}create database started"); + var filePath = Path.Combine(AppContext.BaseDirectory, dbConfig.CreateDbSqlFile).ToPath(); + if (File.Exists(filePath)) + { + var createDbSql = FileHelper.ReadFile(filePath); + if (createDbSql.NotNull()) + { + dbConfig.CreateDbSql = createDbSql; + } + } + + await db.Ado.ExecuteNonQueryAsync(dbConfig.CreateDbSql); + Console.WriteLine("create database succeed"); + } + catch (Exception e) + { + Console.WriteLine($"create database failed.\n {e.Message}"); + } + } + + /// + /// 获得指定程序集表实体 + /// + /// + /// + public static Type[] GetEntityTypes(string[] assemblyNames) + { + if (!(assemblyNames?.Length > 0)) + { + return null; + } + + var entityTypes = new List(); + + foreach (var assemblyName in assemblyNames) + { + var assembly = AssemblyHelper.GetAssembly(assemblyName); + + if (assembly != null) + { + foreach (Type type in assembly.GetExportedTypes()) + { + foreach (Attribute attribute in type.GetCustomAttributes()) + { + if (attribute is TableAttribute tableAttribute) + { + if (tableAttribute.DisableSyncStructure == false) + { + entityTypes.Add(type); + } + } + } + } + } + } + + return entityTypes.ToArray(); + } + + /// + /// 配置实体 + /// + /// + /// + /// + public static void ConfigEntity(IFreeSql db, AppConfig appConfig = null, DbConfig dbConfig = null) + { + //租户生成和操作租户Id + if (!appConfig.Tenant) + { + var iTenant = nameof(ITenant); + var tenantId = nameof(ITenant.TenantId); + + //获得指定程序集表实体 + var entityTypes = GetEntityTypes(dbConfig.AssemblyNames); + + foreach (var entityType in entityTypes) + { + if (entityType.GetInterfaces().Any(a => a.Name == iTenant)) + { + db.CodeFirst.Entity(entityType, a => + { + a.Ignore(tenantId); + }); + } + } + } + } + + /// + /// 审计数据 + /// + /// + /// + /// + /// + public static void AuditValue(AuditValueEventArgs e, TimeSpan timeOffset, IUser user, DbConfig dbConfig) + { + if (e.Property == null) + { + return; + } + + //数据库时间 + if ((e.Column.CsType == typeof(DateTime) || e.Column.CsType == typeof(DateTime?)) + && e.Property.GetCustomAttribute(false) is ServerTimeAttribute serverTimeAttribute) + { + if(!dbConfig.ForceUpdate && !serverTimeAttribute.CanInsert && e.AuditValueType is AuditValueType.Insert) + { + return; + } + + if((e.Value == null || (DateTime)e.Value == default || (DateTime?)e.Value == default) || serverTimeAttribute.CanUpdate) + { + e.Value = DateTime.Now.Subtract(timeOffset); + } + } + + //雪花Id + if (e.Column.CsType == typeof(long) + && e.Property.GetCustomAttribute(false) is SnowflakeAttribute snowflakeAttribute + && snowflakeAttribute.Enable && (e.Value == null || (long)e.Value == default || (long?)e.Value == default)) + { + e.Value = YitIdHelper.NextId(); + } + + //有序Guid + if (e.Column.CsType == typeof(Guid) + && e.Property.GetCustomAttribute(false) is OrderGuidAttribute orderGuidAttribute + && orderGuidAttribute.Enable && (e.Value == null || (Guid)e.Value == default || (Guid?)e.Value == default)) + { + e.Value = FreeUtil.NewMongodbId(); + } + + if (user == null || user.Id <= 0) + { + return; + } + + if (e.AuditValueType is AuditValueType.Insert or AuditValueType.InsertOrUpdate) + { + switch (e.Property.Name) + { + case "CreatedUserId": + case "OwnerId": + case "MemberId": + if (e.Value == null || (long)e.Value == default || (long?)e.Value == default) + { + e.Value = user.Id; + } + break; + case "CreatedUserName": + if (e.Value == null || ((string)e.Value).IsNull()) + { + e.Value = user.UserName; + } + break; + case "CreatedUserRealName": + if (e.Value == null || ((string)e.Value).IsNull()) + { + e.Value = user.Name; + } + break; + case "OwnerOrgId": + if (e.Value == null || (long)e.Value == default || (long?)e.Value == default) + { + e.Value = user.DataPermission?.OrgId; + } + break; + case "OwnerOrgName": + if (e.Value == null || ((string)e.Value).IsNull()) + { + e.Value = user.DataPermission?.OrgName; + } + break; + case "TenantId": + if (e.Value == null || (long)e.Value == default || (long?)e.Value == default) + { + e.Value = user.TenantId; + } + break; + } + } + + if ((e.AuditValueType is AuditValueType.Update or AuditValueType.InsertOrUpdate) || dbConfig.ForceUpdate) + { + switch (e.Property.Name) + { + case "ModifiedUserId": + e.Value = user.Id; + break; + case "ModifiedUserName": + e.Value = user.UserName; + break; + case "ModifiedUserRealName": + e.Value = user.Name; + break; + } + } + } + + private static void SyncStructureAfter(object? s, SyncStructureAfterEventArgs e) + { + if (e.Sql.NotNull()) + { + Console.WriteLine("sync structure sql:\n" + e.Sql); + } + } + + /// + /// 同步结构 + /// + /// + /// + /// + /// + public static void SyncStructure(IFreeSql db, string msg = null, DbConfig dbConfig = null, Action configureFreeSqlSyncStructure = null) + { + //打印结构比对脚本 + //var dDL = db.CodeFirst.GetComparisonDDLStatements(); + //Console.WriteLine($"{Environment.NewLine}" + dDL); + + //打印结构同步脚本 + if (dbConfig.SyncStructureSql) + { + db.Aop.SyncStructureAfter += SyncStructureAfter; + } + + // 同步结构 + var dbType = dbConfig.Type.ToString(); + Console.WriteLine($"{Environment.NewLine}{(msg.NotNull() ? msg : $"sync {dbType} structure")} started"); + + //获得指定程序集表实体 + var entityTypes = GetEntityTypes(dbConfig.AssemblyNames)?.ToList(); + + var batchSize = dbConfig.SyncStructureEntityBatchSize; + batchSize = batchSize <= 1 ? 1 : batchSize; + + if(entityTypes != null && entityTypes.Count > 0) + { + if (batchSize == 1) + { + foreach (var entityType in entityTypes) + { + db.CodeFirst.SyncStructure(entityType); + } + } + else + { + for (int i = 0, count = entityTypes.Count; i < count; i += batchSize) + { + var batchEntityTypes = entityTypes.GetRange(i, Math.Min(batchSize, count - i)); + db.CodeFirst.SyncStructure(batchEntityTypes.ToArray()); + } + } + } + + //自定义迁移结构 + configureFreeSqlSyncStructure?.Invoke(db, dbConfig); + + if (dbConfig.SyncStructureSql) + { + db.Aop.SyncStructureAfter -= SyncStructureAfter; + } + + Console.WriteLine($"{(msg.NotNull() ? msg : $"sync {dbType} structure")} succeed"); + } + + private static void SyncDataCurdBefore(object? s, CurdBeforeEventArgs e) + { + if (e.Sql.NotNull()) + { + Console.WriteLine($"{e.Sql}{Environment.NewLine}"); + } + } + + /// + /// 同步数据 + /// + /// + /// + /// + /// + /// + public static async Task SyncDataAsync( + IFreeSql db, + DbConfig dbConfig = null, + AppConfig appConfig = null + ) + { + try + { + Console.WriteLine($"{Environment.NewLine}sync data started"); + + if (dbConfig.AssemblyNames?.Length > 0) + { + var user = dbConfig.SyncDataUser; + + // 同步数据审计方法 + void SyncDataAuditValue(object s, AuditValueEventArgs e) + { + if (e.Property == null) + { + return; + } + + if (e.Property.GetCustomAttribute(false) is ServerTimeAttribute serverTimeAttribute + && (e.Column.CsType == typeof(DateTime) || e.Column.CsType == typeof(DateTime?)) + && (e.Value == null || (DateTime)e.Value == default || (DateTime?)e.Value == default)) + { + if (!dbConfig.ForceUpdate && !serverTimeAttribute.CanInsert && e.AuditValueType is AuditValueType.Insert) + { + return; + } + + if ((e.Value == null || (DateTime)e.Value == default || (DateTime?)e.Value == default) || serverTimeAttribute.CanUpdate) + { + e.Value = DateTime.Now.Subtract(timeOffset); + } + } + + if (e.Column.CsType == typeof(long) + && e.Property.GetCustomAttribute(false) != null + && (e.Value == null || (long)e.Value == default || (long?)e.Value == default)) + { + e.Value = YitIdHelper.NextId(); + } + + if (user == null || user.Id <= 0) + { + return; + } + + if (e.AuditValueType is AuditValueType.Insert or AuditValueType.InsertOrUpdate) + { + switch (e.Property.Name) + { + case "CreatedUserId": + if (e.Value == null || (long)e.Value == default || (long?)e.Value == default) + { + e.Value = user.Id; + } + break; + case "CreatedUserName": + if (e.Value == null || ((string)e.Value).IsNull()) + { + e.Value = user.UserName; + } + break; + case "CreatedUserRealName": + if (e.Value == null || ((string)e.Value).IsNull()) + { + e.Value = user.Name; + } + break; + case "TenantId": + if (e.Value == null || (long)e.Value == default || (long?)e.Value == default) + { + e.Value = user.TenantId; + } + break; + } + } + + if ((e.AuditValueType is AuditValueType.Update or AuditValueType.InsertOrUpdate) || dbConfig.ForceUpdate) + { + switch (e.Property.Name) + { + case "ModifiedUserId": + if (e.Value == null || (long)e.Value == default || (long?)e.Value == default) + { + e.Value = user.Id; + } + break; + case "ModifiedUserName": + if (e.Value == null || ((string)e.Value).IsNull()) + { + e.Value = user.UserName; + } + break; + case "ModifiedUserRealName": + if (e.Value == null || ((string)e.Value).IsNull()) + { + e.Value = user.Name; + } + break; + } + } + } + + db.Aop.AuditValue += SyncDataAuditValue; + + if (dbConfig.SyncDataCurd) + { + db.Aop.CurdBefore += SyncDataCurdBefore; + } + + Assembly[] assemblies = AssemblyHelper.GetAssemblyList(dbConfig.AssemblyNames); + + List syncDatas = assemblies.Select(assembly => assembly.GetTypes() + .Where(x => typeof(ISyncData).GetTypeInfo().IsAssignableFrom(x.GetTypeInfo()) && x.GetTypeInfo().IsClass && !x.GetTypeInfo().IsAbstract)) + .SelectMany(registerTypes => registerTypes.Select(registerType => (ISyncData)Activator.CreateInstance(registerType))).ToList(); + + foreach (ISyncData syncData in syncDatas) + { + await syncData.SyncDataAsync(db, dbConfig, appConfig); + } + + if (dbConfig.SyncDataCurd) + { + db.Aop.CurdBefore -= SyncDataCurdBefore; + } + + db.Aop.AuditValue -= SyncDataAuditValue; + } + + Console.WriteLine($"sync data succeed{Environment.NewLine}"); + } + catch (Exception ex) + { + throw new Exception($"sync data failed.\n{ex.Message}"); + } + } + + /// + /// 生成数据 + /// + /// + /// + /// + /// + /// + public static async Task GenerateDataAsync(IFreeSql db, AppConfig appConfig = null, DbConfig dbConfig = null) + { + try + { + Console.WriteLine($"{Environment.NewLine}generate data started"); + + if (dbConfig.AssemblyNames?.Length > 0) + { + Assembly[] assemblies = AssemblyHelper.GetAssemblyList(dbConfig.AssemblyNames); + + List generateDatas = assemblies.Select(assembly => assembly.GetTypes() + .Where(x => typeof(IGenerateData).GetTypeInfo().IsAssignableFrom(x.GetTypeInfo()) && x.GetTypeInfo().IsClass && !x.GetTypeInfo().IsAbstract)) + .SelectMany(registerTypes => registerTypes.Select(registerType => (IGenerateData)Activator.CreateInstance(registerType))).ToList(); + + foreach (IGenerateData generateData in generateDatas) + { + await generateData.GenerateDataAsync(db, appConfig); + } + } + + Console.WriteLine($"generate data succeed{Environment.NewLine}"); + } + catch (Exception ex) + { + throw new Exception($"generate data failed。\n{ex.Message}{Environment.NewLine}"); + } + } + + /// + /// 注册数据库 + /// + /// + /// + /// + /// + /// + public static void RegisterDb( + FreeSqlCloud freeSqlCloud, + IUser user, + DbConfig dbConfig, + AppConfig appConfig, + HostAppOptions hostAppOptions + ) + { + //注册数据库 + var idelTime = dbConfig.IdleTime.HasValue && dbConfig.IdleTime.Value > 0 ? TimeSpan.FromMinutes(dbConfig.IdleTime.Value) : TimeSpan.MaxValue; + freeSqlCloud.Register(dbConfig.Key, () => + { + //创建数据库 + if (dbConfig.CreateDb) + { + CreateDatabaseAsync(dbConfig).Wait(); + } + + var providerType = dbConfig.ProviderType.NotNull() ? Type.GetType(dbConfig.ProviderType) : null; + var freeSqlBuilder = new FreeSqlBuilder() + .UseConnectionString(dbConfig.Type, dbConfig.ConnectionString, providerType) + .UseAutoSyncStructure(false) + .UseLazyLoading(false) + .UseNoneCommandParameter(true); + + if (dbConfig.SlaveList?.Length > 0) + { + var slaveList = dbConfig.SlaveList.Select(a => a.ConnectionString).ToArray(); + var slaveWeightList = dbConfig.SlaveList.Select(a => a.Weight).ToArray(); + freeSqlBuilder.UseSlave(slaveList).UseSlaveWeight(slaveWeightList); + } + + #region 监听所有命令 + + if (dbConfig.MonitorCommand) + { + freeSqlBuilder.UseMonitorCommand(cmd => { }, (cmd, traceLog) => + { + //Console.WriteLine($"{cmd.CommandText}\n{traceLog}{Environment.NewLine}"); + Console.WriteLine($"{cmd.CommandText}{Environment.NewLine}"); + }); + } + + #endregion 监听所有命令 + + hostAppOptions?.ConfigureFreeSqlBuilder?.Invoke(freeSqlBuilder, dbConfig); + + var fsql = freeSqlBuilder.Build(); + + hostAppOptions?.ConfigurePreFreeSql?.Invoke(fsql, dbConfig); + + //生成数据 + if (dbConfig.GenerateData && !dbConfig.CreateDb && !dbConfig.SyncData) + { + GenerateDataAsync(fsql, appConfig, dbConfig).Wait(); + } + + //计算服务器时间 + var serverTime = fsql.Ado.QuerySingle(() => DateTime.UtcNow); + var timeOffset = DateTime.UtcNow.Subtract(serverTime); + TimeOffset = timeOffset; + + if (dbConfig.Type == DataType.Oracle) + { + fsql.CodeFirst.IsSyncStructureToUpper = true; + } + + //同步结构 + if (dbConfig.SyncStructure) + { + SyncStructure(fsql, dbConfig: dbConfig, configureFreeSqlSyncStructure: hostAppOptions?.ConfigureFreeSqlSyncStructure); + } + + //同步数据 + if (dbConfig.SyncData) + { + SyncDataAsync(fsql, dbConfig, appConfig).Wait(); + } + + //审计数据 + fsql.Aop.AuditValue += (s, e) => + { + AuditValue(e, timeOffset, user, dbConfig); + }; + + #region 过滤器 + + //软删除过滤器 + fsql.GlobalFilter.ApplyOnly(FilterNames.Delete, a => a.IsDeleted == false); + + //租户过滤器 + if (appConfig.Tenant) + { + fsql.GlobalFilter.ApplyOnly(FilterNames.Tenant, a => a.TenantId == user.TenantId); + } + + //会员过滤器 + fsql.GlobalFilter.ApplyOnlyIf(FilterNames.Member, + () => + { + if (user?.Id > 0 && user.Type != UserType.Member) + { + return false; + } + return true; + }, + a => a.MemberId == user.Id + ); + + //数据权限过滤器 + fsql.GlobalFilter.ApplyOnlyIf(FilterNames.Self, + () => + { + var dataPermission = user.DataPermission; + if (dataPermission != null && (dataPermission.DataScope == DataScope.All || dataPermission.OrgIds.Count > 0)) + { + return false; + } + return true; + }, + a => a.OwnerId == user.Id + ); + fsql.GlobalFilter.ApplyOnlyIf(FilterNames.Data, + () => + { + var dataPermission = user.DataPermission; + if (dataPermission == null || (dataPermission != null && (dataPermission.DataScope == DataScope.All || dataPermission.OrgIds.Count == 0))) + { + return false; + } + return true; + }, + a => a.OwnerId == user.Id || user.DataPermission.OrgIds.Contains(a.OwnerOrgId.Value) + ); + + #endregion + + //配置实体 + ConfigEntity(fsql, appConfig, dbConfig); + + #region 监听Curd操作 + + if (dbConfig.Curd) + { + fsql.Aop.CurdBefore += (s, e) => + { + if (appConfig.MiniProfiler) + { + MiniProfiler.Current.CustomTiming("CurdBefore", e.Sql); + } + Console.WriteLine($"{e.Sql}{Environment.NewLine}"); + }; + fsql.Aop.CurdAfter += (s, e) => + { + if (appConfig.MiniProfiler) + { + MiniProfiler.Current.CustomTiming("CurdAfter", $"{e.ElapsedMilliseconds}"); + } + }; + } + + #endregion 监听Curd操作 + + hostAppOptions?.ConfigureFreeSql?.Invoke(fsql, dbConfig); + + return fsql; + }, idelTime); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Db/FreeSqlCloud.cs b/src/modules/admin/ZhonTai.Admin.Core/Db/FreeSqlCloud.cs new file mode 100644 index 0000000..46f9dd4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Db/FreeSqlCloud.cs @@ -0,0 +1,10 @@ +namespace FreeSql; + +/// +/// FreeSqlCloud +/// +public class FreeSqlCloud : FreeSqlCloud +{ + public FreeSqlCloud() : base(null) { } + public FreeSqlCloud(string distributeKey) : base(distributeKey) { } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Db/FreeSqlDbContextExtensions.cs b/src/modules/admin/ZhonTai.Admin.Core/Db/FreeSqlDbContextExtensions.cs new file mode 100644 index 0000000..606bfdf --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Db/FreeSqlDbContextExtensions.cs @@ -0,0 +1,81 @@ +using ZhonTai.Admin.Core.Repositories; +using FreeScheduler; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Domain; + +namespace ZhonTai.Admin.Core.Db; + +/// +/// FreeSqlDbContext扩展类 +/// +public static class FreeSqlDbContextExtensions +{ + /// + /// 返回默认仓库类 + /// + /// + /// + /// + /// + public static IRepositoryBase GetRepositoryBase(this IFreeSql that) where TEntity : class + { + return new RepositoryBase(that); + } + + /// + /// 返回默认仓库类,适用联合主键的仓储类 + /// + /// + /// + /// + public static IRepositoryBase GetRepositoryBase(this IFreeSql that) where TEntity : class + { + return new RepositoryBase(that); + } + + /// + /// 同步调度结构 + /// + /// + /// + /// + public static void SyncSchedulerStructure(this IFreeSql that, DbConfig dbConfig, Action configureFreeSql = null) + { + that.CodeFirst + .ConfigEntity(a => + { + a.Name("base_task"); + a.Property(b => b.Id).IsPrimary(true); + a.Property(b => b.Body).StringLength(-1); + a.Property(b => b.Interval).MapType(typeof(int)); + a.Property(b => b.IntervalArgument).StringLength(1024); + a.Property(b => b.Status).MapType(typeof(int)); + a.Property(b => b.CreateTime).ServerTime(DateTimeKind.Local); + a.Property(b => b.LastRunTime).ServerTime(DateTimeKind.Local); + }) + .ConfigEntity(a => + { + a.Name("base_task_log"); + a.Property(b => b.Exception).StringLength(-1); + a.Property(b => b.Remark).StringLength(-1); + a.Property(b => b.CreateTime).ServerTime(DateTimeKind.Local); + }) + .ConfigEntity(a => + { + a.Name("base_task_ext"); + a.Property(b => b.TaskId).IsPrimary(true); + a.Property(b => b.CreatedTime).CanUpdate(false).ServerTime(DateTimeKind.Local); + a.Property(b => b.ModifiedTime).CanInsert(false).ServerTime(DateTimeKind.Local); + }); + + configureFreeSql?.Invoke(that); + + if (dbConfig.SyncStructure) + { + that.CodeFirst.SyncStructure(); + that.CodeFirst.SyncStructure(); + that.CodeFirst.SyncStructure(); + } + + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Db/FreeSqlExt.cs b/src/modules/admin/ZhonTai.Admin.Core/Db/FreeSqlExt.cs new file mode 100644 index 0000000..7616247 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Db/FreeSqlExt.cs @@ -0,0 +1,83 @@ +using FreeSql.Internal.CommonProvider; +using FreeSql; +using System.Linq.Expressions; +using ZhonTai.Admin.Core.Dto; + +namespace ZhonTai.Admin.Core.Db; + +/// +/// 测试成员表达式访问器 +/// +public class TestMemberExpressionVisitor : ExpressionVisitor +{ + public string MemberExpString; + public bool Result { get; private set; } + + public static bool IsExists(Expression selector, Expression memberExp) + { + var visitor = new TestMemberExpressionVisitor { MemberExpString = memberExp.ToString() }; + visitor.Visit(selector); + return visitor.Result; + } + protected override Expression VisitMember(MemberExpression node) + { + if (!Result && node.ToString() == MemberExpString) Result = true; + return node; + } +} + +public static class FreeSqlExt +{ + /// + /// 执行忽略列查询 + /// + /// + /// + /// + /// + public static List ToListIgnore(this ISelect that, Expression> selector) + { + if (selector == null) return that.ToList(); + var s0p = that as Select0Provider; + var tb = s0p._tables[0]; + var parmExp = tb.Parameter ?? Expression.Parameter(tb.Table.Type, tb.Alias); + var initExps = tb.Table.Columns.Values + .Where(a => a.Attribute.IsIgnore == false) + .Select(a => new + { + exp = Expression.Bind(tb.Table.Properties[a.CsName], Expression.MakeMemberAccess(parmExp, tb.Table.Properties[a.CsName])), + ignored = TestMemberExpressionVisitor.IsExists(selector, Expression.MakeMemberAccess(parmExp, tb.Table.Properties[a.CsName])) + }) + .Where(a => a.ignored == false) + .Select(a => a.exp) + .ToArray(); + var lambda = Expression.Lambda>( + Expression.MemberInit( + Expression.New(tb.Table.Type), + initExps + ), + parmExp + ); + return that.ToList(lambda); + } + + /// + /// 多列排序 + /// + /// + /// + /// + /// + public static ISelect SortList(this ISelect that, List? sortList) + { + if (sortList != null && sortList.Count > 0) + { + sortList.ForEach(sort => + { + that = that.OrderByPropertyNameIf(sort.Order.HasValue, sort.PropName, sort.IsAscending.Value); + }); + } + + return that; + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Db/Transaction/TransactionAsyncInterceptor.cs b/src/modules/admin/ZhonTai.Admin.Core/Db/Transaction/TransactionAsyncInterceptor.cs new file mode 100644 index 0000000..3e1deb0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Db/Transaction/TransactionAsyncInterceptor.cs @@ -0,0 +1,170 @@ +using System.Data; +using Castle.DynamicProxy; +using FreeSql; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Dto; + +namespace ZhonTai.Admin.Core.Db.Transaction; + +/// +/// 事务拦截器 +/// +public class TransactionAsyncInterceptor : IAsyncInterceptor +{ + private IUnitOfWork _unitOfWork; + private readonly UnitOfWorkManagerCloud _unitOfWorkManagerCloud; + private readonly DbConfig _dbConfig; + + public TransactionAsyncInterceptor(UnitOfWorkManagerCloud unitOfWorkManagerCloud, DbConfig dbConfig) + { + _unitOfWorkManagerCloud = unitOfWorkManagerCloud; + _dbConfig = dbConfig; + } + + private bool TryBegin(IInvocation invocation) + { + var method = invocation.MethodInvocationTarget ?? invocation.Method; + var attribute = method.GetCustomAttributes(typeof(TransactionAttribute), false).FirstOrDefault(); + if (attribute is TransactionAttribute transaction) + { + IsolationLevel? isolationLevel = transaction.IsolationLevel == 0 ? null : transaction.IsolationLevel; + var dbKey = transaction.DbKey; + if (dbKey.IsNull()) + { + dbKey = _dbConfig.Key; + } + _unitOfWork = _unitOfWorkManagerCloud.Begin(dbKey, transaction.Propagation, isolationLevel); + return true; + } + + return false; + } + + private async Task InternalInterceptAsynchronous(IInvocation invocation) + { + //string methodName = + // $"{invocation.MethodInvocationTarget.DeclaringType?.FullName}.{invocation.Method.Name}()"; + //int? hashCode = _unitOfWork.GetHashCode(); + + invocation.Proceed(); + + try + { + //处理Task返回一个null值的情况会导致空指针 + if (invocation.ReturnValue != null) + { + await (Task)invocation.ReturnValue; + } + _unitOfWork.Commit(); + } + catch (System.Exception) + { + _unitOfWork.Rollback(); + throw; + } + finally + { + _unitOfWork.Dispose(); + } + } + + private async Task InternalInterceptAsynchronous(IInvocation invocation) + { + TResult result; + if (TryBegin(invocation)) + { + try + { + invocation.Proceed(); + result = await (Task)invocation.ReturnValue; + if (result is IResultOutput res && !res.Success) + { + _unitOfWork.Rollback(); + } + else + { + _unitOfWork.Commit(); + } + } + catch (System.Exception) + { + _unitOfWork.Rollback(); + throw; + } + finally + { + _unitOfWork.Dispose(); + } + } + else + { + invocation.Proceed(); + result = await (Task)invocation.ReturnValue; + } + return result; + } + + /// + /// 拦截同步执行的方法 + /// + /// + public void InterceptSynchronous(IInvocation invocation) + { + if (TryBegin(invocation)) + { + try + { + invocation.Proceed(); + var result = invocation.ReturnValue; + if (result is IResultOutput res && !res.Success) + { + _unitOfWork.Rollback(); + } + else + { + _unitOfWork.Commit(); + } + } + catch + { + _unitOfWork.Rollback(); + throw; + } + finally + { + _unitOfWork.Dispose(); + } + } + else + { + invocation.Proceed(); + } + } + + /// + /// 拦截返回结果 + /// + /// + public void InterceptAsynchronous(IInvocation invocation) + { + if (TryBegin(invocation)) + { + invocation.ReturnValue = InternalInterceptAsynchronous(invocation); + } + else + { + invocation.Proceed(); + } + } + + /// + /// 拦截返回结果 + /// + /// + /// + public void InterceptAsynchronous(IInvocation invocation) + { + invocation.ReturnValue = InternalInterceptAsynchronous(invocation); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Db/Transaction/TransactionInterceptor.cs b/src/modules/admin/ZhonTai.Admin.Core/Db/Transaction/TransactionInterceptor.cs new file mode 100644 index 0000000..7fc1d32 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Db/Transaction/TransactionInterceptor.cs @@ -0,0 +1,21 @@ +using Castle.DynamicProxy; + +namespace ZhonTai.Admin.Core.Db.Transaction; + +/// +/// 事务拦截器 +/// +public class TransactionInterceptor : IInterceptor +{ + private readonly TransactionAsyncInterceptor _transactionAsyncInterceptor; + + public TransactionInterceptor(TransactionAsyncInterceptor transactionAsyncInterceptor) + { + _transactionAsyncInterceptor = transactionAsyncInterceptor; + } + + public void Intercept(IInvocation invocation) + { + _transactionAsyncInterceptor.ToInterceptor().Intercept(invocation); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Db/Transaction/UnitOfWorkManagerCloud.cs b/src/modules/admin/ZhonTai.Admin.Core/Db/Transaction/UnitOfWorkManagerCloud.cs new file mode 100644 index 0000000..7380c78 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Db/Transaction/UnitOfWorkManagerCloud.cs @@ -0,0 +1,64 @@ +using FreeSql; +using System.Collections.Concurrent; +using System.Data; + +namespace ZhonTai.Admin.Core.Db.Transaction; + +public class UnitOfWorkManagerCloud: IDisposable +{ + readonly ConcurrentDictionary _managers = new(); + readonly FreeSqlCloud _cloud; + public UnitOfWorkManagerCloud(FreeSqlCloud cloud) + { + _cloud = cloud; + } + + public UnitOfWorkManager GetUnitOfWorkManager(string dbKey) + { + try + { + return _managers.GetOrAdd(dbKey, new UnitOfWorkManager(_cloud.Use(dbKey))); + } + catch (Exception ex) + { + throw new InvalidOperationException($"Failed to get UnitOfWorkManager for database key: {dbKey}", ex); + } + } + + ~UnitOfWorkManagerCloud() => Dispose(); + + int _disposeCounter; + public void Dispose() + { + if (Interlocked.Increment(ref _disposeCounter) != 1) return; + try + { + Exception ex = null; + foreach (var uowm in _managers.Values) + { + try + { + uowm.Dispose(); + } + catch (Exception e) + { + ex = e; + } + } + + if (ex != null) + { + throw ex; + } + } + finally + { + _managers.Clear(); + } + } + + public IUnitOfWork Begin(string dbKey, Propagation propagation = Propagation.Required, IsolationLevel? isolationLevel = null) + { + return GetUnitOfWorkManager(dbKey).Begin(propagation, isolationLevel); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Db/UnitOfWorkExtensions.cs b/src/modules/admin/ZhonTai.Admin.Core/Db/UnitOfWorkExtensions.cs new file mode 100644 index 0000000..536cb79 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Db/UnitOfWorkExtensions.cs @@ -0,0 +1,72 @@ +using DotNetCore.CAP; +using DotNetCore.CAP.Transport; +using FreeSql; +using Microsoft.Extensions.DependencyInjection; + +namespace ZhonTai.Admin.Core.Db; + +/// +/// Cap事务 FreeSql 实现 +/// +public class FreeSqlRepositoryPatternTransaction : CapTransactionBase +{ + public FreeSqlRepositoryPatternTransaction(IDispatcher dispatcher, IUnitOfWork uow) : base(dispatcher) + { + Uow = uow; + } + + public IUnitOfWork Uow { get; } + + public override object? DbTransaction => Uow.GetOrBeginTransaction(); + + public override void Commit() + { + Uow.Commit(); + Flush(); + } + + public override Task CommitAsync(CancellationToken cancellationToken = default) + { + throw new NotImplementedException(); + } + + public override void Rollback() + { + Uow.Rollback(); + } + + public override Task RollbackAsync(CancellationToken cancellationToken = default) + { + throw new NotImplementedException(); + } + + public override void Dispose() + { + Uow.Dispose(); + } +} + +public static class UnitOfWorkExtensions +{ + /// + /// 开启Cap分布式事务 + /// + /// + /// + /// + /// + /// using var uow = LazyGetRequiredService<UnitOfWorkManagerCloud>().Begin(DbKeys.AppDb);
+ /// using var capTran = uow.BeginCapTran(LazyGetRequiredService<ICapPublisher>(), false);
+ /// capTran.Commit(); + ///
+ /// + public static ICapTransaction BeginCapTran(this IUnitOfWork unitOfWork, ICapPublisher capPublisher, bool autoCommit = false) + { + var dispatcher = capPublisher.ServiceProvider.GetRequiredService(); + var transaction = new FreeSqlRepositoryPatternTransaction(dispatcher, unitOfWork) + { + AutoCommit = autoCommit + }; + return capPublisher.Transaction = transaction; + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Dto/ApiGetEnumsOutput.cs b/src/modules/admin/ZhonTai.Admin.Core/Dto/ApiGetEnumsOutput.cs new file mode 100644 index 0000000..ee12d9c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Dto/ApiGetEnumsOutput.cs @@ -0,0 +1,46 @@ +namespace ZhonTai.Admin.Services.Api.Dto; + +/// +/// 枚举 +/// +public class ApiGetEnumsOutput +{ + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 描述 + /// + public string Desc { get; set; } + + /// + /// 选项列表 + /// + public List Options { get; set; } + + public static class Models + { + /// + /// 选项 + /// + public class Options + { + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 描述 + /// + public string Desc { get; set; } + + /// + /// 值 + /// + public long Value { get; set; } + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Dto/DataPermissionOutput.cs b/src/modules/admin/ZhonTai.Admin.Core/Dto/DataPermissionOutput.cs new file mode 100644 index 0000000..8e3b05e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Dto/DataPermissionOutput.cs @@ -0,0 +1,25 @@ +using ZhonTai.Admin.Domain.Role; + +namespace ZhonTai.Admin.Domain.User.Dto; + +public class DataPermissionOutput +{ + /// + /// 部门Id + /// + public long OrgId { get; set; } + + /// + /// 部门名称 + /// + public string OrgName { get; set; } + /// + /// 部门列表 + /// + public List OrgIds { get; set; } + + /// + /// 数据范围 + /// + public DataScope DataScope { get; set; } = DataScope.Self; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Dto/ExportInput.cs b/src/modules/admin/ZhonTai.Admin.Core/Dto/ExportInput.cs new file mode 100644 index 0000000..5687ba6 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Dto/ExportInput.cs @@ -0,0 +1,24 @@ +namespace ZhonTai.Admin.Core.Dto; + +/// +/// 导出信息输入 +/// +public class ExportInput: QueryInput +{ + /// + /// 文件名 + /// + public string FileName { get; set; } +} + +/// +/// 导出信息输入 +/// +/// 过滤数据 +public class ExportInput: ExportInput +{ + /// + /// 查询条件 + /// + public virtual T Filter { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Dto/IResultOutput.cs b/src/modules/admin/ZhonTai.Admin.Core/Dto/IResultOutput.cs new file mode 100644 index 0000000..43a82de --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Dto/IResultOutput.cs @@ -0,0 +1,34 @@ +namespace ZhonTai.Admin.Core.Dto; + +/// +/// 结果输出接口 +/// +public interface IResultOutput +{ + /// + /// 是否成功 + /// + bool Success { get; } + + /// + /// 消息 + /// + string Msg { get; } + + /// + /// 编码 + /// + string Code { get; set; } +} + +/// +/// 泛型结果输出接口 +/// +/// +public interface IResultOutput : IResultOutput +{ + /// + /// 返回数据 + /// + T Data { get; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Dto/ImportOutput.cs b/src/modules/admin/ZhonTai.Admin.Core/Dto/ImportOutput.cs new file mode 100644 index 0000000..c7ad675 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Dto/ImportOutput.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Core.Dto; + +/// +/// 导入信息输出 +/// +public class ImportOutput +{ + /// + /// 数据总数 + /// + public long Total { get; set; } = 0; + + /// + /// 新增数 + /// + public long InsertCount { get; set; } = 0; + + /// + /// 更新数 + /// + public long UpdateCount { get; set; } = 0; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Dto/PageInput.cs b/src/modules/admin/ZhonTai.Admin.Core/Dto/PageInput.cs new file mode 100644 index 0000000..48f0c88 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Dto/PageInput.cs @@ -0,0 +1,45 @@ +namespace ZhonTai.Admin.Core.Dto; + +/// +/// 分页信息输入 +/// +public class PageInput: QueryInput +{ + private int _currentPage; + private int _pageSize; + + /// + /// 当前页标 + /// + public virtual int CurrentPage + { + get => _currentPage < 1 ? 1 : _currentPage; + set => _currentPage = value; + } + + /// + /// 每页大小 + /// + public virtual int PageSize + { + get + { + if (_pageSize < 1) _pageSize = 1; + //if (_pageSize > 1000) _pageSize = 1000; + return _pageSize; + } + set => _pageSize = value; + } +} + +/// +/// 分页信息输入 +/// +/// 过滤数据 +public class PageInput: PageInput +{ + /// + /// 查询条件 + /// + public virtual T Filter { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Dto/PageOutput.cs b/src/modules/admin/ZhonTai.Admin.Core/Dto/PageOutput.cs new file mode 100644 index 0000000..4d71eb2 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Dto/PageOutput.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Core.Dto; + +/// +/// 分页信息输出 +/// +public class PageOutput +{ + /// + /// 数据总数 + /// + public long Total { get; set; } = 0; + + /// + /// 数据 + /// + public IList List { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Dto/QueryInput.cs b/src/modules/admin/ZhonTai.Admin.Core/Dto/QueryInput.cs new file mode 100644 index 0000000..eefaf0e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Dto/QueryInput.cs @@ -0,0 +1,19 @@ +using FreeSql.Internal.Model; + +namespace ZhonTai.Admin.Core.Dto; + +/// +/// 查询信息输入 +/// +public abstract class QueryInput +{ + /// + /// 高级查询条件 + /// + public virtual DynamicFilterInfo DynamicFilter { get; set; } = null; + + /// + /// 排序列表 + /// + public virtual List? SortList { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Dto/ResultOutput.cs b/src/modules/admin/ZhonTai.Admin.Core/Dto/ResultOutput.cs new file mode 100644 index 0000000..18e7f76 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Dto/ResultOutput.cs @@ -0,0 +1,138 @@ +using System.Net; +using ZhonTai.Admin.Core.Exceptions; + +namespace ZhonTai.Admin.Core.Dto; + +/// +/// 结果输出 +/// +public class ResultOutput : IResultOutput +{ + /// + /// 是否成功标记 + /// + public bool Success { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 消息 + /// + public string Msg { get; set; } + + /// + /// 数据 + /// + public T Data { get; set; } + + /// + /// 成功 + /// + /// 数据 + /// 消息 + public ResultOutput Ok(T data, string msg = null) + { + Success = true; + Data = data; + Msg = msg; + + return this; + } + + /// + /// 失败 + /// + /// 消息 + /// 数据 + /// + public ResultOutput NotOk(string msg = null, T data = default) + { + Success = false; + Msg = msg; + Data = data; + + return this; + } +} + +/// +/// 静态结果输出 +/// +public static partial class ResultOutput +{ + /// + /// 成功 + /// + /// 数据 + /// 消息 + /// + public static IResultOutput Ok(T data = default(T), string msg = null) + { + return new ResultOutput().Ok(data, msg); + } + + /// + /// 成功 + /// + /// + public static IResultOutput Ok() + { + return Ok(); + } + + /// + /// 失败 + /// + /// 消息 + /// 数据 + /// + public static IResultOutput NotOk(string msg = null, T data = default) + { + return new ResultOutput().NotOk(msg, data); + } + + /// + /// 失败 + /// + /// 消息 + /// + public static IResultOutput NotOk(string msg = null) + { + return new ResultOutput().NotOk(msg); + } + + /// + /// 系统异常 + /// + /// 消息 + /// 编码 + /// 状态编码 + /// + public static AppException Exception(string msg = null, string code = null, int statusCode = (int)HttpStatusCode.OK) + { + return new AppException(msg, code, statusCode); + } + + /// + /// 根据布尔值返回结果 + /// + /// + /// + public static IResultOutput Result(bool success) + { + return success ? Ok() : NotOk(); + } + + /// + /// 根据布尔值返回结果 + /// + /// + /// + public static IResultOutput Result(bool success) + { + return success ? Ok() : NotOk(); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Dto/SortInput.cs b/src/modules/admin/ZhonTai.Admin.Core/Dto/SortInput.cs new file mode 100644 index 0000000..c73e884 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Dto/SortInput.cs @@ -0,0 +1,31 @@ +namespace ZhonTai.Admin.Core.Dto; + +/// +/// 排序方式 +/// +public enum SortOrder +{ + Asc, + Desc, +} + +/// +/// 排序 +/// +public class SortInput +{ + /// + /// 属性名称 + /// + public string PropName { get; set; } + + /// + /// 排序方式 + /// + public SortOrder? Order { get; set; } + + /// + /// 是否升序 + /// + public bool? IsAscending => Order.HasValue && Order.Value == SortOrder.Asc; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Dto/UserGetPermissionOutput.cs b/src/modules/admin/ZhonTai.Admin.Core/Dto/UserGetPermissionOutput.cs new file mode 100644 index 0000000..3c888be --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Dto/UserGetPermissionOutput.cs @@ -0,0 +1,36 @@ +namespace ZhonTai.Admin.Services.User.Dto; + +/// +/// 用户权限 +/// +public class UserGetPermissionOutput +{ + public static class Models + { + /// + /// 接口 + /// + public class ApiModel + { + /// + /// 请求方法 + /// + public string HttpMethods { get; set; } + + /// + /// 请求地址 + /// + public string Path { get; set; } + } + } + + /// + /// 接口列表 + /// + public List Apis { get; set; } + + /// + /// 权限点编码列表 + /// + public List Codes { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/Entity.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/Entity.cs new file mode 100644 index 0000000..960d0e9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/Entity.cs @@ -0,0 +1,50 @@ +using FreeSql.DataAnnotations; +using Newtonsoft.Json; +using System.ComponentModel; +using System.Text.Json.Serialization; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 实体接口 +/// +/// +public interface IEntity +{ + /// + /// 主键Id + /// + TKey Id { get; set; } +} + +/// +/// 实体接口 +/// +public interface IEntity : IEntity +{ +} + +/// +/// 实体 +/// +/// +public class Entity : IEntity +{ + /// + /// 主键Id + /// + [Description("主键Id")] + [Snowflake] + [Column(Position = 1, IsIdentity = false, IsPrimary = true)] + [JsonProperty(Order = -30)] + [JsonPropertyOrder(-30)] + public virtual TKey Id { get; set; } +} + +/// +/// 实体 +/// +public class Entity : Entity +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityAdd.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityAdd.cs new file mode 100644 index 0000000..88c8d70 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityAdd.cs @@ -0,0 +1,48 @@ +using FreeSql.DataAnnotations; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 实体创建 +/// +public class EntityAdd : Entity, IEntityAdd where TKey : struct +{ + /// + /// 创建者用户Id + /// + [Description("创建者用户Id")] + [Column(Position = -23, CanUpdate = false)] + public virtual long? CreatedUserId { get; set; } + + /// + /// 创建者用户名 + /// + [Description("创建者用户名")] + [Column(Position = -22, CanUpdate = false), MaxLength(60)] + public virtual string CreatedUserName { get; set; } + + /// + /// 创建者姓名 + /// + [Description("创建者姓名")] + [Column(Position = -21, CanUpdate = false), MaxLength(60)] + public virtual string CreatedUserRealName { get; set; } + + /// + /// 创建时间 + /// + [Description("创建时间")] + [Column(Position = -20, CanUpdate = false)] + [ServerTime] + public virtual DateTime? CreatedTime { get; set; } +} + +/// +/// 实体创建 +/// +public class EntityAdd : EntityAdd +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityAddNoId.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityAddNoId.cs new file mode 100644 index 0000000..a2d8425 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityAddNoId.cs @@ -0,0 +1,41 @@ +using FreeSql.DataAnnotations; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 实体创建无主键Id +/// +public class EntityAddNoId : IEntityAdd +{ + /// + /// 创建者用户Id + /// + [Description("创建者用户Id")] + [Column(Position = -23, CanUpdate = false)] + public virtual long? CreatedUserId { get; set; } + + /// + /// 创建者用户名 + /// + [Description("创建者用户名")] + [Column(Position = -22, CanUpdate = false), MaxLength(60)] + public virtual string CreatedUserName { get; set; } + + /// + /// 创建者姓名 + /// + [Description("创建者姓名")] + [Column(Position = -21, CanUpdate = false), MaxLength(60)] + public virtual string CreatedUserRealName { get; set; } + + /// + /// 创建时间 + /// + [Description("创建时间")] + [Column(Position = -20, CanUpdate = false)] + [ServerTime] + public virtual DateTime? CreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityBase.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityBase.cs new file mode 100644 index 0000000..d1eaa30 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityBase.cs @@ -0,0 +1,15 @@ +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 实体基类 +/// +public class EntityBase : EntityDelete where TKey : struct +{ +} + +/// +/// 实体基类 +/// +public class EntityBase : EntityBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityData.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityData.cs new file mode 100644 index 0000000..28e7ea2 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityData.cs @@ -0,0 +1,38 @@ +using FreeSql.DataAnnotations; +using System.ComponentModel; + +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 实体数据权限 +/// +public class EntityData : EntityBase, IData where TKey : struct +{ + /// + /// 拥有者Id + /// + [Description("拥有者Id")] + [Column(Position = -42)] + public virtual long? OwnerId { get; set; } + + /// + /// 拥有者部门Id + /// + [Description("拥有者部门Id")] + [Column(Position = -41)] + public virtual long? OwnerOrgId { get; set; } + + /// + /// 拥有者部门名称 + /// + [Description("拥有者部门名称")] + [Column(Position = -40)] + public virtual string? OwnerOrgName { get; set; } +} + +/// +/// 实体数据权限 +/// +public class EntityData : EntityData +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityDelete.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityDelete.cs new file mode 100644 index 0000000..99f08c6 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityDelete.cs @@ -0,0 +1,24 @@ +using FreeSql.DataAnnotations; +using System.ComponentModel; + +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 实体删除 +/// +public class EntityDelete : EntityUpdate, IDelete where TKey : struct +{ + /// + /// 是否删除 + /// + [Description("是否删除")] + [Column(Position = -9)] + public virtual bool IsDeleted { get; set; } = false; +} + +/// +/// 实体删除 +/// +public class EntityDelete : EntityDelete +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityMember.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityMember.cs new file mode 100644 index 0000000..83ddafe --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityMember.cs @@ -0,0 +1,48 @@ +using FreeSql.DataAnnotations; +using System.ComponentModel; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 实体会员 +/// +public class EntityMember : Entity, IMember, IDelete +{ + /// + /// 会员Id + /// + [Description("会员Id")] + [Column(Position = -23, CanUpdate = false)] + public virtual long? MemberId { get; set; } + + /// + /// 创建时间 + /// + [Description("创建时间")] + [Column(Position = -20, CanUpdate = false)] + [ServerTime] + public virtual DateTime? CreatedTime { get; set; } + + /// + /// 修改时间 + /// + [Description("修改时间")] + [Column(Position = -10)] + [ServerTime(CanInsert = false, CanUpdate = true)] + public virtual DateTime? ModifiedTime { get; set; } + + /// + /// 是否删除 + /// + [Description("是否删除")] + [Column(Position = -9)] + public virtual bool IsDeleted { get; set; } = false; +} + +/// +/// 实体会员 +/// +public class EntityMember : EntityMember +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityMemberWithTenant.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityMemberWithTenant.cs new file mode 100644 index 0000000..b5aa533 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityMemberWithTenant.cs @@ -0,0 +1,26 @@ +using FreeSql.DataAnnotations; +using Newtonsoft.Json; +using System.ComponentModel; + +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 实体会员租户 +/// +public class EntityMemberWithTenant : EntityMember, ITenant where TKey : struct +{ + /// + /// 租户Id + /// + [Description("租户Id")] + [Column(Position = 2, CanUpdate = false)] + [JsonProperty(Order = -20)] + public virtual long? TenantId { get; set; } +} + +/// +/// 实体会员租户 +/// +public class EntityMemberWithTenant : EntityMemberWithTenant +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityTenant.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityTenant.cs new file mode 100644 index 0000000..34aa6fc --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityTenant.cs @@ -0,0 +1,28 @@ +using FreeSql.DataAnnotations; +using Newtonsoft.Json; +using System.ComponentModel; +using System.Text.Json.Serialization; + +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 实体租户 +/// +public class EntityTenant : EntityBase, ITenant where TKey : struct +{ + /// + /// 租户Id + /// + [Description("租户Id")] + [Column(Position = 2, CanUpdate = false)] + [JsonProperty(Order = -20)] + [JsonPropertyOrder(-20)] + public virtual long? TenantId { get; set; } +} + +/// +/// 实体租户 +/// +public class EntityTenant : EntityTenant +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityTenantWithData.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityTenantWithData.cs new file mode 100644 index 0000000..94f477c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityTenantWithData.cs @@ -0,0 +1,38 @@ +using FreeSql.DataAnnotations; +using System.ComponentModel; + +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 实体租户数据权限 +/// +public class EntityTenantWithData : EntityTenant, IData where TKey : struct +{ + /// + /// 拥有者Id + /// + [Description("拥有者Id")] + [Column(Position = -42)] + public virtual long? OwnerId { get; set; } + + /// + /// 拥有者部门Id + /// + [Description("拥有者部门Id")] + [Column(Position = -41)] + public virtual long? OwnerOrgId { get; set; } + + /// + /// 拥有者部门名称 + /// + [Description("拥有者部门名称")] + [Column(Position = -40)] + public virtual string? OwnerOrgName { get; set; } +} + +/// +/// 实体租户数据权限 +/// +public class EntityTenantWithData : EntityTenantWithData +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityUpdate.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityUpdate.cs new file mode 100644 index 0000000..385e9ca --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityUpdate.cs @@ -0,0 +1,58 @@ +using FreeSql.DataAnnotations; +using Newtonsoft.Json; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using System.Text.Json.Serialization; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 实体修改 +/// +public class EntityUpdate : EntityAdd, IEntityUpdate where TKey : struct +{ + /// + /// 修改者用户Id + /// + [Description("修改者用户Id")] + [Column(Position = -13)] + [JsonProperty(Order = 10000)] + [JsonPropertyOrder(10000)] + public virtual long? ModifiedUserId { get; set; } + + /// + /// 修改者用户名 + /// + [Description("修改者用户名")] + [Column(Position = -12), MaxLength(60)] + [JsonProperty(Order = 10001)] + [JsonPropertyOrder(10001)] + public virtual string ModifiedUserName { get; set; } + + /// + /// 修改者姓名 + /// + [Description("修改者姓名")] + [Column(Position = -11), MaxLength(60)] + [JsonProperty(Order = 10001)] + [JsonPropertyOrder(10001)] + public virtual string ModifiedUserRealName { get; set; } + + /// + /// 修改时间 + /// + [Description("修改时间")] + [JsonProperty(Order = 10002)] + [JsonPropertyOrder(10002)] + [Column(Position = -10)] + [ServerTime(CanInsert = false, CanUpdate = true)] + public virtual DateTime? ModifiedTime { get; set; } +} + +/// +/// 实体修改 +/// +public class EntityUpdate : EntityUpdate +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityUpdateNoId.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityUpdateNoId.cs new file mode 100644 index 0000000..2a838fb --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityUpdateNoId.cs @@ -0,0 +1,51 @@ +using FreeSql.DataAnnotations; +using Newtonsoft.Json; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using System.Text.Json.Serialization; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 实体修改无主键Id +/// +public class EntityUpdateNoId : EntityAddNoId, IEntityUpdate +{ + /// + /// 修改者用户Id + /// + [Description("修改者用户Id")] + [Column(Position = -13)] + [JsonProperty(Order = 10000)] + [JsonPropertyOrder(10000)] + public virtual long? ModifiedUserId { get; set; } + + /// + /// 修改者用户名 + /// + [Description("修改者用户名")] + [Column(Position = -12), MaxLength(60)] + [JsonProperty(Order = 10001)] + [JsonPropertyOrder(10001)] + public virtual string ModifiedUserName { get; set; } + + /// + /// 修改者姓名 + /// + [Description("修改者姓名")] + [Column(Position = -11), MaxLength(60)] + [JsonProperty(Order = 10001)] + [JsonPropertyOrder(10001)] + public virtual string ModifiedUserRealName { get; set; } + + /// + /// 修改时间 + /// + [Description("修改时间")] + [JsonProperty(Order = 10002)] + [JsonPropertyOrder(10002)] + [Column(Position = -10)] + [ServerTime(CanInsert = false, CanUpdate = true)] + public virtual DateTime? ModifiedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityVersion.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityVersion.cs new file mode 100644 index 0000000..4d5feac --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/EntityVersion.cs @@ -0,0 +1,24 @@ +using FreeSql.DataAnnotations; +using System.ComponentModel; + +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 实体版本 +/// +public class EntityVersion : EntityBase, IVersion where TKey : struct +{ + /// + /// 版本 + /// + [Description("版本")] + [Column(Position = -30, IsVersion = true)] + public virtual long Version { get; set; } +} + +/// +/// 实体版本 +/// +public class EntityVersion : EntityVersion +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/IChilds.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/IChilds.cs new file mode 100644 index 0000000..543a39c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/IChilds.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 子级接口 +/// +public interface IChilds +{ + /// + /// 子级列表 + /// + List Childs { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/IData.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/IData.cs new file mode 100644 index 0000000..b42a8bb --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/IData.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 数据权限接口 +/// +public interface IData +{ + /// + /// 拥有者Id + /// + long? OwnerId { get; set; } + + /// + /// 拥有者部门Id + /// + long? OwnerOrgId { get; set; } + + /// + /// 拥有者部门名称 + /// + string OwnerOrgName { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/IDelete.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/IDelete.cs new file mode 100644 index 0000000..d33ef06 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/IDelete.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 删除接口 +/// +public interface IDelete +{ + /// + /// 是否删除 + /// + bool IsDeleted { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/IEntityAdd.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/IEntityAdd.cs new file mode 100644 index 0000000..8e1187a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/IEntityAdd.cs @@ -0,0 +1,27 @@ +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 添加接口 +/// +public interface IEntityAdd +{ + /// + /// 创建者用户Id + /// + long? CreatedUserId { get; set; } + + /// + /// 创建者 + /// + string CreatedUserName { get; set; } + + /// + /// 创建者姓名 + /// + string CreatedUserRealName { get; set; } + + /// + /// 创建时间 + /// + DateTime? CreatedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/IEntityUpdate.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/IEntityUpdate.cs new file mode 100644 index 0000000..2df7574 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/IEntityUpdate.cs @@ -0,0 +1,27 @@ +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 修改接口 +/// +public interface IEntityUpdate +{ + /// + /// 修改者Id + /// + long? ModifiedUserId { get; set; } + + /// + /// 修改者 + /// + string ModifiedUserName { get; set; } + + /// + /// 修改者姓名 + /// + string ModifiedUserRealName { get; set; } + + /// + /// 修改时间 + /// + DateTime? ModifiedTime { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/IMember.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/IMember.cs new file mode 100644 index 0000000..4bf18f7 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/IMember.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 会员接口 +/// +public interface IMember +{ + /// + /// 顾客Id + /// + long? MemberId { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/ITenant.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/ITenant.cs new file mode 100644 index 0000000..4756425 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/ITenant.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 租户接口 +/// +public interface ITenant +{ + /// + /// 租户Id + /// + long? TenantId { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Entities/IVersion.cs b/src/modules/admin/ZhonTai.Admin.Core/Entities/IVersion.cs new file mode 100644 index 0000000..a741509 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Entities/IVersion.cs @@ -0,0 +1,12 @@ +namespace ZhonTai.Admin.Core.Entities; + +/// +/// 版本接口 +/// +public interface IVersion +{ + /// + /// 数据版本 + /// + long Version { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Enums/ApiVersion.cs b/src/modules/admin/ZhonTai.Admin.Core/Enums/ApiVersion.cs new file mode 100644 index 0000000..1319e10 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Enums/ApiVersion.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Core.Enums; + +/// +/// 接口版本 +/// +public enum ApiVersion +{ + /// + /// V1 版本 + /// + V1 = 1, + + /// + /// V2 版本 + /// + V2 = 2, +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Enums/ContentTypeEnum.cs b/src/modules/admin/ZhonTai.Admin.Core/Enums/ContentTypeEnum.cs new file mode 100644 index 0000000..897816f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Enums/ContentTypeEnum.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Core.Enums; + +/// +/// 内容类型 +/// +public enum ContentTypeEnum +{ + /// + /// 表单数据 + /// + FormData, + + /// + /// Json格式 + /// + Json +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Enums/DataScope.cs b/src/modules/admin/ZhonTai.Admin.Core/Enums/DataScope.cs new file mode 100644 index 0000000..046e7c9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Enums/DataScope.cs @@ -0,0 +1,32 @@ +namespace ZhonTai.Admin.Domain.Role; + +/// +/// 数据范围 +/// +public enum DataScope +{ + /// + /// 全部 + /// + All = 1, + + /// + /// 本部门和下级部门 + /// + DeptWithChild = 2, + + /// + /// 本部门 + /// + Dept = 3, + + /// + /// 本人数据 + /// + Self = 4, + + /// + /// 指定部门 + /// + Custom = 5 +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Enums/StatusCodes.cs b/src/modules/admin/ZhonTai.Admin.Core/Enums/StatusCodes.cs new file mode 100644 index 0000000..20a52cc --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Enums/StatusCodes.cs @@ -0,0 +1,45 @@ +using System.ComponentModel; + +namespace ZhonTai.Admin.Core.Enums; + +/// +/// 状态码枚举 +/// +public enum StatusCodes +{ + /// + /// 操作失败 + /// + [Description("操作失败")] + Status0NotOk = 0, + + /// + /// 操作成功 + /// + [Description("操作成功")] + Status1Ok = 1, + + /// + /// 未登录(需要重新登录) + /// + [Description("未登录")] + Status401Unauthorized = 401, + + /// + /// 权限不足 + /// + [Description("权限不足")] + Status403Forbidden = 403, + + /// + /// 资源不存在 + /// + [Description("资源不存在")] + Status404NotFound = 404, + + /// + /// 系统内部错误(非业务代码里显式抛出的异常,例如由于数据不正确导致空指针异常、数据库异常等等) + /// + [Description("系统内部错误")] + Status500InternalServerError = 500 +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Enums/TenantType.cs b/src/modules/admin/ZhonTai.Admin.Core/Enums/TenantType.cs new file mode 100644 index 0000000..00ca494 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Enums/TenantType.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Domain.Tenant; + +/// +/// 租户类型 +/// +public enum TenantType +{ + /// + /// 平台 + /// + Platform = 1, + + /// + /// 租户 + /// + Tenant = 2 +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Enums/UserType.cs b/src/modules/admin/ZhonTai.Admin.Core/Enums/UserType.cs new file mode 100644 index 0000000..3795a24 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Enums/UserType.cs @@ -0,0 +1,27 @@ +namespace ZhonTai.Admin.Domain.User; + +/// +/// 用户类型 +/// +public enum UserType +{ + /// + /// 会员 + /// + Member = 0, + + /// + /// 普通用户 + /// + DefaultUser = 1, + + /// + /// 租户管理员 + /// + TenantAdmin = 10, + + /// + /// 平台管理员 + /// + PlatformAdmin = 100 +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Exceptions/AppException.cs b/src/modules/admin/ZhonTai.Admin.Core/Exceptions/AppException.cs new file mode 100644 index 0000000..d3986dc --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Exceptions/AppException.cs @@ -0,0 +1,61 @@ +using System.Net; + +namespace ZhonTai.Admin.Core.Exceptions; + +/// +/// 系统异常 +/// +public class AppException : Exception +{ + public string AppMessage { get; set; } + public string AppCode { get; set; } + public int StatusCode { get; set; } = (int)HttpStatusCode.OK; + + public AppException() + { + } + + public AppException(string message) + : base(message) + { + AppMessage= message; + } + + public AppException(string message, string code) + : base(message) + { + AppMessage = message; + AppCode = code; + } + + public AppException(string message, string code, int statusCode) + : base(message) + { + AppMessage = message; + AppCode = code; + StatusCode = statusCode; + } + + + public AppException(string message, Exception innerException) + : base(message, innerException) + { + AppMessage= message; + } + + public AppException(string message, string code, Exception innerException) + : base(message, innerException) + { + AppMessage = message; + AppCode = code; + } + + public AppException(string message, string code, int statusCode, Exception innerException) + : base(message, innerException) + { + AppMessage = message; + AppCode = code; + StatusCode = statusCode; + } +} + \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Extensions/ApplicationBuilderExtensions.cs b/src/modules/admin/ZhonTai.Admin.Core/Extensions/ApplicationBuilderExtensions.cs new file mode 100644 index 0000000..004feee --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Extensions/ApplicationBuilderExtensions.cs @@ -0,0 +1,43 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Localization; +using Microsoft.Extensions.DependencyInjection; +using ZhonTai.Admin.Core.Configs; + +namespace ZhonTai.Admin.Core.Extensions; + +public static class ApplicationBuilderExtensions +{ + /// + /// 使用多语言 + /// + /// + /// + public static IApplicationBuilder UseMyLocalization(this IApplicationBuilder app) + { + var langConfig = app.ApplicationServices.GetService().Lang; + + //多语言 + string[] cultures = langConfig!.Langs?.Length > 0 ? langConfig.Langs : ["zh-CN"]; + var options = new RequestLocalizationOptions() + .AddSupportedCultures(cultures) + .AddSupportedUICultures(cultures) + .SetDefaultCulture(langConfig!.DefaultLang ?? cultures[0]); + + var providers = langConfig.RequestCultureProviders; + var requestCultureProviders = new List(); + if(providers!=null && providers.Any()) + { + if (providers.Where(a => a == "QueryString").Any()) + requestCultureProviders.Add(options.RequestCultureProviders[0]); + if (providers.Where(a => a == "Cookie").Any()) + requestCultureProviders.Add(options.RequestCultureProviders[1]); + if (providers.Where(a => a == "AcceptLanguageHeader").Any()) + requestCultureProviders.Add(options.RequestCultureProviders[2]); + } + options.RequestCultureProviders = requestCultureProviders; + + app.UseRequestLocalization(options); + + return app; + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Extensions/GrpcExtensions.cs b/src/modules/admin/ZhonTai.Admin.Core/Extensions/GrpcExtensions.cs new file mode 100644 index 0000000..1981f85 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Extensions/GrpcExtensions.cs @@ -0,0 +1,141 @@ +using Grpc.Net.Client.Configuration; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Routing; +using Polly; +using ProtoBuf.Grpc.ClientFactory; +using System.Reflection; +using System.ServiceModel; +using ZhonTai; +using ZhonTai.Admin.Core.Configs; + +namespace Microsoft.Extensions.DependencyInjection; + +/// +/// Grpc扩展 +/// +public static class GrpcExtensions +{ + /// + /// 添加Grpc客户端 + /// + /// + /// + /// + /// + /// + public static IServiceCollection AddMyGrpcClients(this IServiceCollection services, IEnumerable assemblies, RpcConfig rpcConfig, List> policies) + { + ArgumentNullException.ThrowIfNull(assemblies, nameof(assemblies)); + ArgumentNullException.ThrowIfNull(rpcConfig, nameof(rpcConfig)); + + foreach (var assembly in assemblies) + { + var interfaceTypes = assembly.GetTypes() + .Where(type => type.GetCustomAttributes(false).Any() && type.IsInterface) + .ToList(); + + foreach (var interfaceType in interfaceTypes) + { + typeof(GrpcExtensions) + .GetMethod(nameof(AddMyCodeFirstGrpcClient)) + ?.MakeGenericMethod(interfaceType) + ?.Invoke(null, [services, rpcConfig, policies]); + } + } + + return services; + } + + /// + /// 添加CodeFirstGrpc客户端 + /// + /// + /// + /// + /// + /// + public static IServiceCollection AddMyCodeFirstGrpcClient(this IServiceCollection services, RpcConfig rpcConfig, List> policies) where T : class + { + ArgumentNullException.ThrowIfNull(rpcConfig, nameof(rpcConfig)); + + services.AddCodeFirstGrpcClient(o => + { + var serviceContract = typeof(T).GetCustomAttributes(false).FirstOrDefault(); + ArgumentNullException.ThrowIfNull(serviceContract, nameof(serviceContract)); + + var address = rpcConfig.Endpoints.FirstOrDefault(a => a.Name.EqualsIgnoreCase(serviceContract.ConfigurationName)); + ArgumentNullException.ThrowIfNull(address, nameof(address)); + + // Address of grpc server + o.Address = new Uri(address.GrpcUrl); + + // another channel options (based on best practices docs on https://docs.microsoft.com/en-us/aspnet/core/grpc/performance?view=aspnetcore-6.0) + o.ChannelOptionsActions.Add(options => + { + options.HttpHandler = new SocketsHttpHandler() + { + // keeps connection alive + PooledConnectionIdleTimeout = Timeout.InfiniteTimeSpan, + KeepAlivePingDelay = TimeSpan.FromSeconds(60), + KeepAlivePingTimeout = TimeSpan.FromSeconds(30), + + // allows channel to add additional HTTP/2 connections + EnableMultipleHttp2Connections = true + }; + }); + }) + .ConfigureChannel(options => + { + options.UnsafeUseInsecureChannelCallCredentials = true; + options.ServiceConfig = new ServiceConfig { LoadBalancingConfigs = { new RoundRobinConfig() } }; + }) + .AddCallCredentials((context, metadata, serviceProvider) => + { + var httpContextAccessor = serviceProvider.GetRequiredService(); + var authorization = httpContextAccessor?.HttpContext?.Request?.Headers?.Authorization.FirstOrDefault(); + if (authorization.NotNull()) + metadata.Add("Authorization", authorization); + + var userAgent = httpContextAccessor?.HttpContext?.Request?.Headers?.UserAgent.FirstOrDefault(); + if (userAgent.NotNull()) + metadata.Add("User-Agent", userAgent); + + return Task.CompletedTask; + }) + .AddPolicyHandlerList(policies); + + return services; + } + + /// + /// 使用Grpc服务 + /// + /// + /// + /// + public static IEndpointRouteBuilder UseMyMapGrpcService(this IEndpointRouteBuilder endpointRouteBuilder, IEnumerable assemblies) + { + ArgumentNullException.ThrowIfNull(assemblies, nameof(assemblies)); + + foreach (var assembly in assemblies) + { + var grpcServiceTypes = assembly.GetTypes() + .Where(type => + type.GetInterfaces().Length != 0 && + type.GetInterfaces().Any(interfaceType => interfaceType.GetCustomAttributes(true).Any()) + && type.IsClass) + .ToList(); + + foreach (var grpcServiceType in grpcServiceTypes) + { + typeof(GrpcEndpointRouteBuilderExtensions) + .GetMethod(nameof(GrpcEndpointRouteBuilderExtensions.MapGrpcService)) + ?.MakeGenericMethod(grpcServiceType) + ?.Invoke(null, [endpointRouteBuilder]); + } + } + + return endpointRouteBuilder; + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Extensions/HttpClientBuilderExtension.cs b/src/modules/admin/ZhonTai.Admin.Core/Extensions/HttpClientBuilderExtension.cs new file mode 100644 index 0000000..7e7704f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Extensions/HttpClientBuilderExtension.cs @@ -0,0 +1,21 @@ +using Polly; + +namespace Microsoft.Extensions.DependencyInjection; + +/// +/// HttpClientBuilder扩展 +/// +public static class HttpClientBuilderExtension +{ + /// + /// 添加PolicyHandler列表 + /// + /// + /// + /// + public static IHttpClientBuilder AddPolicyHandlerList(this IHttpClientBuilder builder, List> policies) + { + policies?.ForEach(policy => builder.AddPolicyHandler(policy)); + return builder; + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Extensions/HttpExtensions.cs b/src/modules/admin/ZhonTai.Admin.Core/Extensions/HttpExtensions.cs new file mode 100644 index 0000000..a6e98fa --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Extensions/HttpExtensions.cs @@ -0,0 +1,104 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Newtonsoft.Json.Serialization; +using Newtonsoft.Json; +using System.Reflection; +using Refit; +using Polly; +using ZhonTai; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Handlers; + +namespace Microsoft.Extensions.DependencyInjection; + +/// +/// Http扩展 +/// +public static class HttpExtensions +{ + /// + /// 添加Http客户端 + /// + /// + /// + /// + /// + /// + public static IServiceCollection AddMyHttpClients(this IServiceCollection services, IEnumerable assemblies, RpcConfig rpcConfig, List> policies) + { + ArgumentNullException.ThrowIfNull(assemblies, nameof(assemblies)); + ArgumentNullException.ThrowIfNull(rpcConfig, nameof(rpcConfig)); + + foreach (var assembly in assemblies) + { + var interfaceTypes = assembly.GetTypes() + .Where(type => type.GetCustomAttributes(false).Any() && type.IsInterface) + .ToList(); + + foreach (var interfaceType in interfaceTypes) + { + typeof(HttpExtensions) + .GetMethod(nameof(AddMyRefitClient)) + ?.MakeGenericMethod(interfaceType) + ?.Invoke(null, [services, rpcConfig, policies]); + } + } + + return services; + } + + /// + /// 添加Refit客户端 + /// + /// + /// + /// + /// + /// + /// + public static IServiceCollection AddMyRefitClient(this IServiceCollection services, RpcConfig rpcConfig, List> policies) where T : class + { + ArgumentNullException.ThrowIfNull(rpcConfig, nameof(rpcConfig)); + + var refitSettings = new RefitSettings(new NewtonsoftJsonContentSerializer(new JsonSerializerSettings + { + ReferenceLoopHandling = ReferenceLoopHandling.Ignore, + ContractResolver = new CamelCasePropertyNamesContractResolver(), + DateFormatString = "yyyy-MM-dd HH:mm:ss.FFFFFFFK" + })); + + services.TryAddScoped(); + + services + .AddRefitClient(refitSettings) + .AddHttpMessageHandler() + .ConfigureHttpClient(c => + { + var httpClientContractAttribute = typeof(T).GetCustomAttributes(true).FirstOrDefault(); + if (httpClientContractAttribute is null) + throw new NullReferenceException(nameof(httpClientContractAttribute)); + + var address = rpcConfig.Endpoints.FirstOrDefault(a => a.Name.EqualsIgnoreCase(httpClientContractAttribute.ModuleName)); + if (address is null) + throw new NullReferenceException(nameof(address)); + + c.BaseAddress = new Uri(address.HttpUrl); + + var httpContextAccessor = services.BuildServiceProvider().GetRequiredService(); + var authorization = httpContextAccessor?.HttpContext?.Request?.Headers?.Authorization.FirstOrDefault(); + if (authorization.NotNull()) + { + c.DefaultRequestHeaders.Add("Authorization", authorization); + } + var userAgent = httpContextAccessor?.HttpContext?.Request?.Headers?.UserAgent.FirstOrDefault(); + if (userAgent.NotNull()) + { + c.DefaultRequestHeaders.Add("User-Agent", userAgent); + } + }) + .AddPolicyHandlerList(policies); + + return services; + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Extensions/IdGeneratorExtensions.cs b/src/modules/admin/ZhonTai.Admin.Core/Extensions/IdGeneratorExtensions.cs new file mode 100644 index 0000000..4f59b1e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Extensions/IdGeneratorExtensions.cs @@ -0,0 +1,123 @@ +using FreeRedis; +using Microsoft.Extensions.DependencyInjection; +using Yitter.IdGenerator; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Tools.Cache; + +namespace ZhonTai.Admin.Core.Extensions; + +/// +/// Id生成器扩展 +/// +public static class IdGeneratorExtensions +{ + private static bool _isSet = false; + private static readonly object _locker = new(); + + /// + /// 添加Id生成器 + /// + /// + public static void AddIdGenerator(this IServiceCollection services) + { + var idGeneratorConfig = AppInfo.GetOptions().IdGenerator; + + if (_isSet) + return; + //throw new InvalidOperationException("只允许添加一次Id生成器"); + + lock (_locker) + { + if (_isSet) + return; + //throw new InvalidOperationException("只允许添加一次Id生成器"); + + Task.Delay(new Random().Next(10, 100)).Wait(); + + SetIdGenerator(idGeneratorConfig); + + _isSet = true; + } + } + + /// + /// 设置Id生成器 + /// + /// + /// + private static void SetIdGenerator(IdGeneratorConfig idGeneratorConfig) + { + var redisProvider = AppInfo.GetRequiredService(false); + using var lockController = redisProvider.Lock($"{idGeneratorConfig.CachePrefix}:lock", 5); + + if (lockController == null) + { + Task.Delay(new Random().Next(100, 1000)).Wait(); + SetIdGenerator(idGeneratorConfig); + } + + try + { + var hostName = ":host:"; + var cache = AppInfo.GetRequiredService(false); + var keys = cache.GetKeysByPattern($"{idGeneratorConfig.CachePrefix}{hostName}*"); + + var maxWorkerId = (short)(Math.Pow(2.0, idGeneratorConfig.WorkerIdBitLength) - 1); + var workerIdList = new List(); + for (ushort i = 0; i < maxWorkerId; i++) + { + workerIdList.Add(i); + } + + foreach (var key in keys) + { + var workerId = key[(key.LastIndexOf(':') + 1)..]; + workerIdList.Remove(Convert.ToUInt16(workerId)); + } + + var workerIdKey = string.Empty; + foreach (var workerId in workerIdList) + { + workerIdKey = $"{idGeneratorConfig.CachePrefix}{hostName}{AppInfo.HostInfo.ShortName}:{workerId}"; + var exists = cache.Exists(workerIdKey); + if (exists) + { + workerIdKey = string.Empty; + continue; + } + + Console.WriteLine($"{Environment.NewLine}自动注册的机器码 WorkerId = {workerId}"); + + idGeneratorConfig.WorkerId = workerId; + YitIdHelper.SetIdGenerator(idGeneratorConfig); + + cache.Set(workerIdKey, string.Empty, TimeSpan.FromSeconds(15)); + + break; + } + + if (workerIdKey.IsNull()) + { + throw new Exception("自动注册机器码WorkerId已全被占用,请增加机器码位长WorkerIdBitLength后再重新启动"); + } + + //每隔 10 秒刷新 WorkerId 占用有效期 + Task.Run(() => + { + while (true) + { + redisProvider.Expire(workerIdKey, TimeSpan.FromSeconds(15)); + Task.Delay(10000).Wait(); + } + }); + } + catch (Exception ex) + { + throw new Exception(ex.Message, ex); + } + finally + { + lockController.Unlock(); + } + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Extensions/ImExtensions.cs b/src/modules/admin/ZhonTai.Admin.Core/Extensions/ImExtensions.cs new file mode 100644 index 0000000..4f48385 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Extensions/ImExtensions.cs @@ -0,0 +1,41 @@ +using Microsoft.Extensions.DependencyInjection; +using ZhonTai.Admin.Core.Configs; + +namespace ZhonTai.Admin.Core.Extensions; + +/// +/// Im扩展 +/// +public static class ImExtensions +{ + /// + /// 添加Im + /// + /// + public static void AddIm(this IServiceCollection services) + { + var imConfig = AppInfo.GetOptions(); + + ImHelper.Initialization(new ImClientOptions + { + Redis = new FreeRedis.RedisClient(imConfig.RedisConnectionString), + Servers = imConfig.Servers, + }); + + ImHelper.Instance.OnSend += (s, e) => + { + //Console.WriteLine($"ImClient.SendMessage(server={e.Server},data={JsonHelper.Serialize(e.Message)})"); + }; + + ImHelper.EventBus( + t => + { + //Console.WriteLine(t.clientId + "上线了"); + }, + t => + { + //Console.WriteLine(t.clientId + "下线了"); + } + ); + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Extensions/IpRateLimitExtensions.cs b/src/modules/admin/ZhonTai.Admin.Core/Extensions/IpRateLimitExtensions.cs new file mode 100644 index 0000000..d51f5a3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Extensions/IpRateLimitExtensions.cs @@ -0,0 +1,38 @@ +using AspNetCoreRateLimit; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using ZhonTai.Admin.Tools.Cache; + +namespace ZhonTai.Admin.Core.Extensions; + +/// +/// Ip限流扩展 +/// +public static class IpRateLimitExtensions +{ + /// + /// 添加Ip限流 + /// + /// + /// + /// + public static void AddIpRateLimit(this IServiceCollection services, IConfiguration configuration, CacheConfig cacheConfig) + { + #region IP限流 + + services.Configure(configuration.GetSection("IpRateLimiting")); + services.Configure(configuration.GetSection("IpRateLimitPolicies")); + + if (cacheConfig.TypeRateLimit == CacheType.Redis) + { + services.AddDistributedRateLimiting(); + } + else + { + services.AddInMemoryRateLimiting(); + } + services.AddSingleton(); + + #endregion IP限流 + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Extensions/OSSExtensions.cs b/src/modules/admin/ZhonTai.Admin.Core/Extensions/OSSExtensions.cs new file mode 100644 index 0000000..c14b69c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Extensions/OSSExtensions.cs @@ -0,0 +1,93 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Minio; +using OnceMi.AspNetCore.OSS; +using ZhonTai.Admin.Core.Configs; +using OSSOptions = ZhonTai.Admin.Core.Configs.OSSOptions; + +namespace ZhonTai.Admin.Core.Extensions; + +/// +/// OSS扩展 +/// +public static class OSSExtensions +{ + /// + /// 创建存储桶 + /// + /// + /// + private static void CreateBucketName(IOSSServiceFactory oSSServiceFactory, OSSOptions oSSOptions) + { + var oSSService = oSSServiceFactory.Create(oSSOptions.Provider.ToString()); + if (!oSSService.BucketExistsAsync(oSSOptions.BucketName).Result) + { + oSSService.CreateBucketAsync(oSSOptions.BucketName).Wait(); + } + + //设置Minio存储桶权限 + if (oSSOptions.Provider == OSSProvider.Minio) + { + var bucketName = oSSOptions.BucketName; + var minioClient = new MinioClient() + .WithEndpoint(oSSOptions.Endpoint) + .WithCredentials(oSSOptions.AccessKey, oSSOptions.SecretKey); + + if (oSSOptions.Region.NotNull()) + { + minioClient.WithRegion(oSSOptions.Region); + } + + minioClient = minioClient.Build(); + //查看存储桶权限 + //var policy = minioClient.GetPolicyAsync(new GetPolicyArgs().WithBucket(bucketName)).Result; + //设置存储桶权限,存储桶内的所有文件可以通过链接永久访问 + var policy = $@"{{""Version"":""2012-10-17"",""Statement"":[{{""Effect"":""Allow"",""Principal"":{{""AWS"":[""*""]}},""Action"":[""s3:GetBucketLocation""],""Resource"":[""arn:aws:s3:::{bucketName}""]}},{{""Effect"":""Allow"",""Principal"":{{""AWS"":[""*""]}},""Action"":[""s3:GetObject""],""Resource"":[""arn:aws:s3:::{bucketName}/*.*""]}}]}}"; + var setPolicyArgs = new SetPolicyArgs().WithBucket(bucketName).WithPolicy(policy); + minioClient.SetPolicyAsync(setPolicyArgs).Wait(); + } + } + + /// + /// 添加OSS + /// + /// + /// + public static IServiceCollection AddOSS(this IServiceCollection services) + { + var oSSConfig = services.BuildServiceProvider().GetRequiredService>().Value; + + if (oSSConfig.OSSConfigs != null && oSSConfig.OSSConfigs.Any(s => s.Enable)) + { + foreach (var oSSOptions in oSSConfig.OSSConfigs) + { + if (oSSOptions.Enable) + { + services.AddOSSService(oSSOptions.Provider.ToString(), option => + { + option.Provider = oSSOptions.Provider; + option.Endpoint = oSSOptions.Endpoint; + option.Region = oSSOptions.Region; + option.AccessKey = oSSOptions.AccessKey; + option.SecretKey = oSSOptions.SecretKey; + option.IsEnableHttps = oSSOptions.IsEnableHttps; + option.IsEnableCache = oSSOptions.IsEnableCache; + }); + + var oSSServiceFactory = services.BuildServiceProvider().GetRequiredService(); + CreateBucketName(oSSServiceFactory, oSSOptions); + } + } + } + else + { + //未启用OSS注入 + services.AddOSSService(option => + { + option.Provider = OSSProvider.Invalid; + }); + } + + return services; + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Filters/ControllerExceptionFilter.cs b/src/modules/admin/ZhonTai.Admin.Core/Filters/ControllerExceptionFilter.cs new file mode 100644 index 0000000..9164819 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Filters/ControllerExceptionFilter.cs @@ -0,0 +1,69 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Core.Exceptions; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Admin.Core.Filters; + +/// +/// 控制器异常处理 +/// +public class ControllerExceptionFilter : IExceptionFilter, IAsyncExceptionFilter +{ + private readonly IWebHostEnvironment _env; + private readonly ILogger _logger; + + public ControllerExceptionFilter(IWebHostEnvironment env, ILogger logger) + { + _env = env; + _logger = logger; + } + + public void OnException(ExceptionContext context) + { + if (context.ExceptionHandled == false) + { + string message; + var appException = context.Exception is AppException; + if (_env.IsProduction()) + { + message = appException ? context.Exception.Message : Enums.StatusCodes.Status500InternalServerError.ToDescription(); + } + else + { + message = context.Exception.Message; + } + + if (!appException) + { + _logger.LogError(context.Exception, ""); + } + + var data = ResultOutput.NotOk(message); + context.Result = new InternalServerErrorResult(data, appException); + } + + context.ExceptionHandled = true; + } + + public Task OnExceptionAsync(ExceptionContext context) + { + OnException(context); + return Task.CompletedTask; + } +} + +/// +/// 服务器内部错误结果 +/// +public class InternalServerErrorResult : ObjectResult +{ + public InternalServerErrorResult(object value, bool appException) : base(value) + { + StatusCode = appException ? Microsoft.AspNetCore.Http.StatusCodes.Status200OK : Microsoft.AspNetCore.Http.StatusCodes.Status500InternalServerError; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Filters/ControllerLogFilter.cs b/src/modules/admin/ZhonTai.Admin.Core/Filters/ControllerLogFilter.cs new file mode 100644 index 0000000..4538a70 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Filters/ControllerLogFilter.cs @@ -0,0 +1,32 @@ +using Microsoft.AspNetCore.Mvc.Filters; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Handlers; + +namespace ZhonTai.Admin.Core.Filters; + +/// +/// 控制器操作日志记录 +/// +public class ControllerLogFilter : IAsyncActionFilter +{ + private readonly AppConfig _appConfig; + + public ControllerLogFilter(AppConfig appConfig) + { + _appConfig = appConfig; + } + + public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) + { + context.HttpContext.Items["_ActionArguments"] = context.ActionArguments; + + if (context.ActionDescriptor.EndpointMetadata.Any(m => m.GetType() == typeof(NoOperationLogAttribute)) || !_appConfig.Log.Operation) + { + await next(); + return; + } + + await AppInfo.GetRequiredService().LogAsync(context, next); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Filters/EnumSchemaFilter.cs b/src/modules/admin/ZhonTai.Admin.Core/Filters/EnumSchemaFilter.cs new file mode 100644 index 0000000..aae608c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Filters/EnumSchemaFilter.cs @@ -0,0 +1,34 @@ +using Microsoft.OpenApi.Models; +using Swashbuckle.AspNetCore.SwaggerGen; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Admin.Core.Filters; + +/// +/// 枚举架构过滤器 +/// +public class EnumSchemaFilter : ISchemaFilter +{ + public void Apply(OpenApiSchema schema, SchemaFilterContext context) + { + var type = context.Type; + if (type.IsEnum) + { + var enumValueType = type.GetField("value__").FieldType; + var items = Enum.GetValues(type).Cast() + .Where(m => !m.ToString().Equals("Null")).Select(x => + $"{x.ToNameWithDescription()}={Convert.ChangeType(x, enumValueType)}").ToList(); + + if (items?.Count > 0) + { + string description = string.Join(",", items); + //schema.Extensions.Add("extensions", new OpenApiObject + //{ + // ["description"] = new OpenApiString(description) + //}); + //CommonUtils.GetProperyCommentBySummary + schema.Description = string.IsNullOrEmpty(schema.Description) ? description : $"{schema.Description}:{description}"; + } + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Filters/FormatResultFilter.cs b/src/modules/admin/ZhonTai.Admin.Core/Filters/FormatResultFilter.cs new file mode 100644 index 0000000..323a644 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Filters/FormatResultFilter.cs @@ -0,0 +1,65 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.AspNetCore.Mvc.RazorPages; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.DynamicApi.Attributes; + +namespace ZhonTai.Admin.Core.Filters; + +/// +/// 结果格式化过滤器 +/// +public class FormatResultFilter : IAsyncActionFilter +{ + public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) + { + var actionExecutedContext = await next(); + + if (actionExecutedContext.Exception != null) + { + return; + } + + if (context.ActionDescriptor.EndpointMetadata.Any(m => m.GetType() == typeof(NonFormatResultAttribute))) + { + return; + } + + IActionResult result = actionExecutedContext.Result; + + var formatResult = result switch + { + ViewResult => false, + PartialViewResult => false, + ViewComponentResult => false, + PageResult => false, + FileResult => false, + SignInResult => false, + SignOutResult => false, + RedirectToPageResult => false, + RedirectToRouteResult => false, + RedirectResult => false, + RedirectToActionResult => false, + LocalRedirectResult => false, + ChallengeResult => false, + ForbidResult => false, + BadRequestObjectResult => false, + _ => true, + }; + + if (!formatResult) + { + return; + } + + var data = result switch + { + ContentResult contentResult => contentResult.Content, + ObjectResult objectResult => objectResult.Value, + JsonResult jsonResult => jsonResult.Value, + _ => null, + }; + + actionExecutedContext.Result = new JsonResult(new ResultOutput().Ok(data)); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Filters/OrderTagsDocumentFilter.cs b/src/modules/admin/ZhonTai.Admin.Core/Filters/OrderTagsDocumentFilter.cs new file mode 100644 index 0000000..e4c6b61 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Filters/OrderTagsDocumentFilter.cs @@ -0,0 +1,35 @@ +using Microsoft.AspNetCore.Mvc.Controllers; +using Microsoft.OpenApi.Models; +using Swashbuckle.AspNetCore.SwaggerGen; +using System.Collections.Concurrent; +using ZhonTai.DynamicApi.Attributes; + +namespace ZhonTai.Admin.Core.Filters; + +/// +/// 接口排序文档过滤器 +/// +public class OrderTagsDocumentFilter : IDocumentFilter +{ + public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) + { + var orderTagList = new ConcurrentDictionary(); + foreach (var apiDescription in context.ApiDescriptions) + { + var order = 0; + var actionDescriptor = apiDescription.ActionDescriptor as ControllerActionDescriptor; + var objOrderAttribute = actionDescriptor.EndpointMetadata.FirstOrDefault(x => x is OrderAttribute); + if (objOrderAttribute != null) + { + var orderAttribute = objOrderAttribute as OrderAttribute; + order = orderAttribute.Value; + } + orderTagList.TryAdd(actionDescriptor.ControllerName, order); + } + + swaggerDoc.Tags = swaggerDoc.Tags + .OrderBy(u => orderTagList.TryGetValue(u.Name, out int order) ? order : 0) + .ThenBy(u => u.Name) + .ToArray(); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Filters/ValidateInputFilter.cs b/src/modules/admin/ZhonTai.Admin.Core/Filters/ValidateInputFilter.cs new file mode 100644 index 0000000..95e82dd --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Filters/ValidateInputFilter.cs @@ -0,0 +1,49 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.AspNetCore.Mvc.ModelBinding; +using Microsoft.Extensions.Logging; +using System.Text; +using ZhonTai.Admin.Core.Dto; + +namespace ZhonTai.Admin.Core.Filters; + +/// +/// 输入模型验证过滤器 +/// +public class ValidateInputFilter : IAsyncActionFilter +{ + public ValidateInputFilter() + { + } + + public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) + { + if (!context.ModelState.IsValid) + { + try + { + var logger = (ILogger)context.HttpContext.RequestServices.GetService(typeof(ILogger)); + var errors = context.ModelState + .Where(m => m.Value.ValidationState == ModelValidationState.Invalid) + .Select(m => + { + var sb = new StringBuilder(); + sb.AppendFormat("{0}:", m.Key); + sb.Append(m.Value.Errors.Select(n => n.ErrorMessage).Aggregate((x, y) => x + ";" + y)); + return sb.ToString(); + }) + .Aggregate((x, y) => x + "|" + y); + logger.LogError(errors); + context.Result = new JsonResult(ResultOutput.NotOk(errors)); + } + catch + { + context.Result = new StatusCodeResult(StatusCodes.Status500InternalServerError); + } + return; + } + + await next(); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/Dtos/ApiGrpcOutput.cs b/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/Dtos/ApiGrpcOutput.cs new file mode 100644 index 0000000..e22591c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/Dtos/ApiGrpcOutput.cs @@ -0,0 +1,52 @@ +using ProtoBuf; + +namespace ZhonTai.Admin.Core.GrpcServices.Dtos; + +/// +/// 接口 +/// +[ProtoContract(ImplicitFields = ImplicitFields.None)] +public class ApiGrpcOutput +{ + /// + /// 主键Id + /// + [ProtoMember(1)] + public long Id { get; set; } + + /// + /// 所属模块 + /// + [ProtoMember(2)] + public long ParentId { get; set; } + + /// + /// 接口名称 + /// + [ProtoMember(3)] + public string Label { get; set; } + + /// + /// 接口地址 + /// + [ProtoMember(4)] + public string Path { get; set; } + + /// + /// 启用接口日志 + /// + [ProtoMember(5)] + public bool EnabledLog { get; set; } + + /// + /// 启用请求参数 + /// + [ProtoMember(6)] + public bool EnabledParams { get; set; } + + /// + /// 启用响应结果 + /// + [ProtoMember(7)] + public bool EnabledResult { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/Dtos/GrpcOutput.cs b/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/Dtos/GrpcOutput.cs new file mode 100644 index 0000000..e814771 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/Dtos/GrpcOutput.cs @@ -0,0 +1,34 @@ +using ProtoBuf; + +namespace ZhonTai.Admin.Core.GrpcServices.Dtos; + +/// +/// Grpc输出 +/// +[ProtoContract(ImplicitFields = ImplicitFields.None)] +public class GrpcOutput +{ + /// + /// 是否成功标记 + /// + [ProtoMember(1)] + public bool Success { get; set; } + + /// + /// 编码 + /// + [ProtoMember(2)] + public string Code { get; set; } + + /// + /// 消息 + /// + [ProtoMember(3)] + public string Msg { get; set; } + + /// + /// 数据 + /// + [ProtoMember(4)] + public T Data { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/Dtos/OprationLogAddGrpcInput.cs b/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/Dtos/OprationLogAddGrpcInput.cs new file mode 100644 index 0000000..d5d389a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/Dtos/OprationLogAddGrpcInput.cs @@ -0,0 +1,124 @@ +using ProtoBuf; + +namespace ZhonTai.Admin.Core.GrpcServices.Dtos; + +/// +/// 操作日志 +/// +[ProtoContract(ImplicitFields = ImplicitFields.None)] +public class OperationLogAddGrpcInput +{ + /// + /// 姓名 + /// + [ProtoMember(1)] + public string Name { get; set; } + + /// + /// 接口名称 + /// + [ProtoMember(2)] + public string ApiLabel { get; set; } + + /// + /// 接口地址 + /// + [ProtoMember(3)] + public string ApiPath { get; set; } + + /// + /// 接口提交方法 + /// + [ProtoMember(4)] + public string ApiMethod { get; set; } + + /// + /// IP + /// + [ProtoMember(5)] + public string IP { get; set; } + + /// + /// 国家 + /// + [ProtoMember(6)] + public string Country { get; set; } + + /// + /// 省份 + /// + [ProtoMember(7)] + public string Province { get; set; } + + /// + /// 城市 + /// + [ProtoMember(8)] + public string City { get; set; } + + /// + /// 网络服务商 + /// + [ProtoMember(9)] + public string Isp { get; init; } + + /// + /// 浏览器 + /// + [ProtoMember(10)] + public string Browser { get; set; } + + /// + /// 操作系统 + /// + [ProtoMember(11)] + public string Os { get; set; } + + /// + /// 设备 + /// + [ProtoMember(12)] + public string Device { get; set; } + + /// + /// 浏览器信息 + /// + [ProtoMember(13)] + public string BrowserInfo { get; set; } + + /// + /// 耗时(毫秒) + /// + [ProtoMember(14)] + public long ElapsedMilliseconds { get; set; } + + /// + /// 操作状态 + /// + [ProtoMember(15)] + public bool? Status { get; set; } + + /// + /// 操作消息 + /// + [ProtoMember(16)] + public string Msg { get; set; } + + /// + /// 操作参数 + /// + [ProtoMember(17)] + public string Params { get; set; } + + /// + /// 状态码 + /// + [ProtoMember(18)] + public int? StatusCode { get; set; } + + /// + /// 操作结果 + /// + [ProtoMember(19)] + public string Result { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/Dtos/UserGetPermissionGrpcOutput.cs b/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/Dtos/UserGetPermissionGrpcOutput.cs new file mode 100644 index 0000000..2abfc64 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/Dtos/UserGetPermissionGrpcOutput.cs @@ -0,0 +1,44 @@ +using ProtoBuf; + +namespace ZhonTai.Admin.Core.GrpcServices.Dtos; + +/// +/// 用户权限 +/// +[ProtoContract(ImplicitFields = ImplicitFields.None)] +public class UserGetPermissionGrpcOutput +{ + public static class Models + { + /// + /// 接口 + /// + [ProtoContract(ImplicitFields = ImplicitFields.None)] + public class ApiModel + { + /// + /// 请求方法 + /// + [ProtoMember(1)] + public string HttpMethods { get; set; } + + /// + /// 请求地址 + /// + [ProtoMember(2)] + public string Path { get; set; } + } + } + + /// + /// 接口列表 + /// + [ProtoMember(1)] + public List Apis { get; set; } + + /// + /// 权限点编码列表 + /// + [ProtoMember(2)] + public List Codes { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/IApiGrpcService.cs b/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/IApiGrpcService.cs new file mode 100644 index 0000000..5fafeb7 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/IApiGrpcService.cs @@ -0,0 +1,15 @@ +using ProtoBuf.Grpc; +using System.ServiceModel; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.GrpcServices.Dtos; + +namespace ZhonTai.Admin.Core.GrpcServices; + +/// +/// Api服务接口 +/// +[ServiceContract(ConfigurationName = AdminConsts.AreaName)] +public interface IApiGrpcService +{ + Task>> GetApiList(CallContext context = default); +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/IOprationLogGrpcService.cs b/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/IOprationLogGrpcService.cs new file mode 100644 index 0000000..70525a0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/IOprationLogGrpcService.cs @@ -0,0 +1,16 @@ +using ProtoBuf.Grpc; +using System.ServiceModel; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.GrpcServices.Dtos; +using ZhonTai.Admin.Core.Protos; + +namespace ZhonTai.Admin.Core.GrpcServices; + +/// +/// 操作日志服务接口 +/// +[ServiceContract(ConfigurationName = AdminConsts.AreaName)] +public interface IOprationLogGrpcService +{ + Task AddAsync(OperationLogAddGrpcInput input, CallContext context = default); +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/IUserGrpcService.cs b/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/IUserGrpcService.cs new file mode 100644 index 0000000..9d21147 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/GrpcServices/IUserGrpcService.cs @@ -0,0 +1,18 @@ +using ProtoBuf.Grpc; +using System.ServiceModel; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.GrpcServices.Dtos; +using ZhonTai.Admin.Core.Protos; + +namespace ZhonTai.Admin.Core.GrpcServices; + +/// +/// 用户服务接口 +/// +[ServiceContract(ConfigurationName = AdminConsts.AreaName)] +public interface IUserGrpcService +{ + Task GetDataPermissionAsync(ProtoString apiPath, CallContext context = default); + + Task GetPermissionAsync(CallContext context = default); +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Handlers/ICustomPermissionHandler.cs b/src/modules/admin/ZhonTai.Admin.Core/Handlers/ICustomPermissionHandler.cs new file mode 100644 index 0000000..2739737 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Handlers/ICustomPermissionHandler.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Mvc.Filters; + +namespace ZhonTai.Admin.Core.Handlers; + +/// +/// 自定义权限处理接口 +/// +public interface ICustomPermissionHandler +{ + /// + /// 权限验证 + /// + /// + /// + Task ValidateAsync(AuthorizationFilterContext context); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Handlers/ILogHandler.cs b/src/modules/admin/ZhonTai.Admin.Core/Handlers/ILogHandler.cs new file mode 100644 index 0000000..60a6d1d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Handlers/ILogHandler.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.Mvc.Filters; + +namespace ZhonTai.Admin.Core.Handlers; + +/// +/// 操作日志处理接口 +/// +public interface ILogHandler +{ + /// + /// 写操作日志 + /// + /// + /// + /// + Task LogAsync(ActionExecutingContext context, ActionExecutionDelegate next); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Handlers/IPermissionHandler.cs b/src/modules/admin/ZhonTai.Admin.Core/Handlers/IPermissionHandler.cs new file mode 100644 index 0000000..0f07d1f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Handlers/IPermissionHandler.cs @@ -0,0 +1,18 @@ +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Core.Handlers; + +/// +/// 权限处理接口 +/// +public interface IPermissionHandler +{ + /// + /// 权限验证 + /// + /// + /// + /// + /// + Task ValidateAsync(string api, string httpMethod, ApiAccessAttribute apiAccess); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Handlers/LogHandler.cs b/src/modules/admin/ZhonTai.Admin.Core/Handlers/LogHandler.cs new file mode 100644 index 0000000..ccb3109 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Handlers/LogHandler.cs @@ -0,0 +1,101 @@ +using System.Diagnostics; +using System.Net; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.Extensions.Logging; +using ZhonTai.Admin.Core.Exceptions; +using ZhonTai.Common.Helpers; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Core.Helpers; +using ZhonTai.Admin.Core.GrpcServices; +using ZhonTai.Admin.Core.GrpcServices.Dtos; + +namespace ZhonTai.Admin.Core.Handlers; + +/// +/// 操作日志处理 +/// +public class LogHandler : ILogHandler +{ + private readonly ILogger _logger; + private readonly ApiHelper _apiHelper; + private readonly IOprationLogGrpcService _oprationLogGrpcService; + + public LogHandler( + ILogger logger, + ApiHelper apiHelper, + IOprationLogGrpcService oprationLogGrpcService + ) + { + _logger = logger; + _apiHelper = apiHelper; + _oprationLogGrpcService = oprationLogGrpcService; + } + + public async Task LogAsync(ActionExecutingContext context, ActionExecutionDelegate next) + { + var stopwatch = Stopwatch.StartNew(); + var actionExecutedContext = await next(); + stopwatch.Stop(); + + try + { + var input = new OperationLogAddGrpcInput + { + Status = true, + ApiMethod = context.HttpContext.Request.Method.ToLower(), + ApiPath = context.ActionDescriptor.AttributeRouteInfo.Template.ToLower(), + ElapsedMilliseconds = stopwatch.ElapsedMilliseconds, + StatusCode = context.HttpContext.Response.StatusCode + }; + + var api = (await _apiHelper.GetApiListAsync()).FirstOrDefault(a => a.Path == input.ApiPath); + //操作日志启用 + if ((api != null && api.EnabledLog)) + { + var excepton = actionExecutedContext.Exception; + + //操作参数 + if ((api != null && api.EnabledParams && context.ActionArguments.Count > 0) || excepton != null) + { + input.Params = JsonHelper.Serialize(context.ActionArguments); + } + + //操作结果 + if (api != null && api.EnabledResult && actionExecutedContext.Result != null && actionExecutedContext.Result is JsonResult result) + { + input.Result = JsonHelper.Serialize(result.Value); + } + + if (excepton != null) + { + input.Status = false; + + var code = ""; + if (excepton is AppException appException) + { + input.StatusCode = appException.StatusCode; + code = appException.AppCode; + } + else + { + input.StatusCode = (int)HttpStatusCode.InternalServerError; + } + + input.Result = JsonHelper.Serialize(new ResultOutput() + { + Code = code + }.NotOk(excepton.Message)); + } + + input.ApiLabel = api?.Label; + + await _oprationLogGrpcService.AddAsync(input); + } + } + catch (Exception ex) + { + _logger.LogError("操作日志插入异常:{@ex}", ex); + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Handlers/PermissionHandler.cs b/src/modules/admin/ZhonTai.Admin.Core/Handlers/PermissionHandler.cs new file mode 100644 index 0000000..43d0a7f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Handlers/PermissionHandler.cs @@ -0,0 +1,56 @@ +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.GrpcServices; +using ZhonTai.Admin.Core.Handlers; + +namespace ZhonTai.Admin.Core.Auth; + +/// +/// 权限处理 +/// +public class PermissionHandler : IPermissionHandler +{ + private readonly IUser _user; + private readonly IUserGrpcService _userGrpcService; + + public PermissionHandler(IUser user, IUserGrpcService userGrpcService) + { + _user = user; + _userGrpcService = userGrpcService; + } + + /// + /// 权限验证 + /// + /// 接口路径 + /// http请求方法 + /// 接口访问 + /// + public async Task ValidateAsync(string api, string httpMethod, ApiAccessAttribute apiAccess) + { + if (_user.PlatformAdmin) + { + return true; + } + + var userPermission = await _userGrpcService.GetPermissionAsync(); + + var valid = userPermission.Apis.Any(m => + m.Path.NotNull() && m.Path.EqualsIgnoreCase($"/{api}") + && m.HttpMethods.NotNull() && m.HttpMethods.Split(',').Any(n => n.NotNull() && n.EqualsIgnoreCase(httpMethod)) + ); + + if (!valid && apiAccess != null) + { + if (apiAccess.All) + { + valid = userPermission.Codes.All(a => apiAccess.Codes.Contains(a)); + } + else + { + valid = userPermission.Codes.Any(a => apiAccess.Codes.Contains(a)); + } + } + + return valid; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Handlers/ResponseAuthenticationHandler.cs b/src/modules/admin/ZhonTai.Admin.Core/Handlers/ResponseAuthenticationHandler.cs new file mode 100644 index 0000000..2b098c3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Handlers/ResponseAuthenticationHandler.cs @@ -0,0 +1,83 @@ +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using System.Text.Encodings.Web; +using ZhonTai.Common.Extensions; +using StatusCodes = ZhonTai.Admin.Core.Enums.StatusCodes; + +namespace ZhonTai.Admin.Core.Handlers; + +/// +/// 响应认证处理器 +/// +public class ResponseAuthenticationHandler : AuthenticationHandler +{ +#if NET8_0_OR_GREATER + public ResponseAuthenticationHandler( + IOptionsMonitor options, + ILoggerFactory logger, + UrlEncoder encoder + ) : base(options, logger, encoder) +#else + public ResponseAuthenticationHandler( + IOptionsMonitor options, + ILoggerFactory logger, + UrlEncoder encoder, + ISystemClock systemClock + ) : base(options, logger, encoder, systemClock) +#endif + { + } + + protected override Task HandleAuthenticateAsync() + { + throw new NotImplementedException(); + } + + protected override async Task HandleChallengeAsync(AuthenticationProperties properties) + { + Response.ContentType = "application/json"; + Response.StatusCode = Microsoft.AspNetCore.Http.StatusCodes.Status401Unauthorized; + await Response.WriteAsync(JsonConvert.SerializeObject( + new ResponseStatusData + { + Code = StatusCodes.Status401Unauthorized, + Msg = StatusCodes.Status401Unauthorized.ToDescription(), + Success = false + }, + new JsonSerializerSettings() + { + ContractResolver = new CamelCasePropertyNamesContractResolver() + } + )); + } + + protected override async Task HandleForbiddenAsync(AuthenticationProperties properties) + { + Response.ContentType = "application/json"; + Response.StatusCode = Microsoft.AspNetCore.Http.StatusCodes.Status403Forbidden; + await Response.WriteAsync(JsonConvert.SerializeObject( + new ResponseStatusData + { + Code = StatusCodes.Status403Forbidden, + Msg = StatusCodes.Status403Forbidden.ToDescription(), + Success = false + }, + new JsonSerializerSettings() + { + ContractResolver = new CamelCasePropertyNamesContractResolver() + } + )); + } +} + +public class ResponseStatusData +{ + public StatusCodes Code { get; set; } = StatusCodes.Status1Ok; + public string Msg { get; set; } + public bool Success { get; set; } + +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Handlers/ResponseDelegatingHandler.cs b/src/modules/admin/ZhonTai.Admin.Core/Handlers/ResponseDelegatingHandler.cs new file mode 100644 index 0000000..b507fd0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Handlers/ResponseDelegatingHandler.cs @@ -0,0 +1,30 @@ +using Newtonsoft.Json; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Core.Exceptions; + +namespace ZhonTai.Admin.Core.Handlers; + +/// +/// 响应处理器 +/// +public class ResponseDelegatingHandler : DelegatingHandler +{ + protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + var response = await base.SendAsync(request, cancellationToken); + + if (response.IsSuccessStatusCode) + { + var content = await response.Content.ReadAsStringAsync(cancellationToken); + var res = JsonConvert.DeserializeObject>(content); + if (!res.Success && res.Msg.NotNull()) + { + throw new AppException(res.Msg); + } + + response.Content = new StringContent(JsonConvert.SerializeObject(res.Data)); + } + + return response; + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Handlers/SamlAuthenticationHandler.cs b/src/modules/admin/ZhonTai.Admin.Core/Handlers/SamlAuthenticationHandler.cs new file mode 100644 index 0000000..231d4f5 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Handlers/SamlAuthenticationHandler.cs @@ -0,0 +1,64 @@ +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using System.Security.Claims; +using System.Text.Encodings.Web; +using ZhonTai.Admin.Core.Configs; + +namespace ZhonTai.Admin.Core.Handlers; + +/// +/// SAML认证处理器 +/// +public class SamlAuthenticationHandler : AuthenticationHandler +{ + private readonly SamlConfig _samlConfig; + + public SamlAuthenticationHandler( + IOptionsMonitor options, + ILoggerFactory logger, + UrlEncoder encoder, + ISystemClock systemClock, + SamlConfig samlConfig + ) : base(options, logger, encoder, systemClock) + { + _samlConfig = samlConfig; + } + + protected override async Task HandleAuthenticateAsync() + { + // 检查是否启用了SAML + if (!_samlConfig.Enable) + { + return AuthenticateResult.NoResult(); + } + + // 检查是否是SAML回调请求 + if (Context.Request.Path.StartsWithSegments("/api/admin/auth/saml/callback")) + { + return AuthenticateResult.NoResult(); + } + + // 检查是否强制使用SAML + if (_samlConfig.ForceSaml) + { + // 重定向到SAML登录 + return AuthenticateResult.Fail("SAML authentication required"); + } + + return AuthenticateResult.NoResult(); + } + + protected override async Task HandleChallengeAsync(AuthenticationProperties properties) + { + if (_samlConfig.Enable && _samlConfig.ForceSaml) + { + // 这里可以重定向到SAML登录页面 + Context.Response.Redirect("/api/admin/auth/saml/login"); + return; + } + + await base.HandleChallengeAsync(properties); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Helpers/ApiHelper.cs b/src/modules/admin/ZhonTai.Admin.Core/Helpers/ApiHelper.cs new file mode 100644 index 0000000..5368112 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Helpers/ApiHelper.cs @@ -0,0 +1,120 @@ +using System.Reflection; +using Microsoft.Extensions.Options; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Tools.Cache; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.GrpcServices; +using ZhonTai.Admin.Services.Api.Dto; +using ZhonTai.Common.Helpers; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Admin.Core.Helpers; + +/// +/// Api帮助类 +/// +[InjectSingleton] +public class ApiHelper +{ + private readonly ICacheTool _cacheTool; + private readonly IOptions _appConfig; + private readonly IApiGrpcService _apiGrpcService; + + public ApiHelper(ICacheTool cacheTool, IOptions appConfig, IApiGrpcService apiGrpcService) + { + _cacheTool = cacheTool; + _appConfig = appConfig; + _apiGrpcService = apiGrpcService; + } + + public async Task> GetApiListAsync() + { + return await _cacheTool.GetOrSetAsync(CacheKeys.ApiList, async () => + { + var res = await _apiGrpcService.GetApiList(); + var apis = res?.Data; + + var apiList = new List(); + foreach (var api in apis) + { + var parentLabel = apis.FirstOrDefault(a => a.Id == api.ParentId)?.Label; + + apiList.Add(new ApiModel + { + Label = parentLabel.NotNull() ? $"{parentLabel} / {api.Label}" : api.Label, + Path = api.Path?.ToLower().Trim('/'), + EnabledLog = api.EnabledLog, + EnabledParams = api.EnabledParams, + EnabledResult = api.EnabledResult, + }); + } + + return apiList; + }); + } + + public List GetEnumList() + { + var enums = new List(); + + var appConfig = _appConfig.Value; + var assemblyNames = appConfig.EnumListAssemblyNames; + if (!(assemblyNames?.Length > 0)) + { + return enums; + } + + foreach (var assemblyName in assemblyNames) + { + var assembly = Assembly.Load(assemblyName); + var enumTypes = assembly.GetTypes().Where(m => m.IsEnum); + foreach (var enumType in enumTypes) + { + var summaryList = SummaryHelper.GetEnumSummaryList(enumType); + + var enumDescriptor = new ApiGetEnumsOutput + { + Name = enumType.Name, + Desc = enumType.ToDescription() ?? (summaryList.TryGetValue("", out var comment) ? comment : ""), + Options = Enum.GetValues(enumType).Cast().Select(x => new ApiGetEnumsOutput.Models.Options + { + Name = x.ToString(), + Desc = x.ToDescription(false) ?? (summaryList.TryGetValue(x.ToString(), out var comment) ? comment : ""), + Value = x.ToInt64() + }).ToList() + }; + + enums.Add(enumDescriptor); + } + } + + return enums; + } +} + +public class ApiModel +{ + /// + /// 接口名称 + /// + public string Label { get; set; } + + /// + /// 接口地址 + /// + public string Path { get; set; } + /// + /// 启用接口日志 + /// + public bool EnabledLog { get; set; } + /// + /// 启用请求参数 + /// + public bool EnabledParams { get; set; } + + /// + /// 启用响应结果 + /// + public bool EnabledResult { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Helpers/IEHelper.cs b/src/modules/admin/ZhonTai.Admin.Core/Helpers/IEHelper.cs new file mode 100644 index 0000000..bbacb17 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Helpers/IEHelper.cs @@ -0,0 +1,152 @@ +using Magicodes.ExporterAndImporter.Core.Models; +using Magicodes.ExporterAndImporter.Excel; +using Magicodes.ExporterAndImporter.Excel.AspNetCore; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Http; +using System.Text; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Core.Auth; +using ZhonTai.Admin.Tools.Cache; +using ZhonTai.Admin.Core.Resources; + +namespace ZhonTai.Admin.Core.Helpers; + +/// +/// 导入导出帮助类 +/// +[InjectSingleton] +public class IEHelper +{ + private readonly AdminCoreLocalizer _adminCoreLocalizer; + private readonly IUser _user; + private readonly ICacheTool _cache; + + public IEHelper(AdminCoreLocalizer adminCoreLocalizer, + IUser user, + ICacheTool cache) + { + _adminCoreLocalizer = adminCoreLocalizer; + _user = user; + _cache = cache; + } + + /// + /// 下载模板 + /// + /// + /// + /// + /// + public async Task DownloadTemplateAsync(T type, string fileName) where T : class, new() + { + var result = await new ExcelImporter().GenerateTemplateBytes(); + return new XlsxFileResult(result, fileName); + } + + /// + /// 下载错误标记文件 + /// + /// + /// + /// + public async Task DownloadErrorMarkAsync(string fileId, string fileName) + { + var excelErrorMarkKey = CacheKeys.GetExcelErrorMarkKey(_user.Id, fileId); + var fileStream = await _cache.GetAsync(excelErrorMarkKey); + await _cache.DelAsync(excelErrorMarkKey); + if (fileStream == null) + { + throw ResultOutput.Exception(_adminCoreLocalizer["请重新导入数据,再下载错误标记文件"], statusCode: 500); + } + + if (fileName.IsNull()) + { + fileName = _adminCoreLocalizer["错误标记文件{0}.xlsx", DateTime.Now.ToString("yyyyMMddHHmmss")]; + } + + return new XlsxFileResult(fileStream, fileName); + } + + /// + /// 导出数据 + /// + /// + /// + /// + /// + [HttpPost] + public async Task ExportDataAsync(ICollection dataItems, string fileName = null, string sheetName = null) where T : class, new() + { + var result = await new ExcelExporter().Append(dataItems, sheetName).ExportAppendDataAsByteArray(); + + if (fileName.IsNull()) + { + fileName = _adminCoreLocalizer["数据列表{0}.xlsx", DateTime.Now.ToString("yyyyMMddHHmmss")]; + } + + return new XlsxFileResult(result, fileName); + } + + /// + /// 导入数据 + /// + /// + /// + /// + /// + /// + [HttpPost] + public async Task> ImportDataAsync(IFormFile file, string fileId, Func, Task>> importResultCallback = null) where T : class, new() + { + var importResult = await new ExcelImporter().Import(file.OpenReadStream()); + + if (importResultCallback != null) + { + importResult = await importResultCallback(importResult); + } + + var errorMsg = new StringBuilder(); + if (importResult != null && importResult.HasError) + { + if (importResult.Exception != null) + { + errorMsg.AppendLine(_adminCoreLocalizer["错误信息:"]); + errorMsg.AppendLine(importResult.Exception.Message); + } + + if (importResult.TemplateErrors != null && importResult.TemplateErrors.Count > 0) + { + errorMsg.AppendLine(_adminCoreLocalizer["缺少数据列:"] + string.Join(",", importResult.TemplateErrors.Select(m => m.RequireColumnName).ToList())); + } + } + + var rowErros = importResult.RowErrors; + if (rowErros?.Count > 0) + { + errorMsg.AppendLine(_adminCoreLocalizer["数据填写有误:"]); + rowErros = rowErros.OrderBy(a => a.RowIndex).ToList(); + foreach (DataRowErrorInfo drErrorInfo in rowErros) + { + foreach (var item in drErrorInfo.FieldErrors) + { + errorMsg.AppendLine(_adminCoreLocalizer["第{0}行 - {1}:{2}", drErrorInfo.RowIndex, item.Key, item.Value]); + } + } + + //缓存错误标记文件 + new ExcelImporter().OutputBussinessErrorData(file.OpenReadStream(), rowErros.ToList(), out byte[] fileByte); + var userId = _user.Id; + await _cache.DelAsync(CacheKeys.GetExcelErrorMarkKey(userId, fileId)); + await _cache.SetAsync(CacheKeys.GetExcelErrorMarkKey(userId, fileId), fileByte, TimeSpan.FromMinutes(20)); + } + + if (errorMsg.Length > 0) + { + throw ResultOutput.Exception(errorMsg.ToString()); + } + + return importResult; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Helpers/PolicyHelper.cs b/src/modules/admin/ZhonTai.Admin.Core/Helpers/PolicyHelper.cs new file mode 100644 index 0000000..611a4fe --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Helpers/PolicyHelper.cs @@ -0,0 +1,71 @@ +using Polly; + +namespace ZhonTai.Admin.Core.Helpers; + +/// +/// 策略帮助类 +/// +public class PolicyHelper +{ + public static List> GetPolicyList() + { + //隔离策略 + //var bulkheadPolicy = Policy.BulkheadAsync(10, 100); + + //回退策略 + //回退也称为服务降级,用于指定在发生故障时的备用方案。 + //var fallbackPolicy = Policy.Handle().FallbackAsync("backup strategy"); + + //缓存策略 + //var cachePolicy = Policy.CacheAsync(cacheProvider, TimeSpan.FromSeconds(60)); + + //超时策略 + var timeoutPolicy = Policy.TimeoutAsync(9); + + // 重试策略 + // 对于超时或响应状态码>=500的错误,最多重试3次。 + var retryPolicy = Policy.Handle() + .OrResult(response => + { + return (int)response.StatusCode >= 500; + }) + .WaitAndRetryAsync(new[] + { + TimeSpan.FromSeconds(1), + TimeSpan.FromSeconds(3), + TimeSpan.FromSeconds(5) + }); + + //熔断策略 + var circuitBreakerPolicy = Policy.Handle() + .CircuitBreakerAsync + ( + // 在熔断前允许的异常次数 + exceptionsAllowedBeforeBreaking: 2, + // 熔断持续时间 + durationOfBreak: TimeSpan.FromMinutes(10), + // 熔断触发事件 + onBreak: (ex, breakDelay) => + { + Console.WriteLine("熔断触发事件"); + }, + //熔断恢复事件 + onReset: () => + { + Console.WriteLine("熔断恢复事件"); + }, + //熔断结束事件 + onHalfOpen: () => + { + Console.WriteLine("熔断结束事件"); + } + ).AsAsyncPolicy(); + + return new List>() + { + retryPolicy, + timeoutPolicy, + circuitBreakerPolicy + }; + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Helpers/UploadHelper.cs b/src/modules/admin/ZhonTai.Admin.Core/Helpers/UploadHelper.cs new file mode 100644 index 0000000..5ec5a69 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Helpers/UploadHelper.cs @@ -0,0 +1,24 @@ +using Microsoft.AspNetCore.Http; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Core.Helpers; + +/// +/// 文件上传帮助类 +/// +[InjectSingleton] +public class UploadHelper +{ + /// + /// 保存文件 + /// + /// + /// + /// + /// + public async Task SaveAsync(IFormFile file, string filePath, CancellationToken cancellationToken = default) + { + using var stream = File.Create(filePath); + await file.CopyToAsync(stream, cancellationToken); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Helpers/UserHelper.cs b/src/modules/admin/ZhonTai.Admin.Core/Helpers/UserHelper.cs new file mode 100644 index 0000000..6a3ba22 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Helpers/UserHelper.cs @@ -0,0 +1,25 @@ +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Common.Helpers; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Core.Resources; + +namespace ZhonTai.Admin.Core.Helpers; + +/// +/// 用户帮助类 +/// +[InjectSingleton] +public class UserHelper(AdminCoreLocalizer adminCoreLocalizer) +{ + /// + /// 检查密码 + /// + /// + public void CheckPassword(string password) + { + if (!PasswordHelper.Verify(password)) + { + throw ResultOutput.Exception(adminCoreLocalizer["密码为字母+数字+可选特殊字符,长度在6-16之间"]); + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/HostApp.cs b/src/modules/admin/ZhonTai.Admin.Core/HostApp.cs new file mode 100644 index 0000000..a4c3367 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/HostApp.cs @@ -0,0 +1,1034 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Diagnostics.HealthChecks; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Controllers; +using Microsoft.AspNetCore.Mvc.Razor; +using Microsoft.Extensions.Caching.Distributed; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Microsoft.IdentityModel.Tokens; +using Microsoft.IdentityModel.Logging; +using Microsoft.OpenApi.Any; +using Microsoft.OpenApi.Models; +using System.IdentityModel.Tokens.Jwt; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using System.Text.Json.Serialization; +using AspNetCoreRateLimit; +using Autofac; +using Autofac.Extensions.DependencyInjection; +using HealthChecks.UI.Client; +using FreeRedis; +using FreeScheduler; +using FreeSql; +using FluentValidation; +using FluentValidation.AspNetCore; +using Mapster; +using MapsterMapper; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using NLog; +using NLog.Web; +using Swashbuckle.AspNetCore.SwaggerGen; +using Yitter.IdGenerator; +using ZhonTai.Admin.Core.Auth; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Captcha; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Conventions; +using ZhonTai.Admin.Core.Db; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Core.Extensions; +using ZhonTai.Admin.Core.Filters; +using ZhonTai.Admin.Core.Handlers; +using ZhonTai.Admin.Core.RegisterModules; +using ZhonTai.Admin.Core.Startup; +using ZhonTai.Admin.Core.Middlewares; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Tools.Cache; +using ZhonTai.Common.Helpers; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using IP2Region.Net.Abstractions; +using IP2Region.Net.XDB; +using ProtoBuf.Grpc.Server; +using ZhonTai.Admin.Core.Helpers; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using ZhonTai.Admin.Core.GrpcServices; + +namespace ZhonTai.Admin.Core; + +/// +/// 宿主应用 +/// +public class HostApp +{ + readonly HostAppOptions _hostAppOptions; + + /// + /// 添加配置文件 + /// + /// 配置 + /// 环境名 + /// 目录 + /// 可选 + /// 热更新 + private static void AddJsonFilesFromDirectory( + ConfigurationManager configuration, + string environmentName, + string directory = "ConfigCenter", + bool optional = true, + bool reloadOnChange = true) + { + var allFilePaths = Directory.GetFiles(Path.Combine(AppContext.BaseDirectory, directory).ToPath()) + .Where(p => p.EndsWith($".json", StringComparison.OrdinalIgnoreCase)); + + var environmentFilePaths = allFilePaths.Where(p => p.EndsWith($".{environmentName}.json", StringComparison.OrdinalIgnoreCase)); + var otherFilePaths = allFilePaths.Except(environmentFilePaths); + var filePaths = otherFilePaths.Concat(environmentFilePaths); + + foreach (var filePath in filePaths) + { + configuration.AddJsonFile(filePath, optional: optional, reloadOnChange: reloadOnChange); + } + } + + public HostApp() + { + } + + public HostApp(HostAppOptions hostAppOptions) + { + _hostAppOptions = hostAppOptions; + } + + /// + /// 运行应用 + /// + /// + /// + public void Run(string[] args, Assembly assembly = null) + { + var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger(); + try + { + //应用程序启动 + logger.Info("Application startup"); + + var builder = WebApplication.CreateBuilder(args); + _hostAppOptions?.ConfigurePreWebApplicationBuilder?.Invoke(builder); + + builder.ConfigureApplication(assembly ?? Assembly.GetCallingAssembly()); + //清空日志供应程序,避免.net自带日志输出到命令台 + builder.Logging.ClearProviders(); + //使用NLog日志 + builder.Host.UseNLog(); + + var services = builder.Services; + var env = builder.Environment; + var configuration = builder.Configuration; + + //添加配置 + configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); + if (env.EnvironmentName.NotNull()) + { + configuration.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true); + } + + services.Configure(configuration.GetSection("AppSettings")); + var appSettings = AppInfo.GetOptions(); + services.Configure(configuration.GetSection("RpcConfig")); + if (appSettings.UseConfigCenter) + { + AddJsonFilesFromDirectory(configuration, env.EnvironmentName, appSettings.ConfigCenterPath); + services.Configure(configuration.GetSection("AppConfig")); + services.Configure(configuration.GetSection("JwtConfig")); + services.Configure(configuration.GetSection("SamlConfig")); + services.Configure(configuration.GetSection("DbConfig")); + services.Configure(configuration.GetSection("CacheConfig")); + services.Configure(configuration.GetSection("OssConfig")); + services.Configure(configuration.GetSection("ImConfig")); + } + else + { + //app应用配置 + services.Configure(ConfigHelper.Load("appconfig", env.EnvironmentName)); + //jwt配置 + services.Configure(ConfigHelper.Load("jwtconfig", env.EnvironmentName)); + //saml配置 + services.Configure(ConfigHelper.Load("samlconfig", env.EnvironmentName)); + //数据库配置 + services.Configure(ConfigHelper.Load("dbconfig", env.EnvironmentName)); + //缓存配置 + services.Configure(ConfigHelper.Load("cacheconfig", env.EnvironmentName)); + //oss上传配置 + services.Configure(ConfigHelper.Load("ossconfig", env.EnvironmentName)); + //im配置 + services.Configure(ConfigHelper.Load("imconfig", env.EnvironmentName)); + //限流配置 + configuration.AddJsonFile("./Configs/ratelimitconfig.json", optional: true, reloadOnChange: true); + if (env.EnvironmentName.NotNull()) + { + configuration.AddJsonFile($"./Configs/ratelimitconfig.{env.EnvironmentName}.json", optional: true, reloadOnChange: true); + } + } + + services.Configure(configuration.GetSection("Email")); + + //app应用配置 + var appConfig = AppInfo.GetOptions(); + services.AddSingleton(appConfig); + + //jwt配置 + services.AddSingleton(AppInfo.GetOptions()); + + //saml配置 + services.AddSingleton(AppInfo.GetOptions()); + + //数据库配置 + services.AddSingleton(AppInfo.GetOptions()); + + //缓存配置 + services.AddSingleton(AppInfo.GetOptions()); + + var hostAppContext = new HostAppContext() + { + Services = services, + Environment = env, + Configuration = configuration + }; + + //使用Autofac容器 + builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); + //配置Autofac容器 + builder.Host.ConfigureContainer(builder => + { + // 生命周期注入 + builder.RegisterModule(new LifecycleModule(appConfig)); + + // 控制器注入 + builder.RegisterModule(new ControllerModule()); + + // 模块注入 + builder.RegisterModule(new RegisterModule(appConfig)); + + _hostAppOptions?.ConfigureAutofacContainer?.Invoke(builder, hostAppContext); + }); + + //配置Kestrel服务器 + builder.WebHost.ConfigureKestrel(options => + { + options.Limits.KeepAliveTimeout = TimeSpan.FromSeconds(appConfig.Kestrel.KeepAliveTimeout); + options.Limits.RequestHeadersTimeout = TimeSpan.FromSeconds(appConfig.Kestrel.RequestHeadersTimeout); + options.Limits.MaxRequestBodySize = appConfig.Kestrel.MaxRequestBodySize; + }); + + //访问地址 + if (appConfig.Urls?.Length > 0) + { + builder.WebHost.UseUrls(appConfig.Urls); + } + + //配置服务 + ConfigureServices(services, env, configuration, appConfig); + + _hostAppOptions?.ConfigureWebApplicationBuilder?.Invoke(builder); + + var app = builder.Build(); + + app.ConfigureApplication(); + + app.Lifetime.ApplicationStarted.Register(() => + { + AppInfo.IsRun = true; + }); + + app.Lifetime.ApplicationStopped.Register(() => + { + AppInfo.IsRun = false; + }); + + //配置中间件 + ConfigureMiddleware(app, env, configuration, appConfig); + + app.Run(); + + //应用程序停止 + logger.Info("Application shutdown"); + } + catch (Exception exception) + { + //应用程序异常 + logger.Error(exception, "Application stopped because of exception"); + throw; + } + finally + { + LogManager.Shutdown(); + } + } + + /// + /// 配置服务 + /// + /// + /// + /// + /// + private void ConfigureServices(IServiceCollection services, IWebHostEnvironment env, IConfiguration configuration, AppConfig appConfig) + { + var hostAppContext = new HostAppContext() + { + Services = services, + Environment = env, + Configuration = configuration + }; + + //多语言 + if (appConfig.Lang.EnableJson) + { + services.AddJsonLocalization(options => options.ResourcesPath = "Resources"); + } + else + { + services.AddLocalization(opt => opt.ResourcesPath = "Resources"); + } + + _hostAppOptions?.ConfigurePreServices?.Invoke(hostAppContext); + + //健康检查 + services.AddHealthChecks(); + + var cacheConfig = AppInfo.GetOptions(); + + #region 缓存 + //添加内存缓存 + services.AddMemoryCache(); + if (cacheConfig.Type == CacheType.Redis) + { + //FreeRedis客户端 + var redis = new RedisClient(cacheConfig.Redis.ConnectionString) + { + Serialize = JsonConvert.SerializeObject, + Deserialize = JsonConvert.DeserializeObject + }; + services.AddSingleton(redis); + services.AddSingleton(redis); + //Redis缓存 + services.AddSingleton(); + //分布式Redis缓存 + services.AddSingleton(new DistributedCache(redis)); + if(_hostAppOptions?.ConfigureIdGenerator != null) + { + _hostAppOptions?.ConfigureIdGenerator?.Invoke(appConfig.IdGenerator); + YitIdHelper.SetIdGenerator(appConfig.IdGenerator); + } + else + { + //分布式Id生成器 + services.AddIdGenerator(); + } + } + else + { + //内存缓存 + services.AddSingleton(); + //分布式内存缓存 + services.AddDistributedMemoryCache(); + //Id生成器 + _hostAppOptions?.ConfigureIdGenerator?.Invoke(appConfig.IdGenerator); + YitIdHelper.SetIdGenerator(appConfig.IdGenerator); + } + + #endregion 缓存 + + //权限处理 + services.AddScoped(); + + // ClaimType不被更改 + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); + + //用户信息 + services.AddSingleton(); + services.TryAddScoped(); + + //添加数据库 + if (!_hostAppOptions.CustomInitDb) + { + services.AddDb(env, _hostAppOptions); + } + + //程序集 + Assembly[] assemblies = AssemblyHelper.GetAssemblyList(appConfig.AssemblyNames); + + #region Mapster 映射配置 + services.AddScoped(sp => new Mapper()); + if (assemblies?.Length > 0) + { + TypeAdapterConfig.GlobalSettings.Scan(assemblies); + } + #endregion Mapster 映射配置 + + #region Cors 跨域 + services.AddCors(options => + { + //指定跨域访问时预检等待时间 + var preflightMaxAge = appConfig.PreflightMaxAge > 0 ? new TimeSpan(0, 0, appConfig.PreflightMaxAge) : new TimeSpan(0, 30, 0); + options.AddDefaultPolicy(policy => + { + policy.SetPreflightMaxAge(preflightMaxAge); + + var hasOrigins = appConfig.CorUrls?.Length > 0; + if (hasOrigins) + { + policy.WithOrigins(appConfig.CorUrls); + } + else + { + policy.AllowAnyOrigin(); + } + policy + .AllowAnyHeader() + .AllowAnyMethod(); + + if (hasOrigins) + { + policy.AllowCredentials(); + } + + policy.WithExposedHeaders("Content-Disposition"); + }); + + //允许任何源访问Api策略,使用时在控制器或者接口上增加特性[EnableCors(AdminConsts.AllowAnyPolicyName)] + options.AddPolicy(AdminConsts.AllowAnyPolicyName, policy => + { + policy + .AllowAnyOrigin() + .AllowAnyHeader() + .AllowAnyMethod(); + }); + }); + + #endregion Cors 跨域 + + #region 身份认证授权 + services.AddAuthentication(options => + { + options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; + options.DefaultChallengeScheme = nameof(ResponseAuthenticationHandler); //401 + options.DefaultForbidScheme = nameof(ResponseAuthenticationHandler); //403 + }) + //.AddCookie(options => + //{ + // options.Cookie.SameSite = SameSiteMode.Lax; + //}) + .AddJwtBearer(options => + { + //ids4 + if (appConfig.IdentityServer.Enable) + { + options.Authority = appConfig.IdentityServer.Url; + options.RequireHttpsMetadata = appConfig.IdentityServer.RequireHttpsMetadata; + options.Audience = appConfig.IdentityServer.Audience; + } + else + { + var jwtConfig = AppInfo.GetOptions(); + options.TokenValidationParameters = new TokenValidationParameters + { + ValidateIssuer = true, + ValidateAudience = true, + ValidateLifetime = true, + ValidateIssuerSigningKey = true, + ValidIssuer = jwtConfig.Issuer, + ValidAudience = jwtConfig.Audience, + IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtConfig.SecurityKey)), + ClockSkew = TimeSpan.FromSeconds(10) + }; + } + }) + .AddScheme(nameof(ResponseAuthenticationHandler), o => { }); + + #endregion 身份认证授权 + + #region 操作日志 + + services.AddScoped(); + + #endregion 操作日志 + + #region 控制器 + void mvcConfigure(MvcOptions options) + { + //options.Filters.Add(); + options.Filters.Add(); + if (appConfig.Validate.Login || appConfig.Validate.Permission) + { + options.Filters.Add(); + } + //在具有较高的 Order 值的筛选器之前运行 before 代码 + //在具有较高的 Order 值的筛选器之后运行 after 代码 + if (appConfig.DynamicApi.FormatResult) + { + options.Filters.Add(20); + } + + options.Filters.Add(10); + + //禁止去除ActionAsync后缀 + //options.SuppressAsyncSuffixInActionNames = false; + + if (env.IsDevelopment() || appConfig.Swagger.Enable) + { + //API分组约定 + options.Conventions.Add(new ApiGroupConvention()); + } + } + + var mvcBuilder = appConfig.AppType switch + { + AppType.Controllers => services.AddControllers(mvcConfigure), + AppType.ControllersWithViews => services.AddControllersWithViews(mvcConfigure), + AppType.MVC => services.AddMvc(mvcConfigure), + _ => services.AddControllers(mvcConfigure) + }; + + if (assemblies?.Length > 0) + { + foreach (var assembly in assemblies) + { + services.AddValidatorsFromAssembly(assembly); + } + } + services.AddFluentValidationAutoValidation(); + + mvcBuilder.AddNewtonsoftJson(options => + { + //忽略循环引用 + options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; + //使用驼峰 首字母小写 + options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); + //设置时间格式 + options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss.FFFFFFFK"; + }) + .AddControllersAsServices(); + + if (appConfig.Lang.EnableJson) + { + //加载模块信息 + var modules = new List(); + foreach (var assembly in assemblies) + { + modules.Add(new ModuleInfo + { + Assembly = assembly, + LocalizerType = assembly.GetTypes().FirstOrDefault(m => typeof(IModuleLocalizer).IsAssignableFrom(m)) + }); + } + + mvcBuilder + .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix) + .AddDataAnnotationsLocalization(options => + { + options.DataAnnotationLocalizerProvider = (type, factory) => + { + var module = modules.FirstOrDefault(m => m.Assembly == type.Assembly); + if (module != null && module.LocalizerType != null) + { + return factory.Create(module.LocalizerType); + } + + return factory.Create(type); + }; + }); + } + + if (appConfig.Swagger.EnableJsonStringEnumConverter) + mvcBuilder.AddJsonOptions(options => options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter())); + + _hostAppOptions?.ConfigureMvcBuilder?.Invoke(mvcBuilder, hostAppContext); + #endregion 控制器 + + #region Swagger Api文档 + + if (env.IsDevelopment() || appConfig.Swagger.Enable) + { + services.AddSwaggerGen(options => + { + appConfig.Swagger.Projects?.ForEach(project => + { + options.SwaggerDoc(project.Code.ToLower(), new OpenApiInfo + { + Title = project.Name, + Version = project.Version, + Description = project.Description + }); + }); + + options.CustomOperationIds(apiDesc => + { + var controllerAction = apiDesc.ActionDescriptor as ControllerActionDescriptor; + var api = controllerAction.AttributeRouteInfo.Template; + api = Regex.Replace(api, @"[\{\\\/\}]", "-") + "-" + apiDesc.HttpMethod.ToLower(); + return api.Replace("--", "-"); + }); + + options.ResolveConflictingActions(apiDescription => apiDescription.First()); + + string DefaultSchemaIdSelector(Type modelType) + { + var modelName = modelType.Name; + if (appConfig.Swagger.EnableSchemaIdNamespace) + { + var nameSpaceList = appConfig.Swagger.AssemblyNameList; + if (nameSpaceList?.Length > 0) + { + var nameSpace = modelType.Namespace; + if (nameSpaceList.Where(a => nameSpace.Contains(a)).Any()) + { + modelName = modelType.FullName; + } + } + else + { + modelName = modelType.FullName; + } + } + + if (modelType.IsConstructedGenericType) + { + var prefix = modelType.GetGenericArguments() + .Select(DefaultSchemaIdSelector) + .Aggregate((previous, current) => previous + current); + + modelName = modelName.Split('`').First() + prefix; + } + else + { + modelName = modelName.Replace("[]", "Array"); + } + + if (modelType.IsDefined(typeof(SchemaIdAttribute))) + { + var swaggerSchemaIdAttribute = modelType.GetCustomAttribute(false); + if (swaggerSchemaIdAttribute.SchemaId.NotNull()) + { + return swaggerSchemaIdAttribute.SchemaId; + } + else + { + return swaggerSchemaIdAttribute.Prefix + modelName + swaggerSchemaIdAttribute.Suffix; + } + } + + return modelName; + } + + options.CustomSchemaIds(modelType => DefaultSchemaIdSelector(modelType)); + + //支持多分组 + options.DocInclusionPredicate((docName, apiDescription) => + { + var nonGroup = false; + var groupNames = new List(); + var dynamicApiAttribute = apiDescription.ActionDescriptor.EndpointMetadata.FirstOrDefault(x => x is DynamicApiAttribute); + if (dynamicApiAttribute != null) + { + var dynamicApi = dynamicApiAttribute as DynamicApiAttribute; + if (dynamicApi.GroupNames?.Length > 0) + { + groupNames.AddRange(dynamicApi.GroupNames); + } + } + + var apiGroupAttribute = apiDescription.ActionDescriptor.EndpointMetadata.FirstOrDefault(x => x is ApiGroupAttribute); + if (apiGroupAttribute != null) + { + var apiGroup = apiGroupAttribute as ApiGroupAttribute; + if (apiGroup.GroupNames?.Length > 0) + { + groupNames.AddRange(apiGroup.GroupNames); + } + nonGroup = apiGroup.NonGroup; + } + + return docName == apiDescription.GroupName || groupNames.Any(a => a == docName) || nonGroup; + }); + + string[] xmlFiles = Directory.GetFiles(AppContext.BaseDirectory, "*.xml"); + if (xmlFiles.Length > 0) + { + foreach (var xmlFile in xmlFiles) + { + options.IncludeXmlComments(xmlFile, true); + } + } + + var server = new OpenApiServer() + { + Url = appConfig.Swagger.Url, + Description = "" + }; + if (appConfig.ApiUI.Footer.Enable) + { + server.Extensions.Add("extensions", new OpenApiObject + { + ["copyright"] = new OpenApiString(appConfig.ApiUI.Footer.Content) + }); + } + options.AddServer(server); + + if (appConfig.Swagger.EnableEnumSchemaFilter) + { + options.SchemaFilter(); + } + if (appConfig.Swagger.EnableOrderTagsDocumentFilter) + { + options.DocumentFilter(); + } + options.OrderActionsBy(apiDesc => + { + var order = 0; + var objOrderAttribute = apiDesc.CustomAttributes().FirstOrDefault(x => x is OrderAttribute); + if (objOrderAttribute != null) + { + var orderAttribute = objOrderAttribute as OrderAttribute; + order = orderAttribute.Value; + } + return (int.MaxValue - order).ToString().PadLeft(int.MaxValue.ToString().Length, '0'); + }); + + #region 添加设置Token的按钮 + + if (appConfig.IdentityServer.Enable) + { + //添加Jwt验证设置 + options.AddSecurityRequirement(new OpenApiSecurityRequirement() + { + { + new OpenApiSecurityScheme + { + Reference = new OpenApiReference + { + Id = "oauth2", + Type = ReferenceType.SecurityScheme + } + }, + new List() + } + }); + + //统一认证 + options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme + { + Type = SecuritySchemeType.OAuth2, + Description = "oauth2登录授权", + Flows = new OpenApiOAuthFlows + { + Implicit = new OpenApiOAuthFlow + { + AuthorizationUrl = new Uri($"{appConfig.IdentityServer.Url}/connect/authorize", UriKind.Absolute), + TokenUrl = new Uri($"{appConfig.IdentityServer.Url}/connect/token", UriKind.Absolute), + Scopes = new Dictionary + { + { "admin.server.api", "admin后端api" } + } + } + } + }); + } + else + { + //添加Jwt验证设置 + options.AddSecurityRequirement(new OpenApiSecurityRequirement() + { + { + new OpenApiSecurityScheme + { + Reference = new OpenApiReference + { + Id = "Bearer", + Type = ReferenceType.SecurityScheme + } + }, + new List() + } + }); + + options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme + { + Description = "Value: Bearer {token}", + Name = "Authorization", + In = ParameterLocation.Header, + Type = SecuritySchemeType.ApiKey + }); + } + + #endregion 添加设置Token的按钮 + }); + } + + #endregion Swagger Api文档 + + services.AddHttpClient(); + + _hostAppOptions?.ConfigureServices?.Invoke(hostAppContext); + + #region IP限流 + + if (appConfig.RateLimit) + { + services.AddIpRateLimit(configuration, cacheConfig); + } + + #endregion IP限流 + + //阻止NLog接收状态消息 + services.Configure(opts => opts.SuppressStatusMessages = true); + + //性能分析 + if (appConfig.MiniProfiler) + { + services.AddMiniProfiler(); + } + + //动态api + services.AddDynamicApi(options => + { + options.FormatResult = appConfig.DynamicApi.FormatResult; + options.FormatResultType = typeof(ResultOutput<>); + options.AddAssemblyOptions(GetType().Assembly); + _hostAppOptions?.ConfigureDynamicApi?.Invoke(options); + }); + + //oss文件上传 + services.AddOSS(); + + //滑块验证码 + services.AddSlideCaptcha(configuration, options => + { + options.StoreageKeyPrefix = CacheKeys.Captcha; + }); + services.AddScoped(); + + //IP地址定位库 + if (appConfig.IP2Region.Enable) + { + services.AddSingleton(new Searcher(CachePolicy.Content, Path.Combine(AppContext.BaseDirectory, "ip2region.xdb"))); + } + + //im即时通讯 + var imConfig = AppInfo.GetOptions(); + if (imConfig.Enable) + { + services.AddIm(); + } + + // Api文档处理 + //services.AddSingleton(); + + //Grpc + services.AddCodeFirstGrpc(options => + { + options.EnableDetailedErrors = true; + //options.ResponseCompressionLevel = CompressionLevel.Optimal; + }); + //for postman + services.AddCodeFirstGrpcReflection(); + + var rpcConfig = AppInfo.GetOptions(); + if (rpcConfig?.Grpc != null && rpcConfig.Grpc.Enable) + { + services.AddMyGrpcClients(AssemblyHelper.GetAssemblyList(rpcConfig.Grpc.AssemblyNames), rpcConfig, PolicyHelper.GetPolicyList()); + } + if (rpcConfig?.Http != null && rpcConfig.Http.Enable) + { + services.AddMyHttpClients(AssemblyHelper.GetAssemblyList(rpcConfig.Http.AssemblyNames), rpcConfig, PolicyHelper.GetPolicyList()); + } + + _hostAppOptions?.ConfigurePostServices?.Invoke(hostAppContext); + } + + /// + /// 配置中间件 + /// + /// + /// + /// + /// + private void ConfigureMiddleware(WebApplication app, IWebHostEnvironment env, IConfiguration configuration, AppConfig appConfig) + { + var hostAppMiddlewareContext = new HostAppMiddlewareContext() + { + App = app, + Environment = env, + Configuration = configuration + }; + + _hostAppOptions?.ConfigurePreMiddleware?.Invoke(hostAppMiddlewareContext); + + //异常处理 + app.UseMiddleware(); + + IdentityModelEventSource.ShowPII = true; + + //多语言 + app.UseMyLocalization(); + + //IP限流 + if (appConfig.RateLimit) + { + app.UseIpRateLimiting(); + } + + //性能分析 + if (appConfig.MiniProfiler) + { + app.UseMiniProfiler(); + } + + //静态文件 + app.UseDefaultFiles(); + app.UseStaticFiles(); + + //路由 + app.UseRouting(); + + //跨域 + app.UseCors(); + + //app.UseCookiePolicy(new CookiePolicyOptions { MinimumSameSitePolicy = SameSiteMode.Lax }); + + //认证 + app.UseAuthentication(); + + //授权 + app.UseAuthorization(); + + //登录用户初始化数据权限 + if (appConfig.Validate.DataPermission) + { + app.Use(async (ctx, next) => + { + var user = ctx.RequestServices.GetRequiredService(); + if (user?.Id > 0) + { + //排除匿名或者登录接口 + var endpoint = ctx.GetEndpoint(); + if (appConfig.Validate.ApiDataPermission && endpoint != null && !endpoint.Metadata.Any(m => m.GetType() == typeof(AllowAnonymousAttribute) || m.GetType() == typeof(LoginAttribute))) + { + var actionDescriptor = endpoint.Metadata.GetMetadata(); + var template = actionDescriptor?.AttributeRouteInfo?.Template; + AppInfo.CurrentDataPermissionApiPath = template.NotNull() ? $"/{template}" : null; + } + + var userGrpcService = ctx.RequestServices.GetRequiredService(); + await userGrpcService.GetDataPermissionAsync(AppInfo.CurrentDataPermissionApiPath); + } + + await next(); + }); + } + + //配置端点 + app.MapControllers(); + + //获取枚举列表接口 + if (env.IsDevelopment()) + { + foreach (var project in appConfig.Swagger?.Projects) + { + app.MapGet($"/api/{project.Code.ToLower()}/get-enums", (ApiHelper apiHelper) => ResultOutput.Ok(apiHelper.GetEnumList())); + } + } + + _hostAppOptions?.ConfigureMiddleware?.Invoke(hostAppMiddlewareContext); + + #region Swagger Api文档 + if (env.IsDevelopment() || appConfig.Swagger.Enable) + { + var routePrefix = appConfig.ApiUI.RoutePrefix; + if (!appConfig.ApiUI.Enable && routePrefix.IsNull()) + { + routePrefix = appConfig.Swagger.RoutePrefix; + } + + app.UseSwagger(optoins => + { + optoins.RouteTemplate = routePrefix + (optoins.RouteTemplate.StartsWith("/") ? "" : "/") + optoins.RouteTemplate; + }); + app.UseSwaggerUI(options => + { + options.ConfigObject.AdditionalItems.Add("persistAuthorization", "true"); + + options.RoutePrefix = appConfig.Swagger.RoutePrefix; + appConfig.Swagger.Projects?.ForEach(project => + { + options.SwaggerEndpoint($"/{routePrefix}/swagger/{project.Code.ToLower()}/swagger.json", project.Name); + }); + + options.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.None);//折叠Api + //options.DefaultModelsExpandDepth(-1);//不显示Models + if (appConfig.MiniProfiler) + { + options.InjectJavascript("/swagger/mini-profiler.js?v=4.2.22+2.0"); + options.InjectStylesheet("/swagger/mini-profiler.css?v=4.2.22+2.0"); + } + + _hostAppOptions?.ConfigureSwaggerUI?.Invoke(options); + }); + } + #endregion Swagger Api文档 + + //使用健康检查 + if (appConfig.HealthChecks.Enable) + { + app.MapHealthChecks(appConfig.HealthChecks.Path, new HealthCheckOptions() + { + Predicate = _ => true, + ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse + }); + } + + //内置任务调度管理界面 + if (appConfig.TaskSchedulerUI.Enable) + { + app.UseFreeSchedulerUI(appConfig.TaskSchedulerUI.Path.NotNull() ? appConfig.TaskSchedulerUI.Path : "/task"); + } + + //自动同步接口数据 + //if (appConfig.Swagger.EnableAutoSync) + //{ + // var apiDocumentHandler = app.Services.GetService(); + // Task.Run(async () => { await apiDocumentHandler.SyncAsync(); }); + //} + + //Grpc + var rpcConfig = AppInfo.GetOptions(); + if (rpcConfig?.Grpc != null && rpcConfig.Grpc.Enable) + { + IEnumerable assemblies = []; + if (rpcConfig.Grpc.ServerAssemblyNames?.Length > 0) + { + var serverAssemblies = AssemblyHelper.GetAssemblyList(rpcConfig.Grpc.ServerAssemblyNames); + assemblies = assemblies.Union(serverAssemblies).ToList(); + } + + app.UseMyMapGrpcService(assemblies); + } + + //for postman + app.MapCodeFirstGrpcReflectionService(); + + _hostAppOptions?.ConfigurePostMiddleware?.Invoke(hostAppMiddlewareContext); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/HostInfo.cs b/src/modules/admin/ZhonTai.Admin.Core/HostInfo.cs new file mode 100644 index 0000000..91eaa08 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/HostInfo.cs @@ -0,0 +1,79 @@ +using System.Reflection; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Admin.Core; + +/// +/// 宿主信息 +/// +public class HostInfo +{ + /// + /// 唯一Id + /// + public string Id { get; private set; } = string.Empty; + + /// + /// 名称 + /// + public string Name { get; private set; } = string.Empty; + + /// + /// 短命名 + /// + public string ShortName { get; private set; } = string.Empty; + + /// + /// 全命名 + /// + public string FullName { get; private set; } = string.Empty; + + /// + /// 版本号 + /// + public string Version { get; private set; } = string.Empty; + + /// + /// 描述 + /// + public string Description { get; private set; } = string.Empty; + + private HostInfo() + { + } + + public static HostInfo CreateInstance(Assembly assembly) + { + if (assembly is null) + assembly = Assembly.GetEntryAssembly() ?? throw new NullReferenceException(nameof(assembly)); + + var attribute = assembly.GetCustomAttribute(); + var description = attribute is null ? string.Empty : attribute.Description; + var version = assembly.GetName().Version ?? throw new NullReferenceException("startAssembly.GetName().Version"); + var assemblyName = assembly.GetName().Name ?? string.Empty; + var serviceName = assemblyName.Replace(".", "-").ToLower(); + var ticks = DateTime.Now.ToTimestamp(true); + var ticksHex = Convert.ToString(ticks, 16); + var envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")?.ToLower(); + var serviceId = envName switch + { + "development" => $"{serviceName}-dev-{ticksHex}", + "test" => $"{serviceName}-test-{ticksHex}", + "staging" => $"{serviceName}-stag-{ticksHex}", + "production" => $"{serviceName}-prod-{ticksHex}", + _ => $"{serviceName}-{envName}-{ticksHex}", + }; + + var assemblyNames = assemblyName.Split("."); + + return new HostInfo + { + Id = serviceId, + Name = assemblyNames[^2].ToLower(), + FullName = serviceName, + ShortName = $"{assemblyNames[^2]}-{assemblyNames[^1]}".ToLower(), + Description = description, + Version = $"{version.Major}.{version.Minor}.{version.Build}.{version.Revision}" + }; + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Middlewares/ExceptionMiddleware.cs b/src/modules/admin/ZhonTai.Admin.Core/Middlewares/ExceptionMiddleware.cs new file mode 100644 index 0000000..3b8c054 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Middlewares/ExceptionMiddleware.cs @@ -0,0 +1,67 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; +using System.Net; +using ZhonTai.Admin.Core.Exceptions; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Common.Helpers; + +namespace ZhonTai.Admin.Core.Middlewares; + +/// +/// 异常中间件 +/// +public class ExceptionMiddleware +{ + private readonly RequestDelegate _next; + private readonly ILogger _logger; + + public ExceptionMiddleware(RequestDelegate next, ILogger logger) + { + _next = next; + _logger = logger; + } + + public async Task InvokeAsync(HttpContext httpContext) + { + try + { + await _next(httpContext); + } + catch (AppException ex) + { + await HandleAppExceptionAsync(httpContext, ex); + } + catch (Exception ex) + { + await HandleExceptionAsync(httpContext, ex); + } + } + + private static Task HandleAppExceptionAsync(HttpContext context, AppException appException) + { + context.Response.ContentType = "application/json"; + context.Response.StatusCode = appException.StatusCode; + + return context.Response.WriteAsync(JsonHelper.Serialize(new ResultOutput() + { + Code = appException.AppCode + }.NotOk(appException.AppMessage))); + } + + private Task HandleExceptionAsync(HttpContext context, Exception exception) + { + context.Response.ContentType = "application/json"; + context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; + + var authorization = context.Request.Headers.Authorization.FirstOrDefault(); + var userAgent = context.Request.Headers.UserAgent.FirstOrDefault(); + context.Items.TryGetValue("_ActionArguments", out object? actionArguments); + _logger.LogError(exception, + "Error while processing request. \r\nActionArguments: {ActionArguments} \r\nAuthorization: {Authorization} \r\nUserAgent: {UserAgent}\r\n", + actionArguments != null ? JsonHelper.Serialize(actionArguments) : "", + authorization, + userAgent); + + return context.Response.WriteAsync(JsonHelper.Serialize(new ResultOutput().NotOk(exception.Message))); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/ModuleInfo.cs b/src/modules/admin/ZhonTai.Admin.Core/ModuleInfo.cs new file mode 100644 index 0000000..5da7b43 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/ModuleInfo.cs @@ -0,0 +1,19 @@ +using System.Reflection; + +namespace ZhonTai.Admin.Core; + +/// +/// 模块信息 +/// +public class ModuleInfo +{ + /// + /// 任务层程序集 + /// + public Assembly Assembly { get; set; } + + /// + /// 多语言文件类型 + /// + public Type LocalizerType { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoBoolean.cs b/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoBoolean.cs new file mode 100644 index 0000000..3c49c5e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoBoolean.cs @@ -0,0 +1,29 @@ +using ProtoBuf; + +namespace ZhonTai.Admin.Core.Protos; + +/// +/// ProtoBoolean 表示 Grpc 请求或响应中的 bool +/// +[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] +public class ProtoBoolean +{ + public bool Value { get; set; } + + public ProtoBoolean() { } + + public ProtoBoolean(bool value) + { + Value = value; + } + + public static implicit operator ProtoBoolean(bool value) + { + return new ProtoBoolean(value); + } + + public static implicit operator bool(ProtoBoolean result) + { + return result.Value; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoDateTime.cs b/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoDateTime.cs new file mode 100644 index 0000000..b4d85ce --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoDateTime.cs @@ -0,0 +1,29 @@ +using ProtoBuf; + +namespace ZhonTai.Admin.Core.Protos; + +/// +/// ProtoDateTime 表示 Grpc 请求或响应中的 DateTime +/// +[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] +public class ProtoDateTime +{ + public DateTime Value { get; set; } + + public ProtoDateTime() { } + + public ProtoDateTime(DateTime value) + { + Value = value; + } + + public static implicit operator ProtoDateTime(DateTime value) + { + return new ProtoDateTime(value); + } + + public static implicit operator DateTime(ProtoDateTime result) + { + return result.Value; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoDecimal.cs b/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoDecimal.cs new file mode 100644 index 0000000..e450d85 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoDecimal.cs @@ -0,0 +1,29 @@ +using ProtoBuf; + +namespace ZhonTai.Admin.Core.Protos; + +/// +/// ProtoDecimal 表示 Grpc 请求或响应中的 decimal +/// +[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] +public class ProtoDecimal +{ + public decimal Value { get; set; } + + public ProtoDecimal() { } + + public ProtoDecimal(decimal value) + { + Value = value; + } + + public static implicit operator ProtoDecimal(decimal value) + { + return new ProtoDecimal(value); + } + + public static implicit operator decimal(ProtoDecimal result) + { + return result.Value; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoInt.cs b/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoInt.cs new file mode 100644 index 0000000..b8f709d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoInt.cs @@ -0,0 +1,29 @@ +using ProtoBuf; + +namespace ZhonTai.Admin.Core.Protos; + +/// +/// ProtoInt 表示 Grpc 请求或响应中的 int +/// +[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] +public class ProtoInt +{ + public int Value { get; set; } + + public ProtoInt() { } + + public ProtoInt(int value) + { + Value = value; + } + + public static implicit operator ProtoInt(int value) + { + return new ProtoInt(value); + } + + public static implicit operator long(ProtoInt result) + { + return result.Value; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoList.cs b/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoList.cs new file mode 100644 index 0000000..ed2e38b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoList.cs @@ -0,0 +1,29 @@ +using ProtoBuf; + +namespace ZhonTai.Admin.Core.Protos; + +/// +/// ProtoList 表示 Grpc 请求或响应中的 List +/// +[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] +public class ProtoList +{ + public List Value { get; set; } + + public ProtoList() { } + + public ProtoList(List value) + { + Value = value; + } + + public static implicit operator ProtoList(List value) + { + return new ProtoList(value); + } + + public static implicit operator List(ProtoList result) + { + return result.Value; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoLong.cs b/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoLong.cs new file mode 100644 index 0000000..5fd2299 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoLong.cs @@ -0,0 +1,29 @@ +using ProtoBuf; + +namespace ZhonTai.Admin.Core.Protos; + +/// +/// ProtoLong 表示 Grpc 请求或响应中的 long +/// +[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] +public class ProtoLong +{ + public long Value { get; set; } + + public ProtoLong() { } + + public ProtoLong(long value) + { + Value = value; + } + + public static implicit operator ProtoLong(long value) + { + return new ProtoLong(value); + } + + public static implicit operator long(ProtoLong result) + { + return result.Value; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoString.cs b/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoString.cs new file mode 100644 index 0000000..2723429 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Protos/ProtoString.cs @@ -0,0 +1,29 @@ +using ProtoBuf; + +namespace ZhonTai.Admin.Core.Protos; + +/// +/// ProtoString 表示 Grpc 请求或响应中的 string +/// +[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] +public class ProtoString +{ + public string Value { get; set; } + + public ProtoString() { } + + public ProtoString(string value) + { + Value = value; + } + + public static implicit operator ProtoString(string value) + { + return new ProtoString(value); + } + + public static implicit operator string(ProtoString result) + { + return result.Value; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Records/LocationInfo.cs b/src/modules/admin/ZhonTai.Admin.Core/Records/LocationInfo.cs new file mode 100644 index 0000000..28ce27f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Records/LocationInfo.cs @@ -0,0 +1,49 @@ +namespace ZhonTai.Admin.Core.Records; + +/// +/// 位置信息 +/// +public record LocationInfo +{ + /// + /// 国家 + /// + public string Country { get; init; } + /// + /// 省份 + /// + public string Province { get; init; } + + /// + /// 城市 + /// + public string City { get; init; } + + /// + /// 网络服务商 + /// + public string Isp { get; init; } + + /// + /// 转换地址信息 + /// + /// + /// + public static LocationInfo Parse(string input) + { + var parts = input.Split('|'); + + if (parts.Length >= 5) + { + return new LocationInfo + { + Country = parts[0] != "0" ? parts[0] : "", + Province = parts[2] != "0" ? parts[2] : "", + City = parts[3] != "0" ? parts[3] : "", + Isp = parts[4] != "0" ? parts[4] : "", + }; + } + + return new LocationInfo(); + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/RegisterModules/ControllerModule.cs b/src/modules/admin/ZhonTai.Admin.Core/RegisterModules/ControllerModule.cs new file mode 100644 index 0000000..ba0d275 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/RegisterModules/ControllerModule.cs @@ -0,0 +1,26 @@ +using Autofac; +using Microsoft.AspNetCore.Mvc; +using System.Reflection; +using Module = Autofac.Module; + +namespace ZhonTai.Admin.Core.RegisterModules; + +public class ControllerModule : Module +{ + /// + /// 控制器注入 + /// + public ControllerModule() + { + } + + protected override void Load(ContainerBuilder builder) + { + var controllerTypes = Assembly.GetExecutingAssembly().GetExportedTypes() + .Where(a => typeof(ControllerBase).IsAssignableFrom(a) && !a.IsAbstract && !a.IsInterface && a.IsPublic) + .ToArray(); + + // 配置所有控制器均支持属性注入 + builder.RegisterTypes(controllerTypes).PropertiesAutowired(); + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/RegisterModules/IRegisterIOC.cs b/src/modules/admin/ZhonTai.Admin.Core/RegisterModules/IRegisterIOC.cs new file mode 100644 index 0000000..791c6b1 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/RegisterModules/IRegisterIOC.cs @@ -0,0 +1,9 @@ +namespace ZhonTai.Admin.Core.RegisterModules; + +/// +/// 注册到第三方IOC容器 +/// +public interface IRegisterIOC +{ + +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/RegisterModules/LifecycleModule.cs b/src/modules/admin/ZhonTai.Admin.Core/RegisterModules/LifecycleModule.cs new file mode 100644 index 0000000..8d73dd7 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/RegisterModules/LifecycleModule.cs @@ -0,0 +1,75 @@ +using Autofac; +using System.Reflection; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Common.Helpers; +using Module = Autofac.Module; + +namespace ZhonTai.Admin.Core.RegisterModules; + +/// +/// 生命周期注入 +/// +public class LifecycleModule : Module +{ + private readonly AppConfig _appConfig; + + public LifecycleModule(AppConfig appConfig) + { + _appConfig = appConfig; + } + + protected override void Load(ContainerBuilder builder) + { + // 获得要注入的程序集 + Assembly[] assemblies = null; + if (_appConfig.AssemblyNames?.Length > 0) + { + assemblies = AssemblyHelper.GetAssemblyList(_appConfig.AssemblyNames); + } + + if (!(assemblies?.Length > 0)) + { + return; + } + + //无接口注入单例 + builder.RegisterAssemblyTypes(assemblies) + .Where(t => t.GetCustomAttribute(false) != null) + .SingleInstance() + .PropertiesAutowired(); + + //有接口注入单例 + builder.RegisterAssemblyTypes(assemblies) + .Where(t => t.GetCustomAttribute(false) != null) + .AsImplementedInterfaces() + .SingleInstance() + .PropertiesAutowired(); + + //无接口注入作用域 + builder.RegisterAssemblyTypes(assemblies) + .Where(t => t.GetCustomAttribute(false) != null) + .InstancePerLifetimeScope() + .PropertiesAutowired(); + + //有接口注入作用域 + builder.RegisterAssemblyTypes(assemblies) + .Where(t => t.GetCustomAttribute(false) != null) + .AsImplementedInterfaces() + .InstancePerLifetimeScope() + .PropertiesAutowired(); + + //无接口注入瞬时 + builder.RegisterAssemblyTypes(assemblies) + .Where(t => t.GetCustomAttribute(false) != null) + .InstancePerDependency() + .PropertiesAutowired(); + + //有接口注入瞬时 + builder.RegisterAssemblyTypes(assemblies) + .Where(t => t.GetCustomAttribute(false) != null) + .AsImplementedInterfaces() + .InstancePerDependency() + .PropertiesAutowired(); + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/RegisterModules/RegisterModule.cs b/src/modules/admin/ZhonTai.Admin.Core/RegisterModules/RegisterModule.cs new file mode 100644 index 0000000..30912d0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/RegisterModules/RegisterModule.cs @@ -0,0 +1,78 @@ +using Autofac; +using Autofac.Extras.DynamicProxy; +using System.Reflection; +using Microsoft.AspNetCore.Identity; +using Module = Autofac.Module; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Core.Repositories; +using ZhonTai.Common.Helpers; + +namespace ZhonTai.Admin.Core.RegisterModules; + +public class RegisterModule : Module +{ + private readonly AppConfig _appConfig; + + /// + /// 模块注入 + /// + /// AppConfig + public RegisterModule(AppConfig appConfig) + { + _appConfig = appConfig; + } + + protected override void Load(ContainerBuilder builder) + { + //事务拦截 + var interceptorServiceTypes = new List(); + if (_appConfig.Aop.Transaction) + { + builder.RegisterType(); + builder.RegisterType(); + interceptorServiceTypes.Add(typeof(TransactionInterceptor)); + } + + // 获得要注入的程序集 + Assembly[] assemblies = null; + if (_appConfig.AssemblyNames?.Length > 0) + { + assemblies = AssemblyHelper.GetAssemblyList(_appConfig.AssemblyNames); + } + + if (!(assemblies?.Length > 0)) + { + return; + } + + static bool Predicate(Type a) => !a.IsDefined(typeof(NonRegisterIOCAttribute), true) + && (a.Name.EndsWith("Service") || a.Name.EndsWith("Repository") || typeof(IRegisterIOC).IsAssignableFrom(a)) + && !a.IsAbstract && !a.IsInterface && a.IsPublic; + + //有接口实例 + builder.RegisterAssemblyTypes(assemblies) + .Where(new Func(Predicate)) + .AsImplementedInterfaces() + .InstancePerLifetimeScope() + .PropertiesAutowired()// 属性注入 + .InterceptedBy(interceptorServiceTypes.ToArray()) + .EnableInterfaceInterceptors(); + + //无接口实例 + builder.RegisterAssemblyTypes(assemblies) + .Where(new Func(Predicate)) + .InstancePerLifetimeScope() + .PropertiesAutowired()// 属性注入 + .InterceptedBy(interceptorServiceTypes.ToArray()) + .EnableClassInterceptors(); + + //密码哈希泛型注入 + builder.RegisterGeneric(typeof(PasswordHasher<>)).As(typeof(IPasswordHasher<>)).SingleInstance().PropertiesAutowired(); + + //仓储泛型注入 + builder.RegisterGeneric(typeof(RepositoryBase<>)).As(typeof(IRepositoryBase<>)).InstancePerLifetimeScope().PropertiesAutowired(); + builder.RegisterGeneric(typeof(RepositoryBase<,>)).As(typeof(IRepositoryBase<,>)).InstancePerLifetimeScope().PropertiesAutowired(); + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Repositories/IRepositoryBase.cs b/src/modules/admin/ZhonTai.Admin.Core/Repositories/IRepositoryBase.cs new file mode 100644 index 0000000..133ec4f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Repositories/IRepositoryBase.cs @@ -0,0 +1,74 @@ +using FreeSql; +using System.Linq.Expressions; +using ZhonTai.Admin.Core.Auth; + +namespace ZhonTai.Admin.Core.Repositories; + +public interface IRepositoryBase : IBaseRepository where TEntity : class +{ + IUser User { get; set; } + + /// + /// 获得Dto + /// + /// + /// 主键 + /// + Task GetAsync(TKey id); + + /// + /// 根据条件获取Dto + /// + /// + /// + Task GetAsync(Expression> exp); + + /// + /// 根据条件获取实体 + /// + /// + /// + Task GetAsync(Expression> exp); + + /// + /// 软删除 + /// + /// 主键 + /// + Task SoftDeleteAsync(TKey id); + + /// + /// 批量软删除 + /// + /// 主键数组 + /// + Task SoftDeleteAsync(TKey[] ids); + + /// + /// 软删除 + /// + /// + /// 禁用全局过滤器名 + /// + Task SoftDeleteAsync(Expression> exp, params string[] disableGlobalFilterNames); + + /// + /// 递归删除 + /// + /// + /// 禁用全局过滤器名 + /// + Task DeleteRecursiveAsync(Expression> exp, params string[] disableGlobalFilterNames); + + /// + /// 递归软删除 + /// + /// + /// 禁用全局过滤器名 + /// + Task SoftDeleteRecursiveAsync(Expression> exp, params string[] disableGlobalFilterNames); +} + +public interface IRepositoryBase : IRepositoryBase where TEntity : class +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Repositories/RepositoryBase.cs b/src/modules/admin/ZhonTai.Admin.Core/Repositories/RepositoryBase.cs new file mode 100644 index 0000000..8ba9ac3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Repositories/RepositoryBase.cs @@ -0,0 +1,126 @@ +using FreeSql; +using System.Linq.Expressions; +using ZhonTai.Admin.Core.Auth; +using ZhonTai.Admin.Core.Db; +using ZhonTai.Admin.Core.Db.Transaction; + +namespace ZhonTai.Admin.Core.Repositories; + +public class RepositoryBase : BaseRepository, IRepositoryBase where TEntity : class +{ + public IUser User { get; set; } + + public RepositoryBase(IFreeSql fsql) : base(fsql) { } + public RepositoryBase(IFreeSql fsql, UnitOfWorkManager uowManger) : base(uowManger?.Orm ?? fsql) + { + uowManger?.Binding(this); + } + + public virtual Task GetAsync(TKey id) + { + return Select.WhereDynamic(id).ToOneAsync(); + } + + public virtual Task GetAsync(Expression> exp) + { + return Select.Where(exp).ToOneAsync(); + } + + public virtual Task GetAsync(Expression> exp) + { + return Select.Where(exp).ToOneAsync(); + } + + public virtual async Task SoftDeleteAsync(TKey id) + { + await UpdateDiy + .SetDto(new + { + IsDeleted = true, + ModifiedUserId = User.Id, + ModifiedUserName = User.UserName, + ModifiedUserRealName = User.Name, + ModifiedTime = DbHelper.ServerTime + }) + .WhereDynamic(id) + .ExecuteAffrowsAsync(); + + return true; + } + + public virtual async Task SoftDeleteAsync(TKey[] ids) + { + await UpdateDiy + .SetDto(new + { + IsDeleted = true, + ModifiedUserId = User.Id, + ModifiedUserName = User.UserName, + ModifiedUserRealName = User.Name, + ModifiedTime = DbHelper.ServerTime + }) + .WhereDynamic(ids) + .ExecuteAffrowsAsync(); + + return true; + } + + public virtual async Task SoftDeleteAsync(Expression> exp, params string[] disableGlobalFilterNames) + { + await UpdateDiy + .SetDto(new + { + IsDeleted = true, + ModifiedUserId = User.Id, + ModifiedUserName = User.UserName, + ModifiedUserRealName = User.Name, + ModifiedTime = DbHelper.ServerTime + }) + .Where(exp) + .DisableGlobalFilter(disableGlobalFilterNames) + .ExecuteAffrowsAsync(); + + return true; + } + + public virtual async Task DeleteRecursiveAsync(Expression> exp, params string[] disableGlobalFilterNames) + { + await Select + .Where(exp) + .DisableGlobalFilter(disableGlobalFilterNames) + .AsTreeCte() + .ToDelete() + .ExecuteAffrowsAsync(); + + return true; + } + + public virtual async Task SoftDeleteRecursiveAsync(Expression> exp, params string[] disableGlobalFilterNames) + { + await Select + .Where(exp) + .DisableGlobalFilter(disableGlobalFilterNames) + .AsTreeCte() + .ToUpdate() + .SetDto(new + { + IsDeleted = true, + ModifiedUserId = User.Id, + ModifiedUserName = User.UserName, + ModifiedUserRealName = User.Name, + ModifiedTime = DbHelper.ServerTime + }) + .ExecuteAffrowsAsync(); + + return true; + } +} + +public class RepositoryBase : RepositoryBase, IRepositoryBase where TEntity : class +{ + public RepositoryBase(string db, UnitOfWorkManagerCloud uowm) : this(uowm.GetUnitOfWorkManager(db)) { } + RepositoryBase(UnitOfWorkManager uowm) : base(uowm.Orm) + { + uowm.Binding(this); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Resources/AdminCoreLocalizer.cs b/src/modules/admin/ZhonTai.Admin.Core/Resources/AdminCoreLocalizer.cs new file mode 100644 index 0000000..201ad8b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Resources/AdminCoreLocalizer.cs @@ -0,0 +1,16 @@ +using Microsoft.Extensions.Localization; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Resources; + +namespace ZhonTai.Admin.Core.Resources; + +/// +/// Admin核心库国际化 +/// +[InjectSingleton] +public class AdminCoreLocalizer: ModuleLocalizer +{ + public AdminCoreLocalizer(IStringLocalizer localizer) : base(localizer) + { + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/Resources/Core/IModuleLocalizer.cs b/src/modules/admin/ZhonTai.Admin.Core/Resources/Core/IModuleLocalizer.cs new file mode 100644 index 0000000..4156595 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Resources/Core/IModuleLocalizer.cs @@ -0,0 +1,11 @@ +using Microsoft.Extensions.Localization; + +namespace ZhonTai.Admin.Resources; + +/// +/// 模块本地化接口 +/// +public interface IModuleLocalizer : IStringLocalizer +{ + +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Resources/Core/ModuleLocalizer.cs b/src/modules/admin/ZhonTai.Admin.Core/Resources/Core/ModuleLocalizer.cs new file mode 100644 index 0000000..b3d8e2b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Resources/Core/ModuleLocalizer.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.Localization; + +namespace ZhonTai.Admin.Resources; + +/// +/// 模块本地化 +/// +public abstract class ModuleLocalizer : IModuleLocalizer +{ + private readonly IStringLocalizer _localizer; + + protected ModuleLocalizer(IStringLocalizer localizer) + { + _localizer = localizer; + } + + public IEnumerable GetAllStrings(bool includeParentCultures) + { + return _localizer.GetAllStrings(includeParentCultures); + } + + public LocalizedString this[string name] => _localizer[name]; + + public LocalizedString this[string name, params object[] arguments] => _localizer[name, arguments]; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Resources/Resources.AdminCoreLocalizer.en.json b/src/modules/admin/ZhonTai.Admin.Core/Resources/Resources.AdminCoreLocalizer.en.json new file mode 100644 index 0000000..dc4048b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Resources/Resources.AdminCoreLocalizer.en.json @@ -0,0 +1,10 @@ +{ + "请重新导入数据,再下载错误标记文件": "Please re-import the data and then download the error mark file", + "错误标记文件{0}.xlsx": "Error mark file {0}.xlsx", + "数据列表{0}.xlsx": "Data list {0}.xlsx", + "错误信息:": "Error message:", + "缺少数据列:": "Missing data column:", + "数据填写有误:": "Data is filled in incorrectly:", + "第{0}行 - {1}:{2}": "Line {0} - {1}: {2}", + "密码为字母+数字+可选特殊字符,长度在6-16之间": "The password is a combination of letters + numbers + optional special characters, with a length between 6-16" +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Startup/HostAppContext.cs b/src/modules/admin/ZhonTai.Admin.Core/Startup/HostAppContext.cs new file mode 100644 index 0000000..872d5c3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Startup/HostAppContext.cs @@ -0,0 +1,27 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace ZhonTai.Admin.Core.Startup; + +/// +/// HostApp上下文 +/// +public class HostAppContext +{ + /// + /// 服务 + /// + public IServiceCollection Services { get; set; } + + /// + /// 环境 + /// + public IHostEnvironment Environment { get; set; } + + /// + /// 配置 + /// + public IConfiguration Configuration { get; set; } +} + diff --git a/src/modules/admin/ZhonTai.Admin.Core/Startup/HostAppMiddlewareContext.cs b/src/modules/admin/ZhonTai.Admin.Core/Startup/HostAppMiddlewareContext.cs new file mode 100644 index 0000000..f0f63c4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Startup/HostAppMiddlewareContext.cs @@ -0,0 +1,27 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; + +namespace ZhonTai.Admin.Core.Startup; + +/// +/// HostApp中间件上下文 +/// +public class HostAppMiddlewareContext +{ + /// + /// 应用 + /// + public WebApplication App { get; set; } + + /// + /// 环境 + /// + public IHostEnvironment Environment { get; set; } + + /// + /// 配置 + /// + public IConfiguration Configuration { get; set; } +} + diff --git a/src/modules/admin/ZhonTai.Admin.Core/Startup/HostAppOptions.cs b/src/modules/admin/ZhonTai.Admin.Core/Startup/HostAppOptions.cs new file mode 100644 index 0000000..89ea07a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Startup/HostAppOptions.cs @@ -0,0 +1,108 @@ +using Autofac; +using FreeSql; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Swashbuckle.AspNetCore.SwaggerUI; +using Yitter.IdGenerator; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.DynamicApi; + +namespace ZhonTai.Admin.Core.Startup; + +/// +/// 宿主应用配置 +/// +public class HostAppOptions +{ + /// + /// 配置前置应用程序构建器 + /// + public Action ConfigurePreWebApplicationBuilder { get; set; } + + /// + /// 配置应用程序构建器 + /// + public Action ConfigureWebApplicationBuilder { get; set; } + + /// + /// 配置前置服务 + /// + public Action ConfigurePreServices { get; set; } + + /// + /// 配置服务 + /// + public Action ConfigureServices { get; set; } + + /// + /// 配置后置服务 + /// + public Action ConfigurePostServices { get; set; } + + /// + /// 配置mvc构建器 + /// + public Action ConfigureMvcBuilder { get; set; } + + /// + /// 配置Autofac容器 + /// + public Action ConfigureAutofacContainer { get; set; } + + /// + /// 配置前置中间件 + /// + public Action ConfigurePreMiddleware { get; set; } + + /// + /// 配置中间件 + /// + public Action ConfigureMiddleware { get; set; } + + /// + /// 配置后置中间件 + /// + public Action ConfigurePostMiddleware { get; set; } + + /// + /// 配置FreeSql构建器 + /// + public Action ConfigureFreeSqlBuilder { get; set; } + + /// + /// 配置FreeSql同步结构 + /// + public Action ConfigureFreeSqlSyncStructure { get; set; } + + /// + /// 前置配置FreeSql + /// + public Action ConfigurePreFreeSql { get; set; } + + /// + /// 配置FreeSql + /// + public Action ConfigureFreeSql { get; set; } + + + /// + /// 配置动态Api + /// + public Action ConfigureDynamicApi { get; set; } + + /// + /// 配置SwaggerUI + /// + public Action ConfigureSwaggerUI { get; set; } + + /// + /// 配置雪花漂移算法 + /// + public Action ConfigureIdGenerator { get; set; } + + /// + /// 自定义数据库初始化 + /// + public bool CustomInitDb { get; set; } = false; + +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/TaskScheduler/ShellArgs.cs b/src/modules/admin/ZhonTai.Admin.Core/TaskScheduler/ShellArgs.cs new file mode 100644 index 0000000..de07118 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/TaskScheduler/ShellArgs.cs @@ -0,0 +1,22 @@ +namespace ZhonTai.Admin.Tools.TaskScheduler; + +/// +/// Shell命令参数 +/// +public class ShellArgs +{ + /// + /// 执行应用 + /// + public string FileName { get; set; } + + /// + /// 执行参数 + /// + public string Arguments { get; set; } + + /// + /// 命令应用工作目录 + /// + public string WorkingDirectory { get; set; } +} diff --git a/src/modules/admin/ZhonTai.Admin.Core/TaskScheduler/TaskInfoExt.cs b/src/modules/admin/ZhonTai.Admin.Core/TaskScheduler/TaskInfoExt.cs new file mode 100644 index 0000000..cb3f8b0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/TaskScheduler/TaskInfoExt.cs @@ -0,0 +1,50 @@ +using FreeSql.DataAnnotations; + +namespace ZhonTai.Admin.Domain; + +/// +/// 任务邮件 +/// +public class TaskInfoExt +{ + /// + /// 任务Id + /// + public string TaskId { get; set; } + + /// + /// 报警邮件,多个邮件地址则逗号分隔 + /// + [Column(StringLength = 500)] + public string AlarmEmail { get; set; } + + /// + /// 失败重试次数 + /// + public int? FailRetryCount { get; set; } + + /// + /// 失败重试间隔(秒) + /// + public int? FailRetryInterval { get; set; } + + /// + /// 添加时间 + /// + public DateTime? CreatedTime { get; set; } + + /// + /// 添加用户Id + /// + public long? CreatedUserId { get; set; } + + /// + /// 修改时间 + /// + public DateTime? ModifiedTime { get; set; } + + /// + /// 修改用户Id + /// + public long? ModifiedUserId { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/TaskScheduler/TaskSchedulerConfig.cs b/src/modules/admin/ZhonTai.Admin.Core/TaskScheduler/TaskSchedulerConfig.cs new file mode 100644 index 0000000..d15fa15 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/TaskScheduler/TaskSchedulerConfig.cs @@ -0,0 +1,52 @@ +namespace ZhonTai.Admin.Tools.TaskScheduler; + +/// +/// 任务调度配置 +/// +public class TaskSchedulerConfig +{ + public static class Models + { + /// + /// 告警邮件 + /// + public class AlerEmail + { + /// + /// 是否启用 + /// + public bool Enable { get; set; } + + /// + /// 邮件地址 + /// + public string Address { get; set; } + } + + /// + /// 进程启动信息 + /// + public class ProcessStartInfoModel + { + /// + /// 应用程序 + /// + public string FileName { get; set; } + + /// + /// 工作目录 + /// + public string WorkingDirectory { get; set; } + } + } + + /// + /// 进程启动信息 + /// + public Models.ProcessStartInfoModel ProcessStartInfo { get; set; } + + /// + /// 告警邮件 + /// + public Models.AlerEmail AlerEmail { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/TaskScheduler/TaskSchedulerOptions.cs b/src/modules/admin/ZhonTai.Admin.Core/TaskScheduler/TaskSchedulerOptions.cs new file mode 100644 index 0000000..078af67 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/TaskScheduler/TaskSchedulerOptions.cs @@ -0,0 +1,35 @@ +using FreeSql; +using ZhonTai.Admin.Core.Consts; + +namespace ZhonTai.Admin.Tools.TaskScheduler; + +/// +/// TaskScheduler配置 +/// +public class TaskSchedulerOptions +{ + /// + /// 数据库键 + /// + public string DbKey { get; set; } = DbKeys.AppDb; + + /// + /// 数据库实例 + /// + public IFreeSql FreeSql { get; set; } + + /// + /// 多库实例 + /// + public FreeSqlCloud FreeSqlCloud { get; set; } + + /// + /// 配置FreeSql + /// + public Action ConfigureFreeSql { get; set; } + + /// + /// 配置FreeSql + /// + public Action ConfigureFreeSchedulerBuilder { get; set; } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/CacheConfig.cs b/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/CacheConfig.cs new file mode 100644 index 0000000..2faf5c6 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/CacheConfig.cs @@ -0,0 +1,38 @@ +namespace ZhonTai.Admin.Tools.Cache; + +/// +/// 缓存配置 +/// +public class CacheConfig +{ + /// + /// 缓存类型 + /// + public CacheType Type { get; set; } = CacheType.Memory; + + /// + /// 限流缓存类型 + /// + public CacheType TypeRateLimit { get; set; } = CacheType.Memory; + + /// + /// Redis配置 + /// + public RedisConfig Redis { get; set; } = new RedisConfig(); +} + +/// +/// Redis配置 +/// +public class RedisConfig +{ + /// + /// 连接字符串 + /// + public string ConnectionString { get; set; } = "127.0.0.1:6379,password=,defaultDatabase=0"; + + /// + /// 限流连接字符串 + /// + public string ConnectionStringRateLimit { get; set; } = "127.0.0.1:6379,password=,defaultDatabase=0"; +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/CacheType.cs b/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/CacheType.cs new file mode 100644 index 0000000..edc059b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/CacheType.cs @@ -0,0 +1,17 @@ +namespace ZhonTai.Admin.Tools.Cache; + +/// +/// 缓存类型 +/// +public enum CacheType +{ + /// + /// 内存缓存 + /// + Memory, + + /// + /// Redis缓存 + /// + Redis +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/ICacheTool.cs b/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/ICacheTool.cs new file mode 100644 index 0000000..52fe95b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/ICacheTool.cs @@ -0,0 +1,115 @@ +namespace ZhonTai.Admin.Tools.Cache; + +/// +/// 缓存接口 +/// +public interface ICacheTool +{ + /// + /// 用于在 key 存在时删除 key + /// + /// 键 + long Del(params string[] key); + + /// + /// 用于在 key 存在时删除 key + /// + /// 键 + /// + Task DelAsync(params string[] key); + + /// + /// 用于在 key 模板存在时删除 + /// + /// key模板 + /// + Task DelByPatternAsync(string pattern); + + /// + /// 检查给定 key 是否存在 + /// + /// 键 + /// + bool Exists(string key); + + /// + /// 检查给定 key 是否存在 + /// + /// 键 + /// + Task ExistsAsync(string key); + + /// + /// 获取指定 key 的值 + /// + /// 键 + /// + string Get(string key); + + /// + /// 获取指定 key 的值 + /// + /// 数据类型 + /// 键 + /// + T Get(string key); + + /// + /// 获取指定 key 的值 + /// + /// 键 + /// + Task GetAsync(string key); + + /// + /// 获取指定 key 的值 + /// + /// 数据类型 + /// 键 + /// + Task GetAsync(string key); + + /// + /// 设置指定 key 的值,所有写入参数object都支持string | byte[] | 数值 | 对象 + /// + /// 键 + /// 值 + void Set(string key, object value); + + /// + /// 设置指定 key 的值,所有写入参数object都支持string | byte[] | 数值 | 对象 + /// + /// 键 + /// 值 + /// 有效期 + void Set(string key, object value, TimeSpan expire); + + /// + /// 设置指定 key 的值,所有写入参数object都支持string | byte[] | 数值 | 对象 + /// + /// 键 + /// 值 + /// 有效期 + /// + Task SetAsync(string key, object value, TimeSpan? expire = null); + + /// + /// 获取或设置缓存 + /// + /// 数据类型 + /// 键 + /// 获取数据的方法 + /// 有效期 + /// + Task GetOrSetAsync(string key, Func> func, TimeSpan? expire = null); + + /// + /// 所有缓存键 + /// + List Keys { get; } + + /// + /// 根据 key 模板获得所有缓存键 + /// + List GetKeysByPattern(string pattern); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/MemoryCacheTool.cs b/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/MemoryCacheTool.cs new file mode 100644 index 0000000..aad1e27 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/MemoryCacheTool.cs @@ -0,0 +1,161 @@ +using Microsoft.Extensions.Caching.Memory; +using System.Collections; +using System.Reflection; +using System.Text.RegularExpressions; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Admin.Tools.Cache; + +/// +/// 内存缓存 +/// +public partial class MemoryCacheTool : ICacheTool +{ + private static readonly string PatternRegex = @"\{.*\}"; + + private readonly IMemoryCache _memoryCache; + public MemoryCacheTool(IMemoryCache memoryCache) + { + _memoryCache = memoryCache; + } + + public List Keys => GetAllKeys(); + + public long Del(params string[] key) + { + foreach (var k in key) + { + _memoryCache.Remove(k); + } + return key.Length; + } + + public Task DelAsync(params string[] key) + { + foreach (var k in key) + { + _memoryCache.Remove(k); + } + + return Task.FromResult(key.Length.ToLong()); + } + + public async Task DelByPatternAsync(string pattern) + { + if (pattern.IsNull()) + return default; + + pattern = Regex.Replace(pattern, PatternRegex, "(.*)"); + + var keys = GetAllKeys().Where(k => Regex.IsMatch(k, pattern)); + + if (keys != null && keys.Count() > 0) + { + return await DelAsync(keys.ToArray()); + } + + return default; + } + + public bool Exists(string key) + { + return _memoryCache.TryGetValue(key, out _); + } + + public Task ExistsAsync(string key) + { + return Task.FromResult(_memoryCache.TryGetValue(key, out _)); + } + + public string Get(string key) + { + return _memoryCache.Get(key)?.ToString(); + } + + public T Get(string key) + { + return _memoryCache.Get(key); + } + + public Task GetAsync(string key) + { + return Task.FromResult(Get(key)); + } + + public Task GetAsync(string key) + { + return Task.FromResult(Get(key)); + } + + public void Set(string key, object value) + { + _memoryCache.Set(key, value); + } + + public void Set(string key, object value, TimeSpan expire) + { + _memoryCache.Set(key, value, expire); + } + + public Task SetAsync(string key, object value, TimeSpan? expire = null) + { + if(expire.HasValue) + { + Set(key, value, expire.Value); + } + else + { + Set(key, value); + } + return Task.CompletedTask; + } + + public async Task GetOrSetAsync(string key, Func> func, TimeSpan? expire = null) + { + if (await ExistsAsync(key)) + { + try + { + return await GetAsync(key); + } + catch + { + await DelAsync(key); + } + } + + var result = await func.Invoke(); + + if (expire.HasValue) + { + await SetAsync(key, result, expire.Value); + } + else + { + await SetAsync(key, result); + } + + return result; + } + + private List GetAllKeys() + { + var keys = new List(); + const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic; + var coherentState = _memoryCache?.GetType()?.GetField("_coherentState", flags)?.GetValue(_memoryCache); + if(coherentState == null) return keys; + var entries = coherentState.GetType()?.GetField("_stringEntries", flags)?.GetValue(coherentState) ?? coherentState.GetType().GetField("_entries", flags)?.GetValue(coherentState); + var cacheItems = entries as IDictionary; + if (cacheItems == null) return keys; + foreach (DictionaryEntry cacheItem in cacheItems) + { + keys.Add(cacheItem.Key.ToString()); + } + return keys; + } + + public List GetKeysByPattern(string pattern) + { + return GetAllKeys().Where(k => Regex.IsMatch(k, pattern)).ToList(); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/RedisCacheTool.cs b/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/RedisCacheTool.cs new file mode 100644 index 0000000..9105f4b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/Tools/Cache/RedisCacheTool.cs @@ -0,0 +1,118 @@ +using FreeRedis; +using System.Text.RegularExpressions; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Admin.Tools.Cache; + +/// +/// Redis缓存 +/// +public partial class RedisCacheTool : ICacheTool +{ + private static readonly string PatternRegex = @"\{.*\}"; + + private readonly RedisClient _redisClient; + + public List Keys => _redisClient.Keys("*").ToList(); + + public RedisCacheTool(RedisClient redisClient) + { + _redisClient = redisClient; + } + public long Del(params string[] key) + { + return _redisClient.Del(key); + } + + public Task DelAsync(params string[] key) + { + return _redisClient.DelAsync(key); + } + + public async Task DelByPatternAsync(string pattern) + { + if (pattern.IsNull()) + return default; + + pattern = Regex.Replace(pattern, PatternRegex, "*"); + + var keys = await _redisClient.KeysAsync(pattern); + if (keys != null && keys.Length > 0) + { + return await _redisClient.DelAsync(keys); + } + + return default; + } + + public bool Exists(string key) + { + return _redisClient.Exists(key); + } + + public Task ExistsAsync(string key) + { + return _redisClient.ExistsAsync(key); + } + + public string Get(string key) + { + return _redisClient.Get(key); + } + + public T Get(string key) + { + return _redisClient.Get(key); + } + + public Task GetAsync(string key) + { + return _redisClient.GetAsync(key); + } + + public Task GetAsync(string key) + { + return _redisClient.GetAsync(key); + } + + public void Set(string key, object value) + { + _redisClient.Set(key, value); + } + + public void Set(string key, object value, TimeSpan expire) + { + _redisClient.Set(key, value, expire); + } + + public Task SetAsync(string key, object value, TimeSpan? expire = null) + { + return _redisClient.SetAsync(key, value, expire.HasValue ? expire.Value.TotalSeconds.ToInt() : 0); + } + + public async Task GetOrSetAsync(string key, Func> func, TimeSpan? expire = null) + { + if (await _redisClient.ExistsAsync(key)) + { + try + { + return await _redisClient.GetAsync(key); + } + catch + { + await _redisClient.DelAsync(key); + } + } + + var result = await func.Invoke(); + + await _redisClient.SetAsync(key, result, expire.HasValue ? expire.Value.TotalSeconds.ToInt() : 0); + + return result; + } + + public List GetKeysByPattern(string pattern) + { + return _redisClient.Keys(pattern).ToList(); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Core/ZhonTai.Admin.Core.csproj b/src/modules/admin/ZhonTai.Admin.Core/ZhonTai.Admin.Core.csproj new file mode 100644 index 0000000..63b0a1f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Core/ZhonTai.Admin.Core.csproj @@ -0,0 +1,83 @@ + + + + 中台Admin权限管理核心库 + false + + + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/admin/ZhonTai.Admin.Core/key.snk b/src/modules/admin/ZhonTai.Admin.Core/key.snk new file mode 100644 index 0000000..51decaf Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Core/key.snk differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/.config/dotnet-tools.json b/src/modules/admin/ZhonTai.Admin.Host/.config/dotnet-tools.json new file mode 100644 index 0000000..06b8682 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-ef": { + "version": "5.0.9", + "commands": [ + "dotnet-ef" + ] + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ImConfig.Development.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ImConfig.Development.json new file mode 100644 index 0000000..bb8dc4d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ImConfig.Development.json @@ -0,0 +1,5 @@ +{ + "ImConfig": { + + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/appconfig.Development.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/appconfig.Development.json new file mode 100644 index 0000000..5946d55 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/appconfig.Development.json @@ -0,0 +1,10 @@ +{ + "AppConfig": { + //跨域地址 + "corUrls": [], + "IdentityServer": { + //地址 + "url": "https://localhost:5000" + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/appconfig.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/appconfig.json new file mode 100644 index 0000000..49b03d9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/appconfig.json @@ -0,0 +1,151 @@ +{ + "AppConfig": { + //应用程序类型Controllers ControllersWithViews MVC + "appType": "Controllers", + //Api地址 + "urls": [ "http://*:18010" ], + //跨域地址 + "corUrls": [], + //程序集名称 + "assemblyNames": [ "ZhonTai.Admin" ], + //枚举列表程序集名称 + "EnumListAssemblyNames": [ "ZhonTai.Admin" ], + //租户 + "tenant": false, + //分布式事务唯一标识admin,为空则不生成分布式事务表 + "distributeKey": "", + //验证 + "validate": { + //登录 + "login": true, + //接口权限 + "permission": true, + //数据权限 + "dataPermission": true, + //接口数据权限 + "apiDataPermission": true + }, + //Swagger文档 + "swagger": { + //启用 + "enable": true, + //启用枚举架构过滤器 + "enableEnumSchemaFilter": true, + //启用接口排序文档过滤器 + "enableOrderTagsDocumentFilter": true, + //启用枚举属性名 + "enableJsonStringEnumConverter": false, + //启用SchemaId命名空间 + "enableSchemaIdNamespace": false, + //程序集列表,用于启用SchemaId命名空间 + "assemblyNameList": [], + //路由前缀,如配置微服务文档地址:doc/module/swagger + "routePrefix": "doc/admin/swagger", + //地址 + "url": "http://localhost:18010", + //自动同步文档到数据库 + "enableAutoSync": false, + "projects": [ + { + "name": "NPP", + "code": "admin", + "version": "v9.1.2", + "description": "" + } + ] + }, + //ZhonTai接口文档 + "apiUI": { + //启用 + "enable": true, + //路由前缀,如配置微服务文档地址:doc/module + "routePrefix": "doc/admin", + //页脚 + "footer": { + "enable": false, + "content": "" + } + }, + //MiniProfiler性能分析器 + "miniProfiler": false, + //面向切面编程 + "aop": { + //事务 + "transaction": true + }, + //数据库日志 + "log": { + //操作日志 + "operation": true + }, + //限流 + "rateLimit": false, + //验证码 + "varifyCode": { + //启用 + "enable": false, + //字体列表 + "fonts": [ "Times New Roman", "Verdana", "Arial", "Gungsuh", "Impact" ] + }, + //默认密码 + "defaultPassword": "123asd", + //动态api + "dynamicApi": { + //结果格式化 + "formatResult": true + }, + //实现标准标识密码哈希,启用后相同密码加密后各不相同 + "passwordHasher": false, + //Kestrel服务器配置 + "Kestrel": { + //HTTP连接保活最长时间,单位秒,600 = 10 分钟 + "KeepAliveTimeout": 600, + //发送请求头最长时间,单位秒,600 = 10 分钟 + "RequestHeadersTimeout": 600, + //最大请求大小,单位 bytes, 设置 null 不限制大小,104857600 = 100 MB + "maxRequestBodySize": 104857600 + }, + //健康检查 + "healthChecks": { + //启用 + "enable": true, + //访问路径 + "path": "/health" + }, + //指定跨域访问时预检等待时间,以秒为单位,默认30分钟 + "PreflightMaxAge": 1800, + //是否开启任务调度管理界面 + "TaskSchedulerUI": { + //启用 + "enable": false, + //访问路径 + "path": "/task" + }, + //Id生成器 + "IdGenerator": { + "DataCenterId": 0, // 数据中心ID(机房ID,默认0) 请确保全局唯一 + "WorkerId": 1, // 机器码,必须全局唯一(或相同 DataCenterId 内唯一),理论最大值 2^WorkerIdBitLength-1 = 63,最大值 524287 + "WorkerIdBitLength": 6, // 机器码位长,决定 WorkerId 的最大值,默认值6,取值范围 [1, 19] + "SeqBitLength": 6, // 序列数位长,默认值6,取值范围 [3, 21],决定每毫秒基础生成的ID个数。如果每秒请求数不超过5W,保持默认值6即可;如果超过5W,不超过50W,建议赋值10或更大,以此类推。 + "CachePrefix": "zhontai:workerid" // 缓存前缀 + }, + //语言配置 + "Lang": { + //启用Json配置 + "EnableJson": true, + //默认语言 + "DefaultLang": "zh-CN", + //语言列表 + "Langs": [ "zh-CN", "en" ], + //语言请求解析列表 + "RequestCultureProviders": [] //["QueryString","Cookie","AcceptLanguageHeader"] + }, + //IP地址定位 + "IP2Region": { + //启用 + "Enable": true, + //绝对数据库路径,为空则默认使用网站根目录/ip2region.xdb + "DbPath": "" + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/cacheconfig.Development.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/cacheconfig.Development.json new file mode 100644 index 0000000..c2d2365 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/cacheconfig.Development.json @@ -0,0 +1,5 @@ +{ + "CacheConfig": { + + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/cacheconfig.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/cacheconfig.json new file mode 100644 index 0000000..b77d0ce --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/cacheconfig.json @@ -0,0 +1,15 @@ +{ + "CacheConfig": { + //缓存类型 Memory = 0,Redis = 1 + "type": "0", + //限流缓存类型 Memory = 0,Redis = 1 + "typeRateLimit": "0", + //Redis配置 + "redis": { + //连接字符串 + "connectionString": "127.0.0.1:6379,password=,defaultDatabase=0", + //限流连接字符串 + "connectionStringRateLimit": "127.0.0.1:6379,password=,defaultDatabase=0" + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/createdbsql.txt b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/createdbsql.txt new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/createdbsql.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/dbconfig.Development.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/dbconfig.Development.json new file mode 100644 index 0000000..615d514 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/dbconfig.Development.json @@ -0,0 +1,5 @@ +{ + "DbConfig": { + + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/dbconfig.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/dbconfig.json new file mode 100644 index 0000000..5e0f06f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/dbconfig.json @@ -0,0 +1,45 @@ +{ + "DbConfig": { + //数据库注册键 + "key": "admindb", + "assemblyNames": [ "ZhonTai.Admin" ], + "monitorCommand": false, + "curd": true, + "syncStructureSql": false, + "syncDataCurd": false, + "createDb": false, + "createDbConnectionString": "Server=localhost; Port=3306; Database=mysql; Uid=root; Pwd=pwd; Charset=utf8mb4;", + "createDbSql": "CREATE DATABASE `admindb` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci'", + "createDbSqlFile": "ConfigCenter/createdbsql.txt", + "syncStructure": true, + "syncStructureEntityBatchSize": 1, + "syncData": false, + "sysUpdateData": false, + "syncDataIncludeTables": [], + "syncDataExcludeTables": [], + "syncDataUser": { + "id": 161223411986501, + "userName": "admin", + "name": "管理员", + "tenantId": 161223412138053 + }, + "generateData": false, + "type": "Sqlite", + "connectionString": "Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1", + "providerType": "", + "slaveList": [ + ], + "idleTime": 1440, + "forceUpdate": false, + "dbs": [ +// { +// "key": "SLMSDB", +// "type": "Mysql", +// "syncStructure": false, +// "syncData": false, +// "connectionString": "Server=10.249.11.114; Port=3306; Database=npp; Uid=root; Pwd=root123$%^; Charset=utf8mb4;SslMode=none;Min pool size=1;Allow User Variables=True" , +// "providerType": "" +// } + ] + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/imconfig.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/imconfig.json new file mode 100644 index 0000000..65c3d0e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/imconfig.json @@ -0,0 +1,12 @@ +{ + "ImConfig": { + //启用 + "Enable": false, + //im服务器集群地址 + "Servers": [ "127.0.0.1:17010" ], + //ws业务端地址 + "Server": "ws://127.0.0.1:17010", + //Redis连接字符串 + "RedisConnectionString": "127.0.0.1:6379,password=,defaultDatabase=6" + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/jwtconfig.Development.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/jwtconfig.Development.json new file mode 100644 index 0000000..7e5626b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/jwtconfig.Development.json @@ -0,0 +1,5 @@ +{ + "JwtConfig": { + + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/jwtconfig.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/jwtconfig.json new file mode 100644 index 0000000..6d5aede --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/jwtconfig.json @@ -0,0 +1,11 @@ +{ + "JwtConfig": { + "issuer": "admin.core", + "audience": "admin.core", + "securityKey": "f013dd97e0e711ee8e1f8cec4b9877db022c2d2ce0e811ee8e1f8cec4b9877db", + //有效期(分钟) 120 = 2小时 + "expires": 120, + //刷新有效期(分钟) 1440 = 1天 + "refreshExpires": 1440 + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ossconfig.Development.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ossconfig.Development.json new file mode 100644 index 0000000..d701a1c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ossconfig.Development.json @@ -0,0 +1,5 @@ +{ + "OssConfig": { + + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ossconfig.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ossconfig.json new file mode 100644 index 0000000..9117123 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ossconfig.json @@ -0,0 +1,93 @@ +{ + "OssConfig": { + //本地上传配置 + "LocalUploadConfig": { + //上传目录 + "Directory": "upload", + //日期目录 + "DateTimeDirectory": "yyyy/MM/dd", + "Md5": false, + //文件最大大小 + "MaxSize": 104857600, + //包含文件拓展名列表 + "IncludeExtension": [], + //排除文件拓展名列表 + "ExcludeExtension": [ ".exe", ".dll", ".jar" ] + }, + //文件存储供应商 + "Provider": "Minio", + //OSS配置列表 + "OSSConfigs": [ + //Minio + { + "Provider": "Minio", + "Endpoint": "127.0.0.1:9006", + "Region": "", + "AccessKey": "minio", + "SecretKey": "minio", + "IsEnableHttps": false, + "IsEnableCache": true, + "BucketName": "admin", + "Url": "", //文件外链 + "Md5": false, + "Enable": false + }, + //阿里云 + { + "Provider": "Aliyun", + "Endpoint": "oss-cn-shenzhen.aliyuncs.com", + "Region": "", + "AccessKey": "", + "SecretKey": "", + "IsEnableHttps": true, + "IsEnableCache": true, + "BucketName": "admin", + "Url": "", + "Md5": false, + "Enable": false + }, + //腾讯云 + { + "Provider": "QCloud", + "Endpoint": "", //AppId + "Region": "", + "AccessKey": "", + "SecretKey": "", + "IsEnableHttps": true, + "IsEnableCache": true, + "BucketName": "admin", + "Url": "", + "Md5": false, + "Enable": false + }, + //七牛 + { + "Provider": "Qiniu", + "Endpoint": "", + "Region": "", + "AccessKey": "", + "SecretKey": "", + "IsEnableHttps": true, + "IsEnableCache": true, + "BucketName": "admin", + "Url": "", + "Md5": false, + "Enable": false + }, + //华为云 + { + "Provider": "HuaweiCloud", + "Endpoint": "", + "Region": "", + "AccessKey": "", + "SecretKey": "", + "IsEnableHttps": true, + "IsEnableCache": true, + "BucketName": "admin", + "Url": "", + "Md5": false, + "Enable": false + } + ] + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ratelimitconfig.Development.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ratelimitconfig.Development.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ratelimitconfig.Development.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ratelimitconfig.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ratelimitconfig.json new file mode 100644 index 0000000..5ffbc75 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/ratelimitconfig.json @@ -0,0 +1,29 @@ +{ + "IpRateLimiting": { + "EnableEndpointRateLimiting": true, + "StackBlockedRequests": false, + "RealIpHeader": "X-Real-IP", + "ClientIdHeader": "X-ClientId", + "IpWhitelist": [], // "127.0.0.1" + "EndpointWhitelist": [ "get:/api/admin/auth/refresh" ], // "get:/api/a", "*:/api/b" + "ClientWhitelist": [], + "HttpStatusCode": 429, + "QuotaExceededResponse": { + "Content": "{{\"code\":429,\"msg\":\"访问过于频繁!\",\"success\": false}}", + "ContentType": "application/json; charset=utf-8", + "StatusCode": 429 + }, + "GeneralRules": [ + { + "Endpoint": "*", + "Period": "1s", + "Limit": 3 + }, + { + "Endpoint": "*", + "Period": "10m", + "Limit": 200 + } + ] + } +} diff --git a/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/samlconfig.json b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/samlconfig.json new file mode 100644 index 0000000..4194dbe --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ConfigCenter/samlconfig.json @@ -0,0 +1,19 @@ +{ + "SamlConfig": { + "enable": true, + "entityId": "https://your-app-domain.com", + "assertionConsumerServiceUrl": "https://your-app-domain.com/api/admin/auth/saml/callback", + "singleSignOnServiceUrl": "https://login.microsoftonline.com/d93cc12d-3760-453d-a4c5-c92e8c13c622/saml2/", + "singleLogoutServiceUrl": "https://login.microsoftonline.com/d93cc12d-3760-453d-a4c5-c92e8c13c622/saml2/", + "idpCertificate": "-----BEGIN CERTIFICATE-----\nBLAHBLAHBLAHBLAHBLAHBLAHBLAHBLAHBLAHBLAHBLAHBLAH123543==\n-----END CERTIFICATE-----", + "spPrivateKey": "", + "spCertificate": "", + "forceSaml": false, + "userNameAttribute": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", + "emailAttribute": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", + "nameAttribute": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname", + "autoCreateUser": true, + "defaultUserType": 1, + "defaultTenantId": 1 + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/Dockerfile b/src/modules/admin/ZhonTai.Admin.Host/Dockerfile new file mode 100644 index 0000000..32a6789 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/Dockerfile @@ -0,0 +1,14 @@ +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS publish +WORKDIR /src +COPY ["/src/modules/admin/ZhonTai.Admin.Host/ZhonTai.Admin.Host.csproj", "/src/modules/admin/ZhonTai.Admin.Host/ZhonTai.Admin.Host.csproj"] +RUN dotnet restore "/src/modules/admin/ZhonTai.Admin.Host/ZhonTai.Admin.Host.csproj" -nowarn:NETSDK1138 +COPY . . +WORKDIR "/src/src/modules/admin/ZhonTai.Admin.Host" +ENV NUGET_XMLDOC_MODE none +RUN dotnet publish "ZhonTai.Admin.Host.csproj" -nowarn:NETSDK1138 -c Release -o /app + +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final +WORKDIR /app +COPY --from=publish /app . +EXPOSE 8000 +ENTRYPOINT ["dotnet", "ZhonTai.Admin.Host.dll"] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_api.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_api.json new file mode 100644 index 0000000..b5823db --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_api.json @@ -0,0 +1,6437 @@ +[ + { + "id": 373083895201861, + "parentId": 0, + "name": null, + "label": "中台Admin", + "path": "admin", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 1, + "enabled": true, + "childs": [ + { + "id": 161227167658053, + "parentId": 373083895201861, + "name": null, + "label": "接口服务", + "path": "api", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 19, + "enabled": true, + "childs": [ + { + "id": 161227168079941, + "parentId": 161227167658053, + "name": null, + "label": "查询", + "path": "/api/admin/api/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 74, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168116805, + "parentId": 161227167658053, + "name": null, + "label": "查询列表", + "path": "/api/admin/api/get-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 75, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168116806, + "parentId": 161227167658053, + "name": null, + "label": "查询分页", + "path": "/api/admin/api/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 76, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168120901, + "parentId": 161227167658053, + "name": null, + "label": "添加", + "path": "/api/admin/api/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 77, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168120902, + "parentId": 161227167658053, + "name": null, + "label": "修改", + "path": "/api/admin/api/update", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 78, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168120903, + "parentId": 161227167658053, + "name": null, + "label": "删除", + "path": "/api/admin/api/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 84, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168124997, + "parentId": 161227167658053, + "name": null, + "label": "批量删除", + "path": "/api/admin/api/batch-soft-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 85, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168124998, + "parentId": 161227167658053, + "name": null, + "label": "同步", + "path": "/api/admin/api/sync", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 86, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 271618651914309, + "parentId": 161227167658053, + "name": null, + "label": "彻底删除", + "path": "/api/admin/api/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 82, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 372400615755845, + "parentId": 161227167658053, + "name": null, + "label": "批量彻底删除", + "path": "/api/admin/api/batch-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 83, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292288079, + "parentId": 161227167658053, + "name": null, + "label": "获得项目列表", + "path": "/api/admin/api/get-projects", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 87, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 588527858712645, + "parentId": 161227167658053, + "name": null, + "label": "设置启用请求参数", + "path": "/api/admin/api/set-enable-params", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 80, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-09T10:26:00", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 588527858712646, + "parentId": 161227167658053, + "name": null, + "label": "设置启用响应结果", + "path": "/api/admin/api/set-enable-result", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 81, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-09T10:26:00", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 588527858712647, + "parentId": 161227167658053, + "name": null, + "label": "获得枚举列表", + "path": "/api/admin/api/get-enums", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 81, + "enabled": false, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-09T10:26:00", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 614913817256005, + "parentId": 161227167658053, + "name": null, + "label": "设置启用接口日志", + "path": "/api/admin/api/set-enable-log", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 79, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-22T23:50:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227167719493, + "parentId": 373083895201861, + "name": null, + "label": "认证授权服务", + "path": "auth", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 1, + "enabled": true, + "childs": [ + { + "id": 161227168129094, + "parentId": 161227167719493, + "name": null, + "label": "查询密钥", + "path": "/api/admin/auth/get-password-encrypt-key", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 252, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168133189, + "parentId": 161227167719493, + "name": null, + "label": "登录", + "path": "/api/admin/auth/login", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 257, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168133190, + "parentId": 161227167719493, + "name": null, + "label": "刷新Token", + "path": "/api/admin/auth/refresh", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "以旧换新", + "sort": 264, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 271618651922501, + "parentId": 161227167719493, + "name": null, + "label": "查询用户信息", + "path": "/api/admin/auth/get-user-info", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 256, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 394672333692998, + "parentId": 161227167719493, + "name": null, + "label": "查询用户个人信息", + "path": "/api/admin/auth/get-user-profile", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 253, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 394672333692999, + "parentId": 161227167719493, + "name": null, + "label": "查询用户菜单列表", + "path": "/api/admin/auth/get-user-menus", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 254, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 394672333697093, + "parentId": 161227167719493, + "name": null, + "label": "查询用户权限列表", + "path": "/api/admin/auth/get-user-permissions", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 255, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 399372669796424, + "parentId": 161227167719493, + "name": null, + "label": "手机登录", + "path": "/api/admin/auth/mobile-login", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 258, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 399372669796425, + "parentId": 161227167719493, + "name": null, + "label": "是否开启验证码", + "path": "/api/admin/auth/is-captcha", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 265, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 588527858712649, + "parentId": 161227167719493, + "name": null, + "label": "邮箱登录", + "path": "/api/admin/auth/email-login", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 259, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-09T10:26:00", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 588527858712650, + "parentId": 161227167719493, + "name": null, + "label": "邮箱更改密码", + "path": "/api/admin/auth/change-password-by-email", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 260, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-09T10:26:00", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 588527858712651, + "parentId": 161227167719493, + "name": null, + "label": "手机更改密码", + "path": "/api/admin/auth/change-password-by-mobile", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 261, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-09T10:26:00", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 588527858712652, + "parentId": 161227167719493, + "name": null, + "label": "邮箱注册", + "path": "/api/admin/auth/reg-by-email", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 262, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-09T10:26:00", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 588527858716741, + "parentId": 161227167719493, + "name": null, + "label": "手机号注册", + "path": "/api/admin/auth/reg-by-mobile", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 263, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-09T10:26:00", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227167719494, + "parentId": 373083895201861, + "name": null, + "label": "数据字典服务", + "path": "dict", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 14, + "enabled": true, + "childs": [ + { + "id": 161227168137285, + "parentId": 161227167719494, + "name": null, + "label": "查询", + "path": "/api/admin/dict/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 112, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168137286, + "parentId": 161227167719494, + "name": null, + "label": "查询分页", + "path": "/api/admin/dict/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 113, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168137287, + "parentId": 161227167719494, + "name": null, + "label": "新增", + "path": "/api/admin/dict/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 120, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168141381, + "parentId": 161227167719494, + "name": null, + "label": "修改", + "path": "/api/admin/dict/update", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 121, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168141382, + "parentId": 161227167719494, + "name": null, + "label": "删除", + "path": "/api/admin/dict/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 124, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 184100551516229, + "parentId": 161227167719494, + "name": null, + "label": "批量删除", + "path": "/api/admin/dict/batch-soft-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 125, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 271618651922504, + "parentId": 161227167719494, + "name": null, + "label": "彻底删除", + "path": "/api/admin/dict/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 122, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 372390893649989, + "parentId": 161227167719494, + "name": null, + "label": "批量彻底删除", + "path": "/api/admin/dict/batch-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 123, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402196463136837, + "parentId": 161227167719494, + "name": null, + "label": "通过类型编码查询列表", + "path": "/api/admin/dict/get-list", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 114, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164910149, + "parentId": 161227167719494, + "name": null, + "label": "通过类型名称查询列表", + "path": "/api/admin/dict/get-list-by-names", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 115, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 551709465014341, + "parentId": 161227167719494, + "name": null, + "label": "导出数据", + "path": "/api/admin/dict/export-data", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": false, + "description": "", + "sort": 118, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-28T09:31:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 594300204093509, + "parentId": 161227167719494, + "name": null, + "label": "下载导入模板", + "path": "/api/admin/dict/download-template", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 116, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-25T17:53:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 594300204109893, + "parentId": 161227167719494, + "name": null, + "label": "下载错误标记文件", + "path": "/api/admin/dict/download-error-mark", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 117, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-25T17:53:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 594300204109894, + "parentId": 161227167719494, + "name": null, + "label": "导入数据", + "path": "/api/admin/dict/import-data", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 119, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-25T17:53:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227167719495, + "parentId": 373083895201861, + "name": null, + "label": "权限服务", + "path": "permission", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 11, + "enabled": true, + "childs": [ + { + "id": 161227168141383, + "parentId": 161227167719495, + "name": null, + "label": "查询权限列表", + "path": "/api/admin/permission/get-list", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 153, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168145477, + "parentId": 161227167719495, + "name": null, + "label": "查询分组", + "path": "/api/admin/permission/get-group", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 150, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168145478, + "parentId": 161227167719495, + "name": null, + "label": "查询菜单", + "path": "/api/admin/permission/get-menu", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 151, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168149574, + "parentId": 161227167719495, + "name": null, + "label": "查询授权权限列表", + "path": "/api/admin/permission/get-permission-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 154, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168149575, + "parentId": 161227167719495, + "name": null, + "label": "查询角色权限列表", + "path": "/api/admin/permission/get-role-permission-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 155, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168153669, + "parentId": 161227167719495, + "name": null, + "label": "新增分组", + "path": "/api/admin/permission/add-group", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 156, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168153670, + "parentId": 161227167719495, + "name": null, + "label": "新增菜单", + "path": "/api/admin/permission/add-menu", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 157, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168157765, + "parentId": 161227167719495, + "name": null, + "label": "修改分组", + "path": "/api/admin/permission/update-group", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 159, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168157766, + "parentId": 161227167719495, + "name": null, + "label": "修改菜单", + "path": "/api/admin/permission/update-menu", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 160, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168161862, + "parentId": 161227167719495, + "name": null, + "label": "删除", + "path": "/api/admin/permission/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 163, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168165957, + "parentId": 161227167719495, + "name": null, + "label": "保存角色权限", + "path": "/api/admin/permission/assign", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 164, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168165958, + "parentId": 161227167719495, + "name": null, + "label": "查询权限点", + "path": "/api/admin/permission/get-dot", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 152, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168165959, + "parentId": 161227167719495, + "name": null, + "label": "新增权限点", + "path": "/api/admin/permission/add-dot", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 158, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168170053, + "parentId": 161227167719495, + "name": null, + "label": "修改权限点", + "path": "/api/admin/permission/update-dot", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 161, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 187384805367877, + "parentId": 161227167719495, + "name": null, + "label": "彻底删除", + "path": "/api/admin/permission/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 162, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227167719496, + "parentId": 373083895201861, + "name": null, + "label": "角色服务", + "path": "role", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 7, + "enabled": true, + "childs": [ + { + "id": 161227168170054, + "parentId": 161227167719496, + "name": null, + "label": "查询", + "path": "/api/admin/role/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 184, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168170055, + "parentId": 161227167719496, + "name": null, + "label": "查询分页", + "path": "/api/admin/role/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 186, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168174149, + "parentId": 161227167719496, + "name": null, + "label": "新增", + "path": "/api/admin/role/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 190, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168178245, + "parentId": 161227167719496, + "name": null, + "label": "修改", + "path": "/api/admin/role/update", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 191, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168178246, + "parentId": 161227167719496, + "name": null, + "label": "删除", + "path": "/api/admin/role/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 194, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168182341, + "parentId": 161227167719496, + "name": null, + "label": "批量删除", + "path": "/api/admin/role/batch-soft-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 195, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 271618651926604, + "parentId": 161227167719496, + "name": null, + "label": "彻底删除", + "path": "/api/admin/role/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 192, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 336555241422917, + "parentId": 161227167719496, + "name": null, + "label": "查询列表", + "path": "/api/admin/role/get-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 185, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 336555241422918, + "parentId": 161227167719496, + "name": null, + "label": "查询角色用户列表", + "path": "/api/admin/role/get-role-user-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 187, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 336555241422919, + "parentId": 161227167719496, + "name": null, + "label": "添加角色用户", + "path": "/api/admin/role/add-role-user", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 188, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 336555241422920, + "parentId": 161227167719496, + "name": null, + "label": "移除角色用户", + "path": "/api/admin/role/remove-role-user", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 189, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 336555241422921, + "parentId": 161227167719496, + "name": null, + "label": "批量彻底删除", + "path": "/api/admin/role/batch-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 193, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 361090412425285, + "parentId": 161227167719496, + "name": null, + "label": "设置数据权限", + "path": "/api/admin/role/set-data-scope", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 196, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227167719497, + "parentId": 373083895201861, + "name": null, + "label": "用户服务", + "path": "user", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 3, + "enabled": true, + "childs": [ + { + "id": 161227168182342, + "parentId": 161227167719497, + "name": null, + "label": "查询用户基本信息", + "path": "/api/admin/user/get-basic", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 230, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168182343, + "parentId": 161227167719497, + "name": null, + "label": "查询用户", + "path": "/api/admin/user/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 227, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168186437, + "parentId": 161227167719497, + "name": null, + "label": "查询分页", + "path": "/api/admin/user/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 228, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168186438, + "parentId": 161227167719497, + "name": null, + "label": "新增用户", + "path": "/api/admin/user/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 232, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168190533, + "parentId": 161227167719497, + "name": null, + "label": "修改用户", + "path": "/api/admin/user/update", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 233, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168190534, + "parentId": 161227167719497, + "name": null, + "label": "删除用户", + "path": "/api/admin/user/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 245, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168190535, + "parentId": 161227167719497, + "name": null, + "label": "批量删除用户", + "path": "/api/admin/user/batch-soft-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 246, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168194629, + "parentId": 161227167719497, + "name": null, + "label": "修改用户密码", + "path": "/api/admin/user/change-password", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 237, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168194630, + "parentId": 161227167719497, + "name": null, + "label": "更新用户基本信息", + "path": "/api/admin/user/update-basic", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 236, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168194631, + "parentId": 161227167719497, + "name": null, + "label": "上传头像", + "path": "/api/admin/user/avatar-upload", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 247, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 271618651926607, + "parentId": 161227167719497, + "name": null, + "label": "彻底删除用户", + "path": "/api/admin/user/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 243, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 336555241427019, + "parentId": 161227167719497, + "name": null, + "label": "批量彻底删除用户", + "path": "/api/admin/user/batch-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 244, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 349749396615237, + "parentId": 161227167719497, + "name": null, + "label": "重置密码", + "path": "/api/admin/user/reset-password", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 238, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 349749396619333, + "parentId": 161227167719497, + "name": null, + "label": "设置主管", + "path": "/api/admin/user/set-manager", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 239, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 361090412441669, + "parentId": 161227167719497, + "name": null, + "label": "新增会员", + "path": "/api/admin/user/add-member", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 234, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 361090412441670, + "parentId": 161227167719497, + "name": null, + "label": "修改会员", + "path": "/api/admin/user/update-member", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 235, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 394672333692997, + "parentId": 161227167719497, + "name": null, + "label": "设置启用", + "path": "/api/admin/user/set-enable", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 240, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 427947639398469, + "parentId": 161227167719497, + "name": null, + "label": "一键登录用户", + "path": "/api/admin/user/one-click-login", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 248, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 588527858712648, + "parentId": 161227167719497, + "name": null, + "label": "查询用户权限信息", + "path": "/api/admin/user/get-permission", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 231, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-09T10:26:00", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 622257407160333, + "parentId": 161227167719497, + "name": null, + "label": "强制用户下线", + "path": "/api/admin/user/force-offline", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 249, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:51:53", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 623004581449797, + "parentId": 161227167719497, + "name": null, + "label": "批量设置部门", + "path": "/api/admin/user/batch-set-org", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 242, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-15T20:32:09", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 668220737404997, + "parentId": 161227167719497, + "name": null, + "label": "查询已删除分页列表", + "path": "/api/admin/user/get-deleted-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 229, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-22T14:57:10", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 668220737404998, + "parentId": 161227167719497, + "name": null, + "label": "恢复", + "path": "/api/admin/user/restore", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 241, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-22T14:57:10", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227167719498, + "parentId": 373083895201861, + "name": null, + "label": "视图服务", + "path": "view", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 20, + "enabled": true, + "childs": [ + { + "id": 161227168198725, + "parentId": 161227167719498, + "name": null, + "label": "查询", + "path": "/api/admin/view/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 65, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168198726, + "parentId": 161227167719498, + "name": null, + "label": "查询列表", + "path": "/api/admin/view/get-list", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 66, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168202822, + "parentId": 161227167719498, + "name": null, + "label": "新增", + "path": "/api/admin/view/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 67, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168202823, + "parentId": 161227167719498, + "name": null, + "label": "修改", + "path": "/api/admin/view/update", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 68, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168206917, + "parentId": 161227167719498, + "name": null, + "label": "删除", + "path": "/api/admin/view/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 71, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168206918, + "parentId": 161227167719498, + "name": null, + "label": "批量删除", + "path": "/api/admin/view/batch-soft-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 72, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168206919, + "parentId": 161227167719498, + "name": null, + "label": "同步", + "path": "/api/admin/view/sync", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 73, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 271618651926608, + "parentId": 161227167719498, + "name": null, + "label": "彻底删除", + "path": "/api/admin/view/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 69, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 372401403850821, + "parentId": 161227167719498, + "name": null, + "label": "批量彻底删除", + "path": "/api/admin/view/batch-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 70, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227167723589, + "parentId": 373083895201861, + "name": null, + "label": "缓存服务", + "path": "cache", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 18, + "enabled": true, + "childs": [ + { + "id": 161227168211013, + "parentId": 161227167723589, + "name": null, + "label": "查询列表", + "path": "/api/admin/cache/get-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 88, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168211014, + "parentId": 161227167723589, + "name": null, + "label": "清除缓存", + "path": "/api/admin/cache/clear", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 89, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227167723590, + "parentId": 373083895201861, + "name": null, + "label": "登录日志服务", + "path": "login-log", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 23, + "enabled": true, + "childs": [ + { + "id": 161227168215109, + "parentId": 161227167723590, + "name": null, + "label": "查询分页", + "path": "/api/admin/login-log/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 43, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 271618651926601, + "parentId": 161227167723590, + "name": null, + "label": "新增", + "path": "/api/admin/login-log/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 44, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227167723591, + "parentId": 373083895201861, + "name": null, + "label": "操作日志服务", + "path": "operation-log", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 24, + "enabled": true, + "childs": [ + { + "id": 161227168215110, + "parentId": 161227167723591, + "name": null, + "label": "查询分页", + "path": "/api/admin/operation-log/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 41, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 271618651926602, + "parentId": 161227167723591, + "name": null, + "label": "新增", + "path": "/api/admin/operation-log/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 42, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227167723592, + "parentId": 373083895201861, + "name": null, + "label": "文档服务", + "path": "doc", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 22, + "enabled": true, + "childs": [ + { + "id": 161227168215111, + "parentId": 161227167723592, + "name": null, + "label": "查询文档列表", + "path": "/api/admin/doc/get-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 48, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168219205, + "parentId": 161227167723592, + "name": null, + "label": "查询分组", + "path": "/api/admin/doc/get-group", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 45, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168219206, + "parentId": 161227167723592, + "name": null, + "label": "查询菜单", + "path": "/api/admin/doc/get-menu", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 46, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168223301, + "parentId": 161227167723592, + "name": null, + "label": "查询精简文档列表", + "path": "/api/admin/doc/get-plain-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 59, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168223302, + "parentId": 161227167723592, + "name": null, + "label": "新增分组", + "path": "/api/admin/doc/add-group", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 50, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168227397, + "parentId": 161227167723592, + "name": null, + "label": "新增菜单", + "path": "/api/admin/doc/add-menu", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 51, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168227398, + "parentId": 161227167723592, + "name": null, + "label": "修改分组", + "path": "/api/admin/doc/update-group", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 53, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168231493, + "parentId": 161227167723592, + "name": null, + "label": "修改菜单", + "path": "/api/admin/doc/update-menu", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 54, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168231494, + "parentId": 161227167723592, + "name": null, + "label": "删除文档", + "path": "/api/admin/doc/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 58, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168235589, + "parentId": 161227167723592, + "name": null, + "label": "查询文档内容", + "path": "/api/admin/doc/get-content", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 47, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168235590, + "parentId": 161227167723592, + "name": null, + "label": "修改文档内容", + "path": "/api/admin/doc/update-content", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 55, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168235591, + "parentId": 161227167723592, + "name": null, + "label": "上传文档图片", + "path": "/api/admin/doc/upload-image", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 60, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168239685, + "parentId": 161227167723592, + "name": null, + "label": "查询图片列表", + "path": "/api/admin/doc/get-image-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 49, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168239686, + "parentId": 161227167723592, + "name": null, + "label": "彻底删除图片", + "path": "/api/admin/doc/delete-image", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 57, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 271618651926599, + "parentId": 161227167723592, + "name": null, + "label": "新增图片", + "path": "/api/admin/doc/add-image", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 52, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 271618651926600, + "parentId": 161227167723592, + "name": null, + "label": "彻底删除文档", + "path": "/api/admin/doc/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 56, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227167723593, + "parentId": 373083895201861, + "name": null, + "label": "租户服务", + "path": "tenant", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 12, + "enabled": true, + "childs": [ + { + "id": 161227168243781, + "parentId": 161227167723593, + "name": null, + "label": "查询", + "path": "/api/admin/tenant/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 141, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168243782, + "parentId": 161227167723593, + "name": null, + "label": "查询分页", + "path": "/api/admin/tenant/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 142, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168243783, + "parentId": 161227167723593, + "name": null, + "label": "新增", + "path": "/api/admin/tenant/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 143, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168247877, + "parentId": 161227167723593, + "name": null, + "label": "修改", + "path": "/api/admin/tenant/update", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 144, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168247878, + "parentId": 161227167723593, + "name": null, + "label": "删除", + "path": "/api/admin/tenant/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 146, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 161227168251973, + "parentId": 161227167723593, + "name": null, + "label": "批量删除", + "path": "/api/admin/tenant/batch-soft-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 147, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 163579785756741, + "parentId": 161227167723593, + "name": null, + "label": "彻底删除", + "path": "/api/admin/tenant/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 145, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 394672333688901, + "parentId": 161227167723593, + "name": null, + "label": "设置启用", + "path": "/api/admin/tenant/set-enable", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 148, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 614913817296965, + "parentId": 161227167723593, + "name": null, + "label": "一键登录", + "path": "/api/admin/tenant/one-click-login", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 149, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-22T23:50:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 174219034718277, + "parentId": 373083895201861, + "name": null, + "label": "部门服务", + "path": "org", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 10, + "enabled": true, + "childs": [ + { + "id": 174219034734672, + "parentId": 174219034718277, + "name": null, + "label": "查询", + "path": "/api/admin/org/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 165, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 174219034734674, + "parentId": 174219034718277, + "name": null, + "label": "新增", + "path": "/api/admin/org/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 168, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 174219034738757, + "parentId": 174219034718277, + "name": null, + "label": "修改", + "path": "/api/admin/org/update", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 169, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 174219034738758, + "parentId": 174219034718277, + "name": null, + "label": "删除", + "path": "/api/admin/org/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 171, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 188049296683077, + "parentId": 174219034718277, + "name": null, + "label": "查询列表", + "path": "/api/admin/org/get-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 166, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 342274923528261, + "parentId": 174219034718277, + "name": null, + "label": "彻底删除", + "path": "/api/admin/org/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 170, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 668220737347653, + "parentId": 174219034718277, + "name": null, + "label": "获取部门路径列表", + "path": "/api/admin/org/get-simple-list-with-path", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 167, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-22T14:57:10", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 174219034718279, + "parentId": 373083895201861, + "name": null, + "label": "数据字典类型服务", + "path": "dict-type", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 15, + "enabled": true, + "childs": [ + { + "id": 174219034734661, + "parentId": 174219034718279, + "name": null, + "label": "查询", + "path": "/api/admin/dict-type/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 104, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 174219034734662, + "parentId": 174219034718279, + "name": null, + "label": "查询分页", + "path": "/api/admin/dict-type/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 105, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 174219034734663, + "parentId": 174219034718279, + "name": null, + "label": "新增", + "path": "/api/admin/dict-type/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 106, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 174219034734664, + "parentId": 174219034718279, + "name": null, + "label": "修改", + "path": "/api/admin/dict-type/update", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 107, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 174219034734665, + "parentId": 174219034718279, + "name": null, + "label": "删除", + "path": "/api/admin/dict-type/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 110, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 184100551532613, + "parentId": 174219034718279, + "name": null, + "label": "批量删除", + "path": "/api/admin/dict-type/batch-soft-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 111, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 271618651926597, + "parentId": 174219034718279, + "name": null, + "label": "彻底删除", + "path": "/api/admin/dict-type/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 108, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 372390893666373, + "parentId": 174219034718279, + "name": null, + "label": "批量彻底删除", + "path": "/api/admin/dict-type/batch-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 109, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 336555241189445, + "parentId": 373083895201861, + "name": null, + "label": "任务日志服务", + "path": "task-log", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 17, + "enabled": true, + "childs": [ + { + "id": 336555241427018, + "parentId": 336555241189445, + "name": null, + "label": "查询分页", + "path": "/api/admin/task-log/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 90, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 336555241193541, + "parentId": 373083895201861, + "name": null, + "label": "任务服务", + "path": "task", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 16, + "enabled": true, + "childs": [ + { + "id": 336555241422922, + "parentId": 336555241193541, + "name": null, + "label": "查询", + "path": "/api/admin/task/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 92, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 336555241427013, + "parentId": 336555241193541, + "name": null, + "label": "查询分页", + "path": "/api/admin/task/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 93, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 336555241427014, + "parentId": 336555241193541, + "name": null, + "label": "新增", + "path": "/api/admin/task/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 94, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 336555241427015, + "parentId": 336555241193541, + "name": null, + "label": "修改", + "path": "/api/admin/task/update", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 95, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 336555241427016, + "parentId": 336555241193541, + "name": null, + "label": "删除任务", + "path": "/api/admin/task/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 99, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 343342310699077, + "parentId": 336555241193541, + "name": null, + "label": "暂停任务", + "path": "/api/admin/task/pause", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 96, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 343342310703173, + "parentId": 336555241193541, + "name": null, + "label": "启动任务", + "path": "/api/admin/task/resume", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 97, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 343342310703174, + "parentId": 336555241193541, + "name": null, + "label": "执行任务", + "path": "/api/admin/task/run", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 98, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292288080, + "parentId": 336555241193541, + "name": null, + "label": "查询报警邮件", + "path": "/api/admin/task/get-aler-email", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 91, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292288081, + "parentId": 336555241193541, + "name": null, + "label": "批量执行任务", + "path": "/api/admin/task/batch-run", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 100, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292292165, + "parentId": 336555241193541, + "name": null, + "label": "批量暂停任务", + "path": "/api/admin/task/batch-pause", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 101, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292292166, + "parentId": 336555241193541, + "name": null, + "label": "批量启动任务", + "path": "/api/admin/task/batch-resume", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 102, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292292167, + "parentId": 336555241193541, + "name": null, + "label": "批量删除任务", + "path": "/api/admin/task/batch-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 103, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 371292589752389, + "parentId": 373083895201861, + "name": null, + "label": "文件服务", + "path": "file", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 21, + "enabled": true, + "childs": [ + { + "id": 371292589764677, + "parentId": 371292589752389, + "name": null, + "label": "查询分页", + "path": "/api/admin/file/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 61, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 371678435708997, + "parentId": 371292589752389, + "name": null, + "label": "上传文件", + "path": "/api/admin/file/upload-file", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 63, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 371678435725381, + "parentId": 371292589752389, + "name": null, + "label": "上传多文件", + "path": "/api/admin/file/upload-files", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 64, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 372031353708613, + "parentId": 371292589752389, + "name": null, + "label": "删除", + "path": "/api/admin/file/delete", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 62, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 399372669788229, + "parentId": 373083895201861, + "name": null, + "label": "验证码服务", + "path": "captcha", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 25, + "enabled": true, + "childs": [ + { + "id": 399372669796421, + "parentId": 399372669788229, + "name": null, + "label": "生成", + "path": "/api/admin/captcha/generate", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 37, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 399372669796422, + "parentId": 399372669788229, + "name": null, + "label": "验证", + "path": "/api/admin/captcha/check", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 38, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 399372669796423, + "parentId": 399372669788229, + "name": null, + "label": "发送短信验证码", + "path": "/api/admin/captcha/send-sms-code", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 39, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 588527858696261, + "parentId": 399372669788229, + "name": null, + "label": "发送邮件验证码", + "path": "/api/admin/captcha/send-email-code", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 40, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-09T10:26:00", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164901957, + "parentId": 373083895201861, + "name": null, + "label": "套餐服务", + "path": "pkg", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 13, + "enabled": true, + "childs": [ + { + "id": 402830164910150, + "parentId": 402830164901957, + "name": null, + "label": "查询", + "path": "/api/admin/pkg/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 126, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164910151, + "parentId": 402830164901957, + "name": null, + "label": "查询列表", + "path": "/api/admin/pkg/get-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 127, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164910152, + "parentId": 402830164901957, + "name": null, + "label": "查询分页", + "path": "/api/admin/pkg/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 128, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164914245, + "parentId": 402830164901957, + "name": null, + "label": "查询套餐租户列表", + "path": "/api/admin/pkg/get-pkg-tenant-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 129, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164914246, + "parentId": 402830164901957, + "name": null, + "label": "查询套餐权限列表", + "path": "/api/admin/pkg/get-pkg-permission-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 131, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164914247, + "parentId": 402830164901957, + "name": null, + "label": "设置套餐权限", + "path": "/api/admin/pkg/set-pkg-permissions", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 132, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164914248, + "parentId": 402830164901957, + "name": null, + "label": "添加套餐租户", + "path": "/api/admin/pkg/add-pkg-tenant", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 133, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164914249, + "parentId": 402830164901957, + "name": null, + "label": "移除套餐租户", + "path": "/api/admin/pkg/remove-pkg-tenant", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 134, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164914250, + "parentId": 402830164901957, + "name": null, + "label": "新增", + "path": "/api/admin/pkg/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 135, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164914251, + "parentId": 402830164901957, + "name": null, + "label": "修改", + "path": "/api/admin/pkg/update", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 136, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164914252, + "parentId": 402830164901957, + "name": null, + "label": "彻底删除", + "path": "/api/admin/pkg/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 137, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164914253, + "parentId": 402830164901957, + "name": null, + "label": "批量彻底删除", + "path": "/api/admin/pkg/batch-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 138, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164914254, + "parentId": 402830164901957, + "name": null, + "label": "删除", + "path": "/api/admin/pkg/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 139, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 402830164914255, + "parentId": 402830164901957, + "name": null, + "label": "批量删除", + "path": "/api/admin/pkg/batch-soft-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 140, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 403173446250565, + "parentId": 402830164901957, + "name": null, + "label": "查询套餐租户分页", + "path": "/api/admin/pkg/get-pkg-tenant-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 130, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292267589, + "parentId": 373083895201861, + "name": null, + "label": "地区服务", + "path": "region", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 26, + "enabled": true, + "childs": [ + { + "id": 544353292288069, + "parentId": 544353292267589, + "name": null, + "label": "查询", + "path": "/api/admin/region/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 27, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292288070, + "parentId": 544353292267589, + "name": null, + "label": "查询下级列表", + "path": "/api/admin/region/get-child-list", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 28, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292288071, + "parentId": 544353292267589, + "name": null, + "label": "查询分页", + "path": "/api/admin/region/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 29, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292288072, + "parentId": 544353292267589, + "name": null, + "label": "新增", + "path": "/api/admin/region/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 30, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292288073, + "parentId": 544353292267589, + "name": null, + "label": "修改", + "path": "/api/admin/region/update", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 31, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292288074, + "parentId": 544353292267589, + "name": null, + "label": "彻底删除", + "path": "/api/admin/region/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 32, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292288075, + "parentId": 544353292267589, + "name": null, + "label": "删除", + "path": "/api/admin/region/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 33, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292288076, + "parentId": 544353292267589, + "name": null, + "label": "设置启用", + "path": "/api/admin/region/set-enable", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 34, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292288077, + "parentId": 544353292267589, + "name": null, + "label": "设置热门", + "path": "/api/admin/region/set-hot", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 35, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 544353292288078, + "parentId": 544353292267589, + "name": null, + "label": "同步数据", + "path": "/api/admin/region/sync-data", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 36, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:39:14", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 616492406964293, + "parentId": 373083895201861, + "name": null, + "label": "消息服务", + "path": "msg", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 4, + "enabled": true, + "childs": [ + { + "id": 616492407009349, + "parentId": 616492406964293, + "name": null, + "label": "查询", + "path": "/api/admin/msg/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 208, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T10:54:02", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 616492407009350, + "parentId": 616492406964293, + "name": null, + "label": "查询分页", + "path": "/api/admin/msg/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 209, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T10:54:02", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 616492407009351, + "parentId": 616492406964293, + "name": null, + "label": "查询消息用户列表", + "path": "/api/admin/msg/get-msg-user-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 210, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T10:54:02", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 616492407009352, + "parentId": 616492406964293, + "name": null, + "label": "添加消息用户", + "path": "/api/admin/msg/add-msg-user", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 211, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T10:54:02", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 616492407009353, + "parentId": 616492406964293, + "name": null, + "label": "移除消息用户", + "path": "/api/admin/msg/remove-msg-user", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 212, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T10:54:02", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 616492407009354, + "parentId": 616492406964293, + "name": null, + "label": "新增", + "path": "/api/admin/msg/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 213, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T10:54:02", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 616492407009355, + "parentId": 616492406964293, + "name": null, + "label": "修改", + "path": "/api/admin/msg/update", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 214, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T10:54:02", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 616492407013445, + "parentId": 616492406964293, + "name": null, + "label": "彻底删除", + "path": "/api/admin/msg/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 215, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T10:54:02", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 616492407013446, + "parentId": 616492406964293, + "name": null, + "label": "批量彻底删除", + "path": "/api/admin/msg/batch-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 216, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T10:54:02", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 616492407013447, + "parentId": 616492406964293, + "name": null, + "label": "删除", + "path": "/api/admin/msg/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 217, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T10:54:02", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 616492407017541, + "parentId": 616492406964293, + "name": null, + "label": "批量删除", + "path": "/api/admin/msg/batch-soft-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 218, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T10:54:02", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T10:54:02", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 618674443731013, + "parentId": 373083895201861, + "name": null, + "label": "消息分类服务", + "path": "msg-type", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 5, + "enabled": true, + "childs": [ + { + "id": 618674443784261, + "parentId": 618674443731013, + "name": null, + "label": "查询", + "path": "/api/admin/msg-type/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 219, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T14:52:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 618674443784262, + "parentId": 618674443731013, + "name": null, + "label": "查询列表", + "path": "/api/admin/msg-type/get-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 220, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T14:52:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 618674443788357, + "parentId": 618674443731013, + "name": null, + "label": "新增", + "path": "/api/admin/msg-type/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 221, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T14:52:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 618674443788358, + "parentId": 618674443731013, + "name": null, + "label": "修改", + "path": "/api/admin/msg-type/update", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 222, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T14:52:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 618674443788359, + "parentId": 618674443731013, + "name": null, + "label": "彻底删除", + "path": "/api/admin/msg-type/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 223, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T14:52:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 618674443788360, + "parentId": 618674443731013, + "name": null, + "label": "批量彻底删除", + "path": "/api/admin/msg-type/batch-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 224, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T14:52:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 618674443788361, + "parentId": 618674443731013, + "name": null, + "label": "删除", + "path": "/api/admin/msg-type/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 225, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T14:52:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 618674443788362, + "parentId": 618674443731013, + "name": null, + "label": "批量删除", + "path": "/api/admin/msg-type/batch-soft-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 226, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T14:52:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T14:52:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 622257407143941, + "parentId": 373083895201861, + "name": null, + "label": "WebSocket", + "path": "web-socket", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 2, + "enabled": true, + "childs": [ + { + "id": 622257407160334, + "parentId": 622257407143941, + "name": null, + "label": "获取websocket分区", + "path": "/api/admin/web-socket/pre-connect", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 250, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:51:53", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 622257407160335, + "parentId": 622257407143941, + "name": null, + "label": "是否使用im", + "path": "/api/admin/web-socket/is-use-im", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 251, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:51:53", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:51:53", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 622257407156229, + "parentId": 373083895201861, + "name": null, + "label": "站内信服务", + "path": "site-msg", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 9, + "enabled": true, + "childs": [ + { + "id": 622257407160325, + "parentId": 622257407156229, + "name": null, + "label": "获得内容", + "path": "/api/admin/site-msg/get-content", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 172, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:51:53", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 622257407160326, + "parentId": 622257407156229, + "name": null, + "label": "查询分页", + "path": "/api/admin/site-msg/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 173, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:51:53", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 622257407160327, + "parentId": 622257407156229, + "name": null, + "label": "是否未读", + "path": "/api/admin/site-msg/is-unread", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 174, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:51:53", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 622257407160328, + "parentId": 622257407156229, + "name": null, + "label": "全部标为已读", + "path": "/api/admin/site-msg/set-all-read", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 175, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:51:53", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 622257407160329, + "parentId": 622257407156229, + "name": null, + "label": "标为已读", + "path": "/api/admin/site-msg/set-read", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 176, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:51:53", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 622257407160330, + "parentId": 622257407156229, + "name": null, + "label": "批量标为已读", + "path": "/api/admin/site-msg/batch-set-read", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 177, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:51:53", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 622257407160331, + "parentId": 622257407156229, + "name": null, + "label": "删除", + "path": "/api/admin/site-msg/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 178, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:51:53", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 622257407160332, + "parentId": 622257407156229, + "name": null, + "label": "批量删除", + "path": "/api/admin/site-msg/batch-soft-delete", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": true, + "enabledResult": true, + "description": "", + "sort": 179, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:51:53", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:51:53", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 655835953770565, + "parentId": 373083895201861, + "name": null, + "label": "打印模板服务", + "path": "print-template", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 6, + "enabled": true, + "childs": [ + { + "id": 655835953811525, + "parentId": 655835953770565, + "name": null, + "label": "查询", + "path": "/api/admin/print-template/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 197, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:03:20", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 655835953811526, + "parentId": 655835953770565, + "name": null, + "label": "查询分页", + "path": "/api/admin/print-template/get-page", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 199, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:03:20", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 655835953811527, + "parentId": 655835953770565, + "name": null, + "label": "新增", + "path": "/api/admin/print-template/add", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 200, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:03:20", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 655835953815621, + "parentId": 655835953770565, + "name": null, + "label": "修改", + "path": "/api/admin/print-template/update", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 201, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:03:20", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 655835953815622, + "parentId": 655835953770565, + "name": null, + "label": "彻底删除", + "path": "/api/admin/print-template/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 204, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:03:20", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 655835953815623, + "parentId": 655835953770565, + "name": null, + "label": "批量彻底删除", + "path": "/api/admin/print-template/batch-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 205, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:03:20", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 655835953815624, + "parentId": 655835953770565, + "name": null, + "label": "删除", + "path": "/api/admin/print-template/soft-delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 206, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:03:20", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 655835953819717, + "parentId": 655835953770565, + "name": null, + "label": "批量删除", + "path": "/api/admin/print-template/batch-soft-delete", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 207, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:03:20", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 655842349916229, + "parentId": 655835953770565, + "name": null, + "label": "设置启用", + "path": "/api/admin/print-template/set-enable", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 203, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:29:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 663999082807365, + "parentId": 655835953770565, + "name": null, + "label": "查询修改模板", + "path": "/api/admin/print-template/get-update-template", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 198, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-10T16:39:12", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 663999082860613, + "parentId": 655835953770565, + "name": null, + "label": "修改模板", + "path": "/api/admin/print-template/update-template", + "httpMethods": "put", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 202, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-10T16:39:12", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:03:20", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 683368492085317, + "parentId": 373083895201861, + "name": null, + "label": "查询模板服务", + "path": "search-template", + "httpMethods": null, + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 8, + "enabled": true, + "childs": [ + { + "id": 683368492134469, + "parentId": 683368492085317, + "name": null, + "label": "查询", + "path": "/api/admin/search-template/get", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 180, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-06-04T10:13:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 683368492134470, + "parentId": 683368492085317, + "name": null, + "label": "查询列表", + "path": "/api/admin/search-template/get-list", + "httpMethods": "get", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 181, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-06-04T10:13:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 683368492138565, + "parentId": 683368492085317, + "name": null, + "label": "保存", + "path": "/api/admin/search-template/save", + "httpMethods": "post", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 182, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-06-04T10:13:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + }, + { + "id": 683368492138566, + "parentId": 683368492085317, + "name": null, + "label": "彻底删除", + "path": "/api/admin/search-template/delete", + "httpMethods": "delete", + "enabledLog": true, + "enabledParams": false, + "enabledResult": false, + "description": "", + "sort": 183, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-06-04T10:13:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-06-04T10:13:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:32" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_dict.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_dict.json new file mode 100644 index 0000000..a0e586f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_dict.json @@ -0,0 +1,192 @@ +[ + { + "id": 187395320303685, + "dictTypeId": 187395320434757, + "name": "男", + "code": "male", + "value": "1", + "description": "", + "enabled": true, + "sort": 1, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 187395320369221, + "dictTypeId": 187395320434757, + "name": "女", + "code": "female", + "value": "2", + "description": "", + "enabled": true, + "sort": 2, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 590371582722117, + "dictTypeId": 590369253568581, + "name": "图片", + "code": "image", + "value": "1", + "description": null, + "enabled": true, + "sort": 1, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-14T15:28:08", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 590371764596805, + "dictTypeId": 590369253568581, + "name": "文档", + "code": "doc", + "value": "2", + "description": null, + "enabled": true, + "sort": 2, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-14T15:28:52", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-09-14T15:32:49" + }, + { + "id": 590372695543877, + "dictTypeId": 590369253568581, + "name": "视频", + "code": "video", + "value": "3", + "description": null, + "enabled": true, + "sort": 3, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-14T15:32:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-09-14T15:32:58" + }, + { + "id": 590372960862277, + "dictTypeId": 590369253568581, + "name": "音频", + "code": "audio", + "value": "4", + "description": null, + "enabled": true, + "sort": 4, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-14T15:33:45", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 590373057781829, + "dictTypeId": 590369253568581, + "name": "其他", + "code": "other", + "value": "5", + "description": null, + "enabled": true, + "sort": 5, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-14T15:34:08", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 663210333147205, + "dictTypeId": 663210221912133, + "name": "Web端", + "code": "web", + "value": "1", + "description": null, + "enabled": true, + "sort": 1, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-08T11:09:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-04-08T11:41:27" + }, + { + "id": 663210372075589, + "dictTypeId": 663210221912133, + "name": "CS端", + "code": "cs", + "value": "3", + "description": null, + "enabled": true, + "sort": 3, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-08T11:09:56", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-04-08T11:41:34" + }, + { + "id": 663210447855685, + "dictTypeId": 663210221912133, + "name": "App端", + "code": "app", + "value": "2", + "description": null, + "enabled": true, + "sort": 2, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-08T11:10:15", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-04-08T11:41:59" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_dict_type.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_dict_type.json new file mode 100644 index 0000000..6b86e04 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_dict_type.json @@ -0,0 +1,53 @@ +[ + { + "id": 187395320434757, + "name": "性别", + "code": "sex", + "description": "", + "enabled": true, + "sort": 1, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 590369253568581, + "name": "文件类型", + "code": "file-type", + "description": null, + "enabled": true, + "sort": 2, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-14T15:18:39", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 663210221912133, + "name": "平台", + "code": "platform", + "description": null, + "enabled": true, + "sort": 3, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-08T11:09:20", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_org.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_org.json new file mode 100644 index 0000000..d0dcd5e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_org.json @@ -0,0 +1,23 @@ +[ + { + "id": 189097691009093, + "parentId": 0, + "name": "中台", + "code": "zhontai", + "value": "", + "memberCount": 0, + "enabled": true, + "sort": 1, + "description": "", + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_org.tenant.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_org.tenant.json new file mode 100644 index 0000000..b7f0617 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_org.tenant.json @@ -0,0 +1,24 @@ +[ + { + "id": 189097691009093, + "tenantId": 161223412138053, + "parentId": 0, + "name": "中台", + "code": "zhontai", + "value": "", + "memberCount": 0, + "enabled": true, + "sort": 1, + "description": "", + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_permission.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_permission.json new file mode 100644 index 0000000..5f0a12c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_permission.json @@ -0,0 +1,4961 @@ +[ + { + "id": 161227168497733, + "platform": null, + "parentId": 0, + "label": "平台管理", + "code": null, + "type": 1, + "viewId": null, + "name": null, + "path": "/platform", + "redirect": "", + "icon": "ele-Platform", + "hidden": false, + "opened": true, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": null, + "enabled": true, + "childs": [ + { + "id": 161227168632902, + "platform": null, + "parentId": 161227168497733, + "label": "工作台", + "code": null, + "type": 2, + "viewId": 161227168428101, + "name": "admin/workbench", + "path": "/platform/workbench", + "redirect": null, + "icon": "iconfont icon-shuju1", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": true, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-04-09T11:32:21" + }, + { + "id": 161227168636997, + "platform": null, + "parentId": 161227168497733, + "label": "权限管理", + "code": null, + "type": 1, + "viewId": null, + "name": null, + "path": "/platform/auth", + "redirect": "/platform/auth/user", + "icon": "iconfont icon-quanxian", + "hidden": false, + "opened": true, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [ + { + "id": 161227168636998, + "platform": null, + "parentId": 161227168636997, + "label": "用户管理", + "code": null, + "type": 2, + "viewId": 161227168436295, + "name": "admin/user", + "path": "/platform/auth/user", + "redirect": null, + "icon": "ele-Avatar", + "hidden": false, + "opened": false, + "newWindow": false, + "external": true, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [ + { + "id": 161227168641093, + "platform": null, + "parentId": 161227168636998, + "label": "查询", + "code": "api:admin:user:getpage", + "type": 3, + "viewId": null, + "name": null, + "path": "", + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-11-27T22:23:34" + }, + { + "id": 161227168641094, + "platform": null, + "parentId": 161227168636998, + "label": "新增", + "code": "api:admin:user:add", + "type": 3, + "viewId": null, + "name": null, + "path": "", + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168645189, + "platform": null, + "parentId": 161227168636998, + "label": "修改", + "code": "api:admin:user:update", + "type": 3, + "viewId": null, + "name": null, + "path": "", + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168645190, + "platform": null, + "parentId": 161227168636998, + "label": "删除", + "code": "api:admin:user:delete", + "type": 3, + "viewId": null, + "name": null, + "path": "", + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168649285, + "platform": null, + "parentId": 161227168636998, + "label": "批量删除", + "code": "api:admin:user:batchdelete", + "type": 3, + "viewId": null, + "name": null, + "path": "", + "redirect": null, + "icon": "", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 5, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 349749511946309, + "platform": null, + "parentId": 161227168636998, + "label": "重置密码", + "code": "api:admin:user:reset-password", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 7, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 349749778899013, + "platform": null, + "parentId": 161227168636998, + "label": "设置主管", + "code": "api:admin:user:set-manager", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 6, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 394672570462277, + "platform": null, + "parentId": 161227168636998, + "label": "禁用", + "code": "api:admin:user:set-enable", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 8, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 427947735298117, + "platform": null, + "parentId": 161227168636998, + "label": "一键登录用户", + "code": "api:admin:user:one-click-login", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 9, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 622257664507909, + "platform": null, + "parentId": 161227168636998, + "label": "强制下线", + "code": "api:admin:user:force-offline", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 10, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:52:56", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-12-13T17:53:03" + }, + { + "id": 623007419007045, + "platform": "web", + "parentId": 161227168636998, + "label": "部门转移", + "code": "api:admin:user:batch-set-org", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 11, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-15T20:43:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-04-22T14:56:31" + }, + { + "id": 668221388660805, + "platform": "web", + "parentId": 161227168636998, + "label": "恢复", + "code": "api:admin:user:restore", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 12, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-22T14:59:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-04-22T14:59:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-11-27T22:23:27" + }, + { + "id": 161227168653381, + "platform": null, + "parentId": 161227168636997, + "label": "角色管理", + "code": null, + "type": 2, + "viewId": 161227168440389, + "name": "admin/role", + "path": "/platform/auth/role", + "redirect": null, + "icon": "iconfont icon-icon-", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [ + { + "id": 161227168653382, + "platform": null, + "parentId": 161227168653381, + "label": "查询", + "code": "api:admin:role:get-list", + "type": 3, + "viewId": null, + "name": null, + "path": " ", + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168657477, + "platform": null, + "parentId": 161227168653381, + "label": "新增", + "code": "api:admin:role:add", + "type": 3, + "viewId": null, + "name": null, + "path": " ", + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168657478, + "platform": null, + "parentId": 161227168653381, + "label": "修改", + "code": "api:admin:role:update", + "type": 3, + "viewId": null, + "name": null, + "path": " ", + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168661573, + "platform": null, + "parentId": 161227168653381, + "label": "删除", + "code": "api:admin:role:delete", + "type": 3, + "viewId": null, + "name": null, + "path": " ", + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168665669, + "platform": null, + "parentId": 161227168653381, + "label": "批量删除", + "code": "api:admin:role:batchdelete", + "type": 3, + "viewId": null, + "name": null, + "path": " ", + "redirect": null, + "icon": "", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 5, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 340645133123653, + "platform": null, + "parentId": 161227168653381, + "label": "设置菜单权限", + "code": "api:admin:permission:assign", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 8, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 340890474405957, + "platform": null, + "parentId": 161227168653381, + "label": "添加员工", + "code": "api:admin:role:add-role-user", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 6, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 340890633515077, + "platform": null, + "parentId": 161227168653381, + "label": "移除员工", + "code": "api:admin:role:remove-role-user", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 7, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 564648879607877, + "platform": null, + "parentId": 161227168653381, + "label": "设置数据权限", + "code": "api:admin:role:set-data-scope", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 9, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-07-03T23:02:12", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168702533, + "platform": null, + "parentId": 161227168636997, + "label": "权限管理", + "code": null, + "type": 2, + "viewId": 161227168444486, + "name": "admin/permission", + "path": "/platform/auth/permission", + "redirect": null, + "icon": "iconfont icon-zidingyibuju", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": "", + "enabled": true, + "childs": [ + { + "id": 161227168702534, + "platform": null, + "parentId": 161227168702533, + "label": "查询", + "code": "api:admin:permission:getlist", + "type": 3, + "viewId": null, + "name": null, + "path": "", + "redirect": null, + "icon": "", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168706629, + "platform": null, + "parentId": 161227168702533, + "label": "新增分组", + "code": "api:admin:permission:addgroup", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168706630, + "platform": null, + "parentId": 161227168702533, + "label": "新增菜单", + "code": "api:admin:permission:addmenu", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168710726, + "platform": null, + "parentId": 161227168702533, + "label": "修改分组", + "code": "api:admin:permission:updategroup", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 5, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168714821, + "platform": null, + "parentId": 161227168702533, + "label": "修改菜单", + "code": "api:admin:permission:updatemenu", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 6, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168718917, + "platform": null, + "parentId": 161227168702533, + "label": "删除", + "code": "api:admin:permission:delete", + "type": 3, + "viewId": null, + "name": null, + "path": " ", + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 8, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168727110, + "platform": null, + "parentId": 161227168702533, + "label": "新增权限点", + "code": "api:admin:permission:adddot", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168731205, + "platform": null, + "parentId": 161227168702533, + "label": "修改权限点", + "code": "api:admin:permission:updatedot", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 7, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168751685, + "platform": null, + "parentId": 161227168636997, + "label": "租户管理", + "code": null, + "type": 2, + "viewId": 161227168448583, + "name": "admin/tenant", + "path": "/platform/auth/tenant", + "redirect": null, + "icon": "ele-Stamp", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 6, + "description": "", + "enabled": true, + "childs": [ + { + "id": 161227168751686, + "platform": null, + "parentId": 161227168751685, + "label": "查询", + "code": "api:admin:tenant:getpage", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168755781, + "platform": null, + "parentId": 161227168751685, + "label": "新增", + "code": "api:admin:tenant:add", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168755782, + "platform": null, + "parentId": 161227168751685, + "label": "修改", + "code": "api:admin:tenant:update", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168759877, + "platform": null, + "parentId": 161227168751685, + "label": "删除", + "code": "api:admin:tenant:delete", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161807358345285, + "platform": null, + "parentId": 161227168751685, + "label": "设置权限", + "code": "api:admin:permission:savetenantpermissions", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 7, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 394672685342789, + "platform": null, + "parentId": 161227168751685, + "label": "禁用", + "code": "api:admin:tenant:set-enable", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 8, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 594602727731269, + "platform": null, + "parentId": 161227168751685, + "label": "一键登录", + "code": "api:admin:tenant:one-click-login", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 9, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-26T14:24:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-11-22T23:51:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 188053882503237, + "platform": null, + "parentId": 161227168636997, + "label": "部门管理", + "code": null, + "type": 2, + "viewId": 174312361087045, + "name": "admin/org", + "path": "/platform/auth/org", + "redirect": null, + "icon": "iconfont icon-shuxingtu", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": "", + "enabled": true, + "childs": [ + { + "id": 188054258278469, + "platform": null, + "parentId": 188053882503237, + "label": "查询", + "code": "api:admin:org:getlist", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 188054341582917, + "platform": null, + "parentId": 188053882503237, + "label": "新增", + "code": "api:admin:org:add", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 188054416891973, + "platform": null, + "parentId": 188053882503237, + "label": "修改", + "code": "api:admin:org:update", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 188054509027397, + "platform": null, + "parentId": 188053882503237, + "label": "删除", + "code": "api:admin:org:delete", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 402829461262405, + "platform": null, + "parentId": 161227168636997, + "label": "套餐管理", + "code": null, + "type": 2, + "viewId": 402829224460357, + "name": null, + "path": "/platform/auth/pkg", + "redirect": null, + "icon": "ele-Suitcase", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 5, + "description": null, + "enabled": true, + "childs": [ + { + "id": 402838978203717, + "platform": null, + "parentId": 402829461262405, + "label": "查询", + "code": "api:admin:pkg:get", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 402839687192645, + "platform": null, + "parentId": 402829461262405, + "label": "新增", + "code": "api:admin:pkg:add", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 402840395829317, + "platform": null, + "parentId": 402829461262405, + "label": "修改", + "code": "api:admin:pkg:update", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 402840520048709, + "platform": null, + "parentId": 402829461262405, + "label": "删除", + "code": "api:admin:pkg:delete", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 402840810463301, + "platform": null, + "parentId": 402829461262405, + "label": "添加租户", + "code": "api:admin:pkg:add-pkg-tenant", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 5, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 402840869605445, + "platform": null, + "parentId": 402829461262405, + "label": "移除租户", + "code": "api:admin:pkg:remove-pkg-tenant", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 6, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 402843985313861, + "platform": null, + "parentId": 402829461262405, + "label": "设置套餐权限", + "code": "api:admin:pkg:set-pkg-permissions", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 7, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-11-27T22:23:30" + }, + { + "id": 161227168763974, + "platform": null, + "parentId": 161227168497733, + "label": "系统管理", + "code": null, + "type": 1, + "viewId": null, + "name": null, + "path": "/platform/system", + "redirect": "/platform/system/dict", + "icon": "ele-Setting", + "hidden": false, + "opened": true, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": "", + "enabled": true, + "childs": [ + { + "id": 161227168669765, + "platform": null, + "parentId": 161227168763974, + "label": "接口管理", + "code": null, + "type": 2, + "viewId": 161227168440390, + "name": "admin/api", + "path": "/platform/system/api", + "redirect": null, + "icon": "ele-Operation", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": "", + "enabled": true, + "childs": [ + { + "id": 161227168669766, + "platform": null, + "parentId": 161227168669765, + "label": "查询", + "code": "api:admin:api:getlist", + "type": 3, + "viewId": null, + "name": null, + "path": "", + "redirect": null, + "icon": "", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168673861, + "platform": null, + "parentId": 161227168669765, + "label": "新增", + "code": "api:admin:api:add", + "type": 3, + "viewId": null, + "name": null, + "path": " ", + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168673862, + "platform": null, + "parentId": 161227168669765, + "label": "修改", + "code": "api:admin:api:update", + "type": 3, + "viewId": null, + "name": null, + "path": " ", + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168677957, + "platform": null, + "parentId": 161227168669765, + "label": "删除", + "code": "api:admin:api:delete", + "type": 3, + "viewId": null, + "name": null, + "path": " ", + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168677958, + "platform": null, + "parentId": 161227168669765, + "label": "批量删除", + "code": "api:admin:api:batchdelete", + "type": 3, + "viewId": null, + "name": null, + "path": "", + "redirect": null, + "icon": "", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 5, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168682053, + "platform": null, + "parentId": 161227168669765, + "label": "同步", + "code": "api:admin:api:sync", + "type": 3, + "viewId": null, + "name": null, + "path": "", + "redirect": null, + "icon": "", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 6, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168686149, + "platform": null, + "parentId": 161227168763974, + "label": "视图管理", + "code": null, + "type": 2, + "viewId": 161227168444485, + "name": "admin/view", + "path": "/platform/system/view", + "redirect": null, + "icon": "ele-Postcard", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 5, + "description": "", + "enabled": true, + "childs": [ + { + "id": 161227168686150, + "platform": null, + "parentId": 161227168686149, + "label": "查询", + "code": "api:admin:view:getlist", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168690245, + "platform": null, + "parentId": 161227168686149, + "label": "新增", + "code": "api:admin:view:add", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168690246, + "platform": null, + "parentId": 161227168686149, + "label": "修改", + "code": "api:admin:view:update", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168694341, + "platform": null, + "parentId": 161227168686149, + "label": "删除", + "code": "api:admin:view:delete", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168694342, + "platform": null, + "parentId": 161227168686149, + "label": "批量删除", + "code": "api:admin:view:batchdelete", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 5, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168698437, + "platform": null, + "parentId": 161227168686149, + "label": "同步", + "code": "api:admin:view:sync", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 6, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168743493, + "platform": null, + "parentId": 161227168763974, + "label": "缓存管理", + "code": null, + "type": 2, + "viewId": 161227168448582, + "name": "admin/cache", + "path": "/platform/system/cache", + "redirect": null, + "icon": "ele-Brush", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": "", + "enabled": true, + "childs": [ + { + "id": 161227168747589, + "platform": null, + "parentId": 161227168743493, + "label": "查询", + "code": "api:admin:cache:list", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168747590, + "platform": null, + "parentId": 161227168743493, + "label": "清除缓存", + "code": "api:admin:cache:clear", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168796741, + "platform": null, + "parentId": 161227168763974, + "label": "文档管理", + "code": null, + "type": 2, + "viewId": 161227168456774, + "name": "admin/doc", + "path": "/platform/system/document", + "redirect": null, + "icon": "iconfont icon-gongju", + "hidden": true, + "opened": false, + "newWindow": false, + "external": true, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 6, + "description": "", + "enabled": true, + "childs": [ + { + "id": 161227168800838, + "platform": null, + "parentId": 161227168796741, + "label": "新增分组", + "code": "api:admin:document:addgroup", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168804933, + "platform": null, + "parentId": 161227168796741, + "label": "新增菜单", + "code": "api:admin:document:addmenu", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168809029, + "platform": null, + "parentId": 161227168796741, + "label": "修改分组", + "code": "api:admin:document:updategroup", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 5, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168813125, + "platform": null, + "parentId": 161227168796741, + "label": "修改菜单", + "code": "api:admin:document:updatemenu", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 6, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168813126, + "platform": null, + "parentId": 161227168796741, + "label": "删除文档", + "code": "api:admin:document:softdelete", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 8, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168821318, + "platform": null, + "parentId": 161227168796741, + "label": "查询文档", + "code": "api:admin:document:getlist", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168825414, + "platform": null, + "parentId": 161227168796741, + "label": "修改文档", + "code": "api:admin:document:updatecontent", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 7, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168829509, + "platform": null, + "parentId": 161227168796741, + "label": "上传图片", + "code": "api:admin:document:uploadimage", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 10, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168833605, + "platform": null, + "parentId": 161227168796741, + "label": "查询图片", + "code": "api:admin:document:getimagelist", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168833606, + "platform": null, + "parentId": 161227168796741, + "label": "删除图片", + "code": "api:admin:document:deleteimage", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 9, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 187055743545413, + "platform": null, + "parentId": 161227168763974, + "label": "数据字典", + "code": null, + "type": 2, + "viewId": 187053736300613, + "name": "admin/dict", + "path": "/platform/system/dict", + "redirect": null, + "icon": "ele-CreditCard", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [ + { + "id": 187375358951493, + "platform": null, + "parentId": 187055743545413, + "label": "查询", + "code": "api:admin:dict:getpage", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 187389970825285, + "platform": null, + "parentId": 187055743545413, + "label": "修改", + "code": "api:admin:dict:update", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 187390547820613, + "platform": null, + "parentId": 187055743545413, + "label": "删除", + "code": "api:admin:dict:delete", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 187391371018309, + "platform": null, + "parentId": 187055743545413, + "label": "批量删除", + "code": "api:admin:dict:batchsoftdelete", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 5, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 187391980761157, + "platform": null, + "parentId": 187055743545413, + "label": "新增", + "code": "api:admin:dict:add", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 551712205733957, + "platform": null, + "parentId": 187055743545413, + "label": "导出", + "code": "api:admin:dict:export-data", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 6, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-28T09:42:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-09-26T15:07:00" + }, + { + "id": 594612873289797, + "platform": null, + "parentId": 187055743545413, + "label": "导入", + "code": "api:admin:dict:import-data", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 7, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-26T15:05:59", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-09-26T15:06:06" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 342340463398981, + "platform": null, + "parentId": 161227168763974, + "label": "任务调度", + "code": null, + "type": 2, + "viewId": 336556164300869, + "name": "admin/task", + "path": "/platform/system/task", + "redirect": null, + "icon": "ele-Clock", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [ + { + "id": 343342945812549, + "platform": null, + "parentId": 342340463398981, + "label": "查询任务", + "code": "api:admin:task:get", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 343343120306245, + "platform": null, + "parentId": 342340463398981, + "label": "查询任务列表", + "code": "api:admin:task:get-page", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 343343209164869, + "platform": null, + "parentId": 342340463398981, + "label": "新增", + "code": "api:admin:task:add", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 343343735894085, + "platform": null, + "parentId": 342340463398981, + "label": "修改", + "code": "api:admin:task:update", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 5, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 343343926595653, + "platform": null, + "parentId": 342340463398981, + "label": "暂停任务", + "code": "api:admin:task:pause", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 8, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 343343989960773, + "platform": null, + "parentId": 342340463398981, + "label": "启动任务", + "code": "api:admin:task:resume", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 7, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 343344066166853, + "platform": null, + "parentId": 342340463398981, + "label": "执行任务", + "code": "api:admin:task:run", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 9, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 343344158351429, + "platform": null, + "parentId": 342340463398981, + "label": "删除任务", + "code": "api:admin:task:delete", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 6, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 343344363630661, + "platform": null, + "parentId": 342340463398981, + "label": "查询任务日志", + "code": "api:admin:task-log:get-page", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 371247914160197, + "platform": null, + "parentId": 161227168763974, + "label": "文件管理", + "code": null, + "type": 2, + "viewId": 371247502852165, + "name": "admin/file", + "path": "/platform/system/file", + "redirect": null, + "icon": "ele-Memo", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 7, + "description": null, + "enabled": true, + "childs": [ + { + "id": 372004430860357, + "platform": null, + "parentId": 371247914160197, + "label": "查询", + "code": "api:admin:file:get-page", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 372004589551685, + "platform": null, + "parentId": 371247914160197, + "label": "上传", + "code": "api:admin:file:upload-file", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 372031447494725, + "platform": null, + "parentId": 371247914160197, + "label": "删除", + "code": "api:admin:file:delete", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 541193034158149, + "platform": null, + "parentId": 161227168763974, + "label": "地区管理", + "code": null, + "type": 2, + "viewId": 541192324943941, + "name": "admin/region", + "path": "/platform/system/region", + "redirect": null, + "icon": "ele-LocationInformation", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 8, + "description": null, + "enabled": true, + "childs": [ + { + "id": 544357883424837, + "platform": null, + "parentId": 541193034158149, + "label": "查询", + "code": "api:admin:region:get-page", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:57:55", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 544358205145157, + "platform": null, + "parentId": 541193034158149, + "label": "新增", + "code": "api:admin:region:add", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:59:14", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 544358293327941, + "platform": null, + "parentId": 541193034158149, + "label": "修改", + "code": "api:admin:region:update", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:59:35", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 544358732812357, + "platform": null, + "parentId": 541193034158149, + "label": "删除", + "code": "api:admin:region:delete", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T15:01:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-05-07T15:01:36" + }, + { + "id": 544359356227653, + "platform": null, + "parentId": 541193034158149, + "label": "禁用/启用", + "code": "api:admin:region:set-enable", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 5, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T15:03:55", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 544359417692229, + "platform": null, + "parentId": 541193034158149, + "label": "设置热门", + "code": "api:admin:region:set-hot", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 6, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T15:04:10", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 544361305542725, + "platform": null, + "parentId": 541193034158149, + "label": "同步", + "code": "api:admin:region:sync-data", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 7, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T15:11:51", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-04-28T16:20:07", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-05-06T17:37:09" + }, + { + "id": 616666303373381, + "platform": null, + "parentId": 161227168763974, + "label": "消息管理", + "code": null, + "type": 2, + "viewId": 616549084737605, + "name": "admin/msg", + "path": "/platform/system/msg", + "redirect": null, + "icon": "ele-Message", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 10, + "description": "", + "enabled": true, + "childs": [ + { + "id": 616666835525701, + "platform": null, + "parentId": 616666303373381, + "label": "查询", + "code": "api:admin:msg:get", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:43:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-12-03T14:59:48" + }, + { + "id": 616667975053381, + "platform": null, + "parentId": 616666303373381, + "label": "新增", + "code": "api:admin:msg:add", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:48:26", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 616668132876357, + "platform": null, + "parentId": 616666303373381, + "label": "修改", + "code": "api:admin:msg:update", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:49:04", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 616668345167941, + "platform": null, + "parentId": 616666303373381, + "label": "删除", + "code": "api:admin:msg:delete", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:49:56", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 616669261021253, + "platform": null, + "parentId": 616666303373381, + "label": "添加员工", + "code": "api:admin:msg:add-msg-user", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 5, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:53:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-11-27T22:53:48" + }, + { + "id": 616670103490629, + "platform": null, + "parentId": 616666303373381, + "label": "移除员工", + "code": "api:admin:msg:remove-msg-user", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 6, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:57:05", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:41:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-03-18T15:08:21" + }, + { + "id": 618670934908997, + "platform": null, + "parentId": 161227168763974, + "label": "消息分类", + "code": null, + "type": 2, + "viewId": 618670689706053, + "name": "admin/msg-type", + "path": "/platform/system/msg-type", + "redirect": null, + "icon": "ele-Message", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 9, + "description": "", + "enabled": true, + "childs": [ + { + "id": 618676407771205, + "platform": null, + "parentId": 618670934908997, + "label": "查询", + "code": "api:admin:msg-type:get", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T15:00:46", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 618676515442757, + "platform": null, + "parentId": 618670934908997, + "label": "新增", + "code": "api:admin:msg-type:add", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T15:01:12", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 618676584898629, + "platform": null, + "parentId": 618670934908997, + "label": "修改", + "code": "api:admin:msg-type:update", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T15:01:29", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 618676667334725, + "platform": null, + "parentId": 618670934908997, + "label": "删除", + "code": "api:admin:msg-type:delete", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T15:01:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T14:38:30", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 655836777152581, + "platform": null, + "parentId": 161227168763974, + "label": "打印模板", + "code": null, + "type": 2, + "viewId": 655836164862021, + "name": "admin/print-template", + "path": "/platform/system/print-template", + "redirect": null, + "icon": "ele-Printer", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 11, + "description": "", + "enabled": true, + "childs": [ + { + "id": 655842800451653, + "platform": null, + "parentId": 655836777152581, + "label": "查询", + "code": "api:admin:print-template:get", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:31:12", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 655842914500677, + "platform": null, + "parentId": 655836777152581, + "label": "新增", + "code": "api:admin:print-template:add", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:31:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-03-18T15:44:32" + }, + { + "id": 655846286319685, + "platform": null, + "parentId": 655836777152581, + "label": "修改", + "code": "api:admin:print-template:update", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 3, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:45:23", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 655846480715845, + "platform": null, + "parentId": 655836777152581, + "label": "删除", + "code": "api:admin:print-template:delete", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:46:11", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-03-18T15:51:04" + }, + { + "id": 664056357347397, + "platform": null, + "parentId": 655836777152581, + "label": "设计", + "code": "api:admin:print-template:design", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 5, + "description": null, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-10T20:32:15", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:06:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-03-18T15:40:44" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168780358, + "platform": null, + "parentId": 161227168497733, + "label": "日志管理", + "code": null, + "type": 1, + "viewId": null, + "name": null, + "path": "/platform/log", + "redirect": "/platform/logs/login-log", + "icon": "ele-Tickets", + "hidden": false, + "opened": true, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": null, + "enabled": true, + "childs": [ + { + "id": 161227168784453, + "platform": null, + "parentId": 161227168780358, + "label": "登录日志", + "code": null, + "type": 2, + "viewId": 161227168456773, + "name": "admin/login-log", + "path": "/platform/logs/login-log", + "redirect": null, + "icon": "ele-Document", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [ + { + "id": 161227168784454, + "platform": null, + "parentId": 161227168784453, + "label": "查询", + "code": "api:admin:loginlog:getpage", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168788549, + "platform": null, + "parentId": 161227168780358, + "label": "操作日志", + "code": null, + "type": 2, + "viewId": 161227168452678, + "name": "admin/operation-log", + "path": "/platform/logs/operation-log", + "redirect": null, + "icon": "ele-Document", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [ + { + "id": 161227168788550, + "platform": null, + "parentId": 161227168788549, + "label": "查询", + "code": "api:admin:operationlog:getpage", + "type": 3, + "viewId": null, + "name": null, + "path": null, + "redirect": null, + "icon": null, + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-04-10T16:35:43" + }, + { + "id": 161227168497734, + "platform": null, + "parentId": 0, + "label": "帮助文档", + "code": null, + "type": 1, + "viewId": null, + "name": null, + "path": "/help", + "redirect": "", + "icon": "ele-Notebook", + "hidden": false, + "opened": true, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": null, + "isIframe": false, + "isSystem": false, + "sort": 4, + "description": null, + "enabled": true, + "childs": [ + { + "id": 161227168792645, + "platform": null, + "parentId": 161227168497734, + "label": "Admin", + "code": null, + "type": 2, + "viewId": 361047593013317, + "name": null, + "path": "/help/admin", + "redirect": null, + "icon": "iconfont icon-fuhao-zhongwen", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": "https://zhontai.net", + "isIframe": false, + "isSystem": false, + "sort": 1, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168792646, + "platform": null, + "parentId": 161227168497734, + "label": "FreeSql", + "code": null, + "type": 2, + "viewId": 361047593013317, + "name": null, + "path": "/help/freesql", + "redirect": null, + "icon": "ele-Promotion", + "hidden": false, + "opened": false, + "newWindow": false, + "external": false, + "isKeepAlive": true, + "isAffix": false, + "link": "http://freesql.net/guide", + "isIframe": false, + "isSystem": false, + "sort": 2, + "description": "", + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-12-05T09:34:50" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_permission_api.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_permission_api.json new file mode 100644 index 0000000..1690f45 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_permission_api.json @@ -0,0 +1,1748 @@ +[ + { + "id": 171039545122886, + "permissionId": 161227168657477, + "apiId": 161227168174149, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171039733657671, + "permissionId": 161227168657478, + "apiId": 161227168170054, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171039733657672, + "permissionId": 161227168657478, + "apiId": 161227168178245, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171039848452166, + "permissionId": 161227168669766, + "apiId": 161227168116805, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171039883370566, + "permissionId": 161227168673861, + "apiId": 161227168120901, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171039935344711, + "permissionId": 161227168673862, + "apiId": 161227168079941, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171039935344712, + "permissionId": 161227168673862, + "apiId": 161227168120902, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171040100655174, + "permissionId": 161227168682053, + "apiId": 161227168124998, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171040178724934, + "permissionId": 161227168686150, + "apiId": 161227168198726, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171040219164742, + "permissionId": 161227168690245, + "apiId": 161227168202822, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171040256553031, + "permissionId": 161227168690246, + "apiId": 161227168198725, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171040256553032, + "permissionId": 161227168690246, + "apiId": 161227168202823, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171040379768902, + "permissionId": 161227168698437, + "apiId": 161227168206919, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171040930574406, + "permissionId": 161227168702534, + "apiId": 161227168141383, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171041051480134, + "permissionId": 161227168706629, + "apiId": 161227168153669, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171041379016773, + "permissionId": 161227168714821, + "apiId": 161227168145478, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171041379016774, + "permissionId": 161227168714821, + "apiId": 161227168157766, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171041490071623, + "permissionId": 161227168710726, + "apiId": 161227168145477, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171041490071624, + "permissionId": 161227168710726, + "apiId": 161227168157765, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171042505658439, + "permissionId": 161227168747590, + "apiId": 161227168211013, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171042505658440, + "permissionId": 161227168747590, + "apiId": 161227168211014, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171044112568390, + "permissionId": 161227168747589, + "apiId": 161227168211013, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171045341298758, + "permissionId": 161227168784454, + "apiId": 161227168215109, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 171045383643206, + "permissionId": 161227168788550, + "apiId": 161227168215110, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 185974955921477, + "permissionId": 161227168821318, + "apiId": 161227168215111, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 185974955921478, + "permissionId": 161227168821318, + "apiId": 161227168235589, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 187390759231560, + "permissionId": 187389970825285, + "apiId": 161227168137285, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 187390759231561, + "permissionId": 187389970825285, + "apiId": 161227168141381, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 187390759231562, + "permissionId": 187389970825285, + "apiId": 174219034734661, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 187390759231563, + "permissionId": 187389970825285, + "apiId": 174219034734664, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 187390793699399, + "permissionId": 187375358951493, + "apiId": 161227168137286, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 187390793703493, + "permissionId": 187375358951493, + "apiId": 174219034734662, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 187391371079750, + "permissionId": 187391371018309, + "apiId": 184100551516229, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 187391371079751, + "permissionId": 187391371018309, + "apiId": 184100551532613, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 187391980814407, + "permissionId": 187391980761157, + "apiId": 161227168137287, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 187391980814408, + "permissionId": 187391980761157, + "apiId": 174219034734663, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 188054656598086, + "permissionId": 188054656589893, + "apiId": 174219034738760, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 188054719275078, + "permissionId": 188054719266885, + "apiId": 174219034738761, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 188054776557639, + "permissionId": 188054776545349, + "apiId": 174219034738759, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 188054776557640, + "permissionId": 188054776545349, + "apiId": 174219034738762, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 188054835359813, + "permissionId": 188054834004037, + "apiId": 174219034738763, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 188799732666437, + "permissionId": 188799732494405, + "apiId": 174219034734667, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 188799795204165, + "permissionId": 188799795101765, + "apiId": 174219034734668, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 188799878713413, + "permissionId": 188799878676549, + "apiId": 174219034734666, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 188799878713414, + "permissionId": 188799878676549, + "apiId": 174219034734669, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 188799949889606, + "permissionId": 188799949844549, + "apiId": 174219034734670, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 188799997497414, + "permissionId": 188799997452357, + "apiId": 174219034734671, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 189345990312005, + "permissionId": 189345990168645, + "apiId": 174219034738764, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 340637112541253, + "permissionId": 161227168653382, + "apiId": 336555241422917, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 340637112541254, + "permissionId": 161227168653382, + "apiId": 336555241422918, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 349750459183173, + "permissionId": 161227168641094, + "apiId": 336555241422917, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 349750459183174, + "permissionId": 161227168641094, + "apiId": 161227168186437, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 349750459183175, + "permissionId": 161227168641094, + "apiId": 161227168186438, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 349750459183176, + "permissionId": 161227168641094, + "apiId": 188049296683077, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 349750499344453, + "permissionId": 161227168645189, + "apiId": 336555241422917, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 349750499344454, + "permissionId": 161227168645189, + "apiId": 161227168182343, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 349750499344455, + "permissionId": 161227168645189, + "apiId": 161227168186437, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 349750499344456, + "permissionId": 161227168645189, + "apiId": 161227168190533, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 349750499344457, + "permissionId": 161227168645189, + "apiId": 188049296683077, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360708999491653, + "permissionId": 349749778899013, + "apiId": 349749396619333, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709017350213, + "permissionId": 349749511946309, + "apiId": 349749396615237, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709080879173, + "permissionId": 340890474405957, + "apiId": 336555241422919, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709080879174, + "permissionId": 340890474405957, + "apiId": 0, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709080879175, + "permissionId": 340890474405957, + "apiId": 188049296683077, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709099552837, + "permissionId": 340890633515077, + "apiId": 336555241422920, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709121323077, + "permissionId": 340645133123653, + "apiId": 161227168149574, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709121327173, + "permissionId": 340645133123653, + "apiId": 161227168149575, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709121327174, + "permissionId": 340645133123653, + "apiId": 161227168165957, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709189963845, + "permissionId": 188054258278469, + "apiId": 188049296683077, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709215817797, + "permissionId": 188054341582917, + "apiId": 174219034734674, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709237321797, + "permissionId": 188054416891973, + "apiId": 174219034734672, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709237325893, + "permissionId": 188054416891973, + "apiId": 174219034738757, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709600628805, + "permissionId": 161227168731205, + "apiId": 161227168165958, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709600628806, + "permissionId": 161227168731205, + "apiId": 161227168170053, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709844901957, + "permissionId": 161227168706630, + "apiId": 161227168153670, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360709952303173, + "permissionId": 161227168727110, + "apiId": 161227168165959, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710163017797, + "permissionId": 343343120306245, + "apiId": 336555241427013, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710186348613, + "permissionId": 343342945812549, + "apiId": 336555241422922, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710210654277, + "permissionId": 343344363630661, + "apiId": 336555241427018, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710378074181, + "permissionId": 343343209164869, + "apiId": 336555241427014, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710409134149, + "permissionId": 343343735894085, + "apiId": 336555241422922, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710409134150, + "permissionId": 343343735894085, + "apiId": 336555241427015, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710429880389, + "permissionId": 343344158351429, + "apiId": 336555241427016, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710497280069, + "permissionId": 343343989960773, + "apiId": 343342310703173, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710512681029, + "permissionId": 343343926595653, + "apiId": 343342310699077, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710534180933, + "permissionId": 343344066166853, + "apiId": 343342310703174, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710689267781, + "permissionId": 161227168833605, + "apiId": 161227168239685, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710797463621, + "permissionId": 161227168800838, + "apiId": 161227168223302, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710817820741, + "permissionId": 161227168804933, + "apiId": 161227168227397, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710880665669, + "permissionId": 161227168809029, + "apiId": 161227168219205, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710880665670, + "permissionId": 161227168809029, + "apiId": 161227168227398, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710901760069, + "permissionId": 161227168813125, + "apiId": 161227168219206, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360710901760070, + "permissionId": 161227168813125, + "apiId": 161227168231493, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360711132024901, + "permissionId": 161227168825414, + "apiId": 161227168235589, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 360711132024902, + "permissionId": 161227168825414, + "apiId": 161227168235590, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 363544618700869, + "permissionId": 161227168813126, + "apiId": 161227168231494, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 363544634417221, + "permissionId": 161227168833606, + "apiId": 161227168239686, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 363544652439621, + "permissionId": 161227168829509, + "apiId": 161227168235591, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372004983631941, + "permissionId": 372004430860357, + "apiId": 371292589764677, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372387123470405, + "permissionId": 161227168649285, + "apiId": 336555241427019, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372387205976133, + "permissionId": 161227168645190, + "apiId": 271618651926607, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372387273650245, + "permissionId": 161227168661573, + "apiId": 271618651926604, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372387357708357, + "permissionId": 161227168665669, + "apiId": 336555241422921, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372387722547269, + "permissionId": 188054509027397, + "apiId": 342274923528261, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372387852169285, + "permissionId": 161227168718917, + "apiId": 187384805367877, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372388163334213, + "permissionId": 161227168759877, + "apiId": 163579785756741, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372389074755653, + "permissionId": 187390547820613, + "apiId": 271618651926597, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372389074755654, + "permissionId": 187390547820613, + "apiId": 271618651922504, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372393512312901, + "permissionId": 372031447494725, + "apiId": 372031353708613, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372398462337093, + "permissionId": 372004589551685, + "apiId": 371678435708997, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372398462349381, + "permissionId": 372004589551685, + "apiId": 371678435725381, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372400081883205, + "permissionId": 161227168677957, + "apiId": 271618651914309, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372400964571205, + "permissionId": 161227168677958, + "apiId": 372400615755845, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372401035112517, + "permissionId": 161227168694341, + "apiId": 271618651926608, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 372401476096069, + "permissionId": 161227168694342, + "apiId": 372401403850821, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 394676138577989, + "permissionId": 394672570462277, + "apiId": 394672333692997, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 394676175425605, + "permissionId": 394672685342789, + "apiId": 394672333688901, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 402840520056901, + "permissionId": 402840520048709, + "apiId": 402830164914252, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 402840869609541, + "permissionId": 402840869605445, + "apiId": 402830164914249, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 402843803623493, + "permissionId": 402840810463301, + "apiId": 402830164914248, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 402843803623494, + "permissionId": 402840810463301, + "apiId": 161227168243782, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 402846230683717, + "permissionId": 161807358345285, + "apiId": 170317848645701, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 402846230696005, + "permissionId": 161807358345285, + "apiId": 170317848662085, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 402846230696006, + "permissionId": 161807358345285, + "apiId": 161227168149574, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 402846305517637, + "permissionId": 402843985313861, + "apiId": 402830164914247, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 402846305521733, + "permissionId": 402843985313861, + "apiId": 161227168149574, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 402846305521734, + "permissionId": 402843985313861, + "apiId": 402830164914246, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 403174061850693, + "permissionId": 402839687192645, + "apiId": 402830164914250, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 403174104182853, + "permissionId": 402840395829317, + "apiId": 402830164914251, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 403174104182854, + "permissionId": 402840395829317, + "apiId": 402830164910150, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 403174168866885, + "permissionId": 161227168755781, + "apiId": 161227168243783, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 403174168866886, + "permissionId": 161227168755781, + "apiId": 402830164910151, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 403174230675525, + "permissionId": 161227168755782, + "apiId": 161227168243781, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 403174230675526, + "permissionId": 161227168755782, + "apiId": 161227168247877, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 403174230675527, + "permissionId": 161227168755782, + "apiId": 402830164910151, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 406343893172293, + "permissionId": 402838978203717, + "apiId": 402830164910151, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 406343893180485, + "permissionId": 402838978203717, + "apiId": 402830164910152, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 406343893180486, + "permissionId": 402838978203717, + "apiId": 402830164914245, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 406343893180487, + "permissionId": 402838978203717, + "apiId": 402830164910150, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 406343893180488, + "permissionId": 402838978203717, + "apiId": 403173446250565, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 406343893180489, + "permissionId": 402838978203717, + "apiId": 402830164914246, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 406344832528453, + "permissionId": 161227168751686, + "apiId": 161227168243782, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 406344832528454, + "permissionId": 161227168751686, + "apiId": 161227168243781, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 406344832528455, + "permissionId": 161227168751686, + "apiId": 170317848645701, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05" + }, + { + "id": 427947735322693, + "permissionId": 427947735298117, + "apiId": 427947639398469, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:49" + }, + { + "id": 544357883498565, + "permissionId": 544357883424837, + "apiId": 544353292288071, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:57:55" + }, + { + "id": 544357883514949, + "permissionId": 544357883424837, + "apiId": 544353292288070, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:57:55" + }, + { + "id": 544358205157445, + "permissionId": 544358205145157, + "apiId": 544353292288072, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:59:14" + }, + { + "id": 544358205157446, + "permissionId": 544358205145157, + "apiId": 544353292288070, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:59:14" + }, + { + "id": 544358293336133, + "permissionId": 544358293327941, + "apiId": 544353292288073, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:59:35" + }, + { + "id": 544358293336134, + "permissionId": 544358293327941, + "apiId": 544353292288070, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:59:35" + }, + { + "id": 544358293336135, + "permissionId": 544358293327941, + "apiId": 544353292288069, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T14:59:35" + }, + { + "id": 544359356235845, + "permissionId": 544359356227653, + "apiId": 544353292288076, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T15:03:55" + }, + { + "id": 544359417700421, + "permissionId": 544359417692229, + "apiId": 544353292288077, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T15:04:10" + }, + { + "id": 544361305550917, + "permissionId": 544361305542725, + "apiId": 544353292288078, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T15:11:51" + }, + { + "id": 544365405282373, + "permissionId": 544358732812357, + "apiId": 544353292288074, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-05-07T15:28:32" + }, + { + "id": 564648879657029, + "permissionId": 564648879607877, + "apiId": 361090412425285, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-07-03T23:02:12" + }, + { + "id": 564648879673413, + "permissionId": 564648879607877, + "apiId": 161227168170054, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-07-03T23:02:12" + }, + { + "id": 564648879673414, + "permissionId": 564648879607877, + "apiId": 188049296683077, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-07-03T23:02:12" + }, + { + "id": 594612901847109, + "permissionId": 594612873289797, + "apiId": 594300204109894, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-26T15:06:06" + }, + { + "id": 594612901847110, + "permissionId": 594612873289797, + "apiId": 594300204093509, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-26T15:06:06" + }, + { + "id": 594612901847111, + "permissionId": 594612873289797, + "apiId": 594300204109893, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-26T15:06:06" + }, + { + "id": 594613122961477, + "permissionId": 551712205733957, + "apiId": 551709465014341, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-09-26T15:07:00" + }, + { + "id": 614913966760005, + "permissionId": 594602727731269, + "apiId": 614913817296965, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-22T23:51:21" + }, + { + "id": 616661862834245, + "permissionId": 161227168641093, + "apiId": 161227168186437, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:23:34" + }, + { + "id": 616661862883397, + "permissionId": 161227168641093, + "apiId": 188049296683077, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:23:34" + }, + { + "id": 616667975082053, + "permissionId": 616667975053381, + "apiId": 616492407009354, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:48:26" + }, + { + "id": 616668132892741, + "permissionId": 616668132876357, + "apiId": 616492407009355, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:49:04" + }, + { + "id": 616668132896837, + "permissionId": 616668132876357, + "apiId": 616492407009349, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:49:04" + }, + { + "id": 616668345200709, + "permissionId": 616668345167941, + "apiId": 616492407013447, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:49:56" + }, + { + "id": 616669294620741, + "permissionId": 616669261021253, + "apiId": 616492407009352, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:53:48" + }, + { + "id": 616669294624837, + "permissionId": 616669261021253, + "apiId": 188049296683077, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:53:48" + }, + { + "id": 616669294624838, + "permissionId": 616669261021253, + "apiId": 161227168186437, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:53:48" + }, + { + "id": 616670103519301, + "permissionId": 616670103490629, + "apiId": 616492407009353, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T22:57:05" + }, + { + "id": 618676172820549, + "permissionId": 616666835525701, + "apiId": 616492407009349, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T14:59:48" + }, + { + "id": 618676172865605, + "permissionId": 616666835525701, + "apiId": 616492407009350, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T14:59:48" + }, + { + "id": 618676172865606, + "permissionId": 616666835525701, + "apiId": 616492407009351, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T14:59:48" + }, + { + "id": 618676407799877, + "permissionId": 618676407771205, + "apiId": 618674443784261, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T15:00:46" + }, + { + "id": 618676407803973, + "permissionId": 618676407771205, + "apiId": 618674443784262, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T15:00:46" + }, + { + "id": 618676515479621, + "permissionId": 618676515442757, + "apiId": 618674443788357, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T15:01:12" + }, + { + "id": 618676584935493, + "permissionId": 618676584898629, + "apiId": 618674443788358, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T15:01:29" + }, + { + "id": 618676584935494, + "permissionId": 618676584898629, + "apiId": 618674443784261, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T15:01:29" + }, + { + "id": 618676667367493, + "permissionId": 618676667334725, + "apiId": 618674443788361, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T15:01:49" + }, + { + "id": 622257690906629, + "permissionId": 622257664507909, + "apiId": 622257407160333, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-13T17:53:03" + }, + { + "id": 655842800492613, + "permissionId": 655842800451653, + "apiId": 655835953811525, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:31:12" + }, + { + "id": 655842800513093, + "permissionId": 655842800451653, + "apiId": 655835953811526, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:31:12" + }, + { + "id": 655846076006469, + "permissionId": 655842914500677, + "apiId": 655835953811527, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:44:32" + }, + { + "id": 655846286360645, + "permissionId": 655846286319685, + "apiId": 655835953815621, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:45:23" + }, + { + "id": 655846286360646, + "permissionId": 655846286319685, + "apiId": 655835953811525, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:45:23" + }, + { + "id": 655847681425477, + "permissionId": 655846480715845, + "apiId": 655835953815624, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:51:04" + }, + { + "id": 664056357425221, + "permissionId": 664056357347397, + "apiId": 663999082807365, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-10T20:32:15" + }, + { + "id": 664056357470277, + "permissionId": 664056357347397, + "apiId": 663999082860613, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-10T20:32:15" + }, + { + "id": 668220578422853, + "permissionId": 623007419007045, + "apiId": 623004581449797, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-22T14:56:31" + }, + { + "id": 668221422358597, + "permissionId": 668221388660805, + "apiId": 668220737404998, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-04-22T14:59:57" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_print_template.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_print_template.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_print_template.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_print_template.tenant.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_print_template.tenant.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_print_template.tenant.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_region.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_region.json new file mode 100644 index 0000000..24def8c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_region.json @@ -0,0 +1,91037 @@ +[ + { + "id": 653116617293893, + "parentId": 0, + "name": "北京市", + "shortName": "京", + "level": 1, + "code": "110000", + "pinyin": "BeiJingShi", + "pinyinFirst": "BJS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116622848069, + "parentId": 653116617293893, + "name": "北京市", + "shortName": null, + "level": 2, + "code": "110000", + "pinyin": "BeiJingShi", + "pinyinFirst": "BJS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116622864453, + "parentId": 653116622848069, + "name": "东城区", + "shortName": null, + "level": 3, + "code": "110101", + "pinyin": "DongChengQu", + "pinyinFirst": "DCQ", + "capital": "景山街道", + "population": 99, + "area": 42, + "areaCode": "010", + "zipCode": "100010", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622864454, + "parentId": 653116622848069, + "name": "西城区", + "shortName": null, + "level": 3, + "code": "110102", + "pinyin": "XiChengQu", + "pinyinFirst": "XCQ", + "capital": "金融街街道", + "population": 150, + "area": 51, + "areaCode": "010", + "zipCode": "100032", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622864455, + "parentId": 653116622848069, + "name": "朝阳区", + "shortName": null, + "level": 3, + "code": "110105", + "pinyin": "ZhaoYangQu", + "pinyinFirst": "ZYQ", + "capital": "朝外街道", + "population": 214, + "area": 465, + "areaCode": "010", + "zipCode": "100020", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622864456, + "parentId": 653116622848069, + "name": "丰台区", + "shortName": null, + "level": 3, + "code": "110106", + "pinyin": "FengTaiQu", + "pinyinFirst": "FTQ", + "capital": "丰台街道", + "population": 116, + "area": 306, + "areaCode": "010", + "zipCode": "100071", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622864457, + "parentId": 653116622848069, + "name": "石景山区", + "shortName": null, + "level": 3, + "code": "110107", + "pinyin": "ShiJingShanQu", + "pinyinFirst": "SJSQ", + "capital": "鲁谷街道", + "population": 39, + "area": 84, + "areaCode": "010", + "zipCode": "100043", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622864458, + "parentId": 653116622848069, + "name": "海淀区", + "shortName": null, + "level": 3, + "code": "110108", + "pinyin": "HaiDianQu", + "pinyinFirst": "HDQ", + "capital": "海淀街道", + "population": 239, + "area": 431, + "areaCode": "010", + "zipCode": "100089", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622868549, + "parentId": 653116622848069, + "name": "门头沟区", + "shortName": null, + "level": 3, + "code": "110109", + "pinyin": "MenTouGouQu", + "pinyinFirst": "MTGQ", + "capital": "大峪街道", + "population": 25, + "area": 1448, + "areaCode": "010", + "zipCode": "102300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622868550, + "parentId": 653116622848069, + "name": "房山区", + "shortName": null, + "level": 3, + "code": "110111", + "pinyin": "FangShanQu", + "pinyinFirst": "FSQ", + "capital": "拱辰街道", + "population": 84, + "area": 1995, + "areaCode": "010", + "zipCode": "102400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622868551, + "parentId": 653116622848069, + "name": "通州区", + "shortName": null, + "level": 3, + "code": "110112", + "pinyin": "TongZhouQu", + "pinyinFirst": "TZQ", + "capital": "北苑街道", + "population": 80, + "area": 906, + "areaCode": "010", + "zipCode": "101100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622868552, + "parentId": 653116622848069, + "name": "顺义区", + "shortName": null, + "level": 3, + "code": "110113", + "pinyin": "ShunYiQu", + "pinyinFirst": "SYQ", + "capital": "双丰街道", + "population": 65, + "area": 1020, + "areaCode": "010", + "zipCode": "101300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622868553, + "parentId": 653116622848069, + "name": "昌平区", + "shortName": null, + "level": 3, + "code": "110114", + "pinyin": "ChangPingQu", + "pinyinFirst": "CPQ", + "capital": "城北街道", + "population": 65, + "area": 1342, + "areaCode": "010", + "zipCode": "102200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622868554, + "parentId": 653116622848069, + "name": "大兴区", + "shortName": null, + "level": 3, + "code": "110115", + "pinyin": "DaXingQu", + "pinyinFirst": "DXQ", + "capital": "兴丰街道", + "population": 73, + "area": 1036, + "areaCode": "010", + "zipCode": "102600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622868555, + "parentId": 653116622848069, + "name": "怀柔区", + "shortName": null, + "level": 3, + "code": "110116", + "pinyin": "HuaiRouQu", + "pinyinFirst": "HRQ", + "capital": "龙山街道", + "population": 29, + "area": 2123, + "areaCode": "010", + "zipCode": "101400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622868556, + "parentId": 653116622848069, + "name": "平谷区", + "shortName": null, + "level": 3, + "code": "110117", + "pinyin": "PingGuQu", + "pinyinFirst": "PGQ", + "capital": "滨河街道", + "population": 41, + "area": 948, + "areaCode": "010", + "zipCode": "101200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622868557, + "parentId": 653116622848069, + "name": "密云区", + "shortName": null, + "level": 3, + "code": "110118", + "pinyin": "MiYunQu", + "pinyinFirst": "MYQ", + "capital": "鼓楼街道", + "population": 44, + "area": 2226, + "areaCode": "010", + "zipCode": "101500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116622868558, + "parentId": 653116622848069, + "name": "延庆区", + "shortName": null, + "level": 3, + "code": "110119", + "pinyin": "YanQingQu", + "pinyinFirst": "YQQ", + "capital": "儒林街道", + "population": 29, + "area": 1995, + "areaCode": "010", + "zipCode": "102100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:53" + }, + { + "id": 653116623188037, + "parentId": 0, + "name": "天津市", + "shortName": "津", + "level": 1, + "code": "120000", + "pinyin": "TianJinShi", + "pinyinFirst": "TJS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116624654405, + "parentId": 653116623188037, + "name": "天津市", + "shortName": null, + "level": 2, + "code": "120000", + "pinyin": "TianJinShi", + "pinyinFirst": "TJS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116624654406, + "parentId": 653116624654405, + "name": "河西区", + "shortName": null, + "level": 3, + "code": "120103", + "pinyin": "HeXiQu", + "pinyinFirst": "HXQ", + "capital": "大营门街道", + "population": 88, + "area": 48, + "areaCode": "022", + "zipCode": "300202", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624654407, + "parentId": 653116624654405, + "name": "和平区", + "shortName": null, + "level": 3, + "code": "120101", + "pinyin": "HePingQu", + "pinyinFirst": "HPQ", + "capital": "小白楼街道", + "population": 44, + "area": 10, + "areaCode": "022", + "zipCode": "300041", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624654408, + "parentId": 653116624654405, + "name": "河东区", + "shortName": null, + "level": 3, + "code": "120102", + "pinyin": "HeDongQu", + "pinyinFirst": "HDQ", + "capital": "大王庄街道", + "population": 76, + "area": 42, + "areaCode": "022", + "zipCode": "300171", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624654409, + "parentId": 653116624654405, + "name": "南开区", + "shortName": null, + "level": 3, + "code": "120104", + "pinyin": "NanKaiQu", + "pinyinFirst": "NKQ", + "capital": "长虹街道", + "population": 89, + "area": 41, + "areaCode": "022", + "zipCode": "300110", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624654410, + "parentId": 653116624654405, + "name": "河北区", + "shortName": null, + "level": 3, + "code": "120105", + "pinyin": "HeBeiQu", + "pinyinFirst": "HBQ", + "capital": "望海楼街道", + "population": 64, + "area": 30, + "areaCode": "022", + "zipCode": "300143", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624654411, + "parentId": 653116624654405, + "name": "红桥区", + "shortName": null, + "level": 3, + "code": "120106", + "pinyin": "HongQiaoQu", + "pinyinFirst": "HQQ", + "capital": "西于庄街道", + "population": 51, + "area": 24, + "areaCode": "022", + "zipCode": "300131", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624654412, + "parentId": 653116624654405, + "name": "东丽区", + "shortName": null, + "level": 3, + "code": "120110", + "pinyin": "DongLiQu", + "pinyinFirst": "DLQ", + "capital": "张贵庄街道", + "population": 42, + "area": 477, + "areaCode": "022", + "zipCode": "300300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624654413, + "parentId": 653116624654405, + "name": "西青区", + "shortName": null, + "level": 3, + "code": "120111", + "pinyin": "XiQingQu", + "pinyinFirst": "XQQ", + "capital": "杨柳青镇", + "population": 45, + "area": 557, + "areaCode": "022", + "zipCode": "300380", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624654414, + "parentId": 653116624654405, + "name": "津南区", + "shortName": null, + "level": 3, + "code": "120112", + "pinyin": "JinNanQu", + "pinyinFirst": "JNQ", + "capital": "咸水沽镇", + "population": 51, + "area": 381, + "areaCode": "022", + "zipCode": "300350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624654415, + "parentId": 653116624654405, + "name": "北辰区", + "shortName": null, + "level": 3, + "code": "120113", + "pinyin": "BeiChenQu", + "pinyinFirst": "BCQ", + "capital": "果园新村街道", + "population": 44, + "area": 478, + "areaCode": "022", + "zipCode": "300400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624654416, + "parentId": 653116624654405, + "name": "武清区", + "shortName": null, + "level": 3, + "code": "120114", + "pinyin": "WuQingQu", + "pinyinFirst": "WQQ", + "capital": "运河西街道", + "population": 104, + "area": 1570, + "areaCode": "022", + "zipCode": "301700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624654417, + "parentId": 653116624654405, + "name": "宝坻区", + "shortName": null, + "level": 3, + "code": "120115", + "pinyin": "BaoDiQu", + "pinyinFirst": "BDQ", + "capital": "宝平街道", + "population": 74, + "area": 1523, + "areaCode": "022", + "zipCode": "301800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624658501, + "parentId": 653116624654405, + "name": "滨海新区", + "shortName": null, + "level": 3, + "code": "120116", + "pinyin": "BinHaiXinQu", + "pinyinFirst": "BHXQ", + "capital": "新港街道", + "population": 114, + "area": 2270, + "areaCode": "022", + "zipCode": "300450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624658502, + "parentId": 653116624654405, + "name": "宁河区", + "shortName": null, + "level": 3, + "code": "120117", + "pinyin": "NingHeQu", + "pinyinFirst": "NHQ", + "capital": "芦台街道", + "population": 41, + "area": 1414, + "areaCode": "022", + "zipCode": "301500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624658503, + "parentId": 653116624654405, + "name": "静海区", + "shortName": null, + "level": 3, + "code": "120118", + "pinyin": "JingHaiQu", + "pinyinFirst": "JHQ", + "capital": "静海镇", + "population": 61, + "area": 1476, + "areaCode": "022", + "zipCode": "301600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624658504, + "parentId": 653116624654405, + "name": "蓟州区", + "shortName": null, + "level": 3, + "code": "120119", + "pinyin": "JiZhouQu", + "pinyinFirst": "JZQ", + "capital": "文昌街道", + "population": 88, + "area": 1593, + "areaCode": "022", + "zipCode": "301900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:22", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:54" + }, + { + "id": 653116624724037, + "parentId": 0, + "name": "河北省", + "shortName": "冀", + "level": 1, + "code": "130000", + "pinyin": "HeBeiSheng", + "pinyinFirst": "HBS", + "capital": null, + "population": null, + "area": null, + "areaCode": "", + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116627038277, + "parentId": 653116624724037, + "name": "石家庄市", + "shortName": null, + "level": 2, + "code": "130100", + "pinyin": "ShiJiaZhuangShi", + "pinyinFirst": "SJZS", + "capital": "长安区", + "population": 989, + "area": 14530, + "areaCode": "0311", + "zipCode": "050000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116627046469, + "parentId": 653116627038277, + "name": "长安区", + "shortName": null, + "level": 3, + "code": "130102", + "pinyin": "ChangAnQu", + "pinyinFirst": "CAQ", + "capital": "育才街道", + "population": 67, + "area": 138, + "areaCode": "0311", + "zipCode": "050011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627046470, + "parentId": 653116627038277, + "name": "桥西区", + "shortName": null, + "level": 3, + "code": "130104", + "pinyin": "QiaoXiQu", + "pinyinFirst": "QXQ", + "capital": "振头街道", + "population": 68, + "area": 69, + "areaCode": "0311", + "zipCode": "050091", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627046471, + "parentId": 653116627038277, + "name": "新华区", + "shortName": null, + "level": 3, + "code": "130105", + "pinyin": "XinHuaQu", + "pinyinFirst": "XHQ", + "capital": "革新街道", + "population": 51, + "area": 97, + "areaCode": "0311", + "zipCode": "050051", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627046472, + "parentId": 653116627038277, + "name": "井陉矿区", + "shortName": null, + "level": 3, + "code": "130107", + "pinyin": "JingXingKuangQu", + "pinyinFirst": "JXKQ", + "capital": "矿市街道", + "population": 9, + "area": 76, + "areaCode": "0311", + "zipCode": "050100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627046473, + "parentId": 653116627038277, + "name": "裕华区", + "shortName": null, + "level": 3, + "code": "130108", + "pinyin": "YuHuaQu", + "pinyinFirst": "YHQ", + "capital": "裕兴街道", + "population": 65, + "area": 101, + "areaCode": "0311", + "zipCode": "050031", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627046474, + "parentId": 653116627038277, + "name": "藁城区", + "shortName": null, + "level": 3, + "code": "130109", + "pinyin": "GaoChengQu", + "pinyinFirst": "GCQ", + "capital": "廉州镇", + "population": 87, + "area": 836, + "areaCode": "0311", + "zipCode": "052160", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627046475, + "parentId": 653116627038277, + "name": "鹿泉区", + "shortName": null, + "level": 3, + "code": "130110", + "pinyin": "LuQuanQu", + "pinyinFirst": "LQQ", + "capital": "获鹿镇", + "population": 45, + "area": 603, + "areaCode": "0311", + "zipCode": "050200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627046476, + "parentId": 653116627038277, + "name": "栾城区", + "shortName": null, + "level": 3, + "code": "130111", + "pinyin": "LuanChengQu", + "pinyinFirst": "LCQ", + "capital": "栾城镇", + "population": 36, + "area": 326, + "areaCode": "0311", + "zipCode": "051430", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627046477, + "parentId": 653116627038277, + "name": "辛集市", + "shortName": null, + "level": 3, + "code": "130181", + "pinyin": "XinJiShi", + "pinyinFirst": "XJS", + "capital": "辛集镇", + "population": 64, + "area": 951, + "areaCode": "0311", + "zipCode": "052300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627046478, + "parentId": 653116627038277, + "name": "晋州市", + "shortName": null, + "level": 3, + "code": "130183", + "pinyin": "JinZhouShi", + "pinyinFirst": "JZS", + "capital": "晋州镇", + "population": 58, + "area": 619, + "areaCode": "0311", + "zipCode": "052200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627046479, + "parentId": 653116627038277, + "name": "新乐市", + "shortName": null, + "level": 3, + "code": "130184", + "pinyin": "XinLeShi", + "pinyinFirst": "XLS", + "capital": "长寿街道", + "population": 52, + "area": 525, + "areaCode": "0311", + "zipCode": "050700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627046480, + "parentId": 653116627038277, + "name": "井陉县", + "shortName": null, + "level": 3, + "code": "130121", + "pinyin": "JingXingXian", + "pinyinFirst": "JXX", + "capital": "微水镇", + "population": 33, + "area": 1381, + "areaCode": "0311", + "zipCode": "050300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627050565, + "parentId": 653116627038277, + "name": "正定县", + "shortName": null, + "level": 3, + "code": "130123", + "pinyin": "ZhengDingXian", + "pinyinFirst": "ZDX", + "capital": "正定镇", + "population": 51, + "area": 468, + "areaCode": "0311", + "zipCode": "050800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627050566, + "parentId": 653116627038277, + "name": "行唐县", + "shortName": null, + "level": 3, + "code": "130125", + "pinyin": "XingTangXian", + "pinyinFirst": "XTX", + "capital": "龙州镇", + "population": 46, + "area": 1025, + "areaCode": "0311", + "zipCode": "050600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627050567, + "parentId": 653116627038277, + "name": "灵寿县", + "shortName": null, + "level": 3, + "code": "130126", + "pinyin": "LingShouXian", + "pinyinFirst": "LSX", + "capital": "灵寿镇", + "population": 35, + "area": 1066, + "areaCode": "0311", + "zipCode": "050500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627050568, + "parentId": 653116627038277, + "name": "高邑县", + "shortName": null, + "level": 3, + "code": "130127", + "pinyin": "GaoYiXian", + "pinyinFirst": "GYX", + "capital": "高邑镇", + "population": 20, + "area": 222, + "areaCode": "0311", + "zipCode": "051330", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627050569, + "parentId": 653116627038277, + "name": "深泽县", + "shortName": null, + "level": 3, + "code": "130128", + "pinyin": "ShenZeXian", + "pinyinFirst": "SZX", + "capital": "深泽镇", + "population": 26, + "area": 296, + "areaCode": "0311", + "zipCode": "052500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627050570, + "parentId": 653116627038277, + "name": "赞皇县", + "shortName": null, + "level": 3, + "code": "130129", + "pinyin": "ZanHuangXian", + "pinyinFirst": "ZHX", + "capital": "赞皇镇", + "population": 28, + "area": 1210, + "areaCode": "0311", + "zipCode": "051230", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627050571, + "parentId": 653116627038277, + "name": "无极县", + "shortName": null, + "level": 3, + "code": "130130", + "pinyin": "WuJiXian", + "pinyinFirst": "WJX", + "capital": "无极镇", + "population": 54, + "area": 524, + "areaCode": "0311", + "zipCode": "052400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627050572, + "parentId": 653116627038277, + "name": "平山县", + "shortName": null, + "level": 3, + "code": "130131", + "pinyin": "PingShanXian", + "pinyinFirst": "PSX", + "capital": "平山镇", + "population": 51, + "area": 2648, + "areaCode": "0311", + "zipCode": "050400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627050573, + "parentId": 653116627038277, + "name": "元氏县", + "shortName": null, + "level": 3, + "code": "130132", + "pinyin": "YuanShiXian", + "pinyinFirst": "YSX", + "capital": "槐阳镇", + "population": 45, + "area": 675, + "areaCode": "0311", + "zipCode": "051130", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627050574, + "parentId": 653116627038277, + "name": "赵县", + "shortName": null, + "level": 3, + "code": "130133", + "pinyin": "ZhaoXian", + "pinyinFirst": "ZX", + "capital": "赵州镇", + "population": 62, + "area": 674, + "areaCode": "0311", + "zipCode": "051530", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627193925, + "parentId": 653116624724037, + "name": "唐山市", + "shortName": null, + "level": 2, + "code": "130200", + "pinyin": "TangShanShi", + "pinyinFirst": "TSS", + "capital": "路北区", + "population": 756, + "area": 13829, + "areaCode": "0315", + "zipCode": "063000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116627198021, + "parentId": 653116627193925, + "name": "路北区", + "shortName": null, + "level": 3, + "code": "130203", + "pinyin": "LuBeiQu", + "pinyinFirst": "LBQ", + "capital": "乔屯街道", + "population": 85, + "area": 168, + "areaCode": "0315", + "zipCode": "063000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627198022, + "parentId": 653116627193925, + "name": "路南区", + "shortName": null, + "level": 3, + "code": "130202", + "pinyin": "LuNanQu", + "pinyinFirst": "LNQ", + "capital": "学院南路街道", + "population": 35, + "area": 118, + "areaCode": "0315", + "zipCode": "063000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627198023, + "parentId": 653116627193925, + "name": "古冶区", + "shortName": null, + "level": 3, + "code": "130204", + "pinyin": "GuYeQu", + "pinyinFirst": "GYQ", + "capital": "京华街道", + "population": 33, + "area": 249, + "areaCode": "0315", + "zipCode": "063100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627198024, + "parentId": 653116627193925, + "name": "开平区", + "shortName": null, + "level": 3, + "code": "130205", + "pinyin": "KaiPingQu", + "pinyinFirst": "KPQ", + "capital": "开平街道", + "population": 25, + "area": 251, + "areaCode": "0315", + "zipCode": "063021", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627198025, + "parentId": 653116627193925, + "name": "丰南区", + "shortName": null, + "level": 3, + "code": "130207", + "pinyin": "FengNanQu", + "pinyinFirst": "FNQ", + "capital": "青年路街道", + "population": 54, + "area": 1262, + "areaCode": "0315", + "zipCode": "063300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627198026, + "parentId": 653116627193925, + "name": "丰润区", + "shortName": null, + "level": 3, + "code": "130208", + "pinyin": "FengRunQu", + "pinyinFirst": "FRQ", + "capital": "太平路街道", + "population": 81, + "area": 1234, + "areaCode": "0315", + "zipCode": "064000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627198027, + "parentId": 653116627193925, + "name": "曹妃甸区", + "shortName": null, + "level": 3, + "code": "130209", + "pinyin": "CaoFeiDianQu", + "pinyinFirst": "CFDQ", + "capital": "唐海镇", + "population": 21, + "area": 1281, + "areaCode": "0315", + "zipCode": "063200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627198028, + "parentId": 653116627193925, + "name": "遵化市", + "shortName": null, + "level": 3, + "code": "130281", + "pinyin": "ZunHuaShi", + "pinyinFirst": "ZHS", + "capital": "遵化镇", + "population": 75, + "area": 1509, + "areaCode": "0315", + "zipCode": "064200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627202117, + "parentId": 653116627193925, + "name": "迁安市", + "shortName": null, + "level": 3, + "code": "130283", + "pinyin": "QianAnShi", + "pinyinFirst": "QAS", + "capital": "永顺街道", + "population": 78, + "area": 1227, + "areaCode": "0315", + "zipCode": "064400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627202118, + "parentId": 653116627193925, + "name": "滦州市", + "shortName": null, + "level": 3, + "code": "130284", + "pinyin": "LuanZhouShi", + "pinyinFirst": "LZS", + "capital": "滦河街道", + "population": 57, + "area": 1027, + "areaCode": "0315", + "zipCode": "063700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627202119, + "parentId": 653116627193925, + "name": "滦南县", + "shortName": null, + "level": 3, + "code": "130224", + "pinyin": "LuanNanXian", + "pinyinFirst": "LNX", + "capital": "友谊路街道", + "population": 57, + "area": 1482, + "areaCode": "0315", + "zipCode": "063500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627202120, + "parentId": 653116627193925, + "name": "乐亭县", + "shortName": null, + "level": 3, + "code": "130225", + "pinyin": "LeTingXian", + "pinyinFirst": "LTX", + "capital": "乐安街道", + "population": 44, + "area": 1417, + "areaCode": "0315", + "zipCode": "063600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627202121, + "parentId": 653116627193925, + "name": "迁西县", + "shortName": null, + "level": 3, + "code": "130227", + "pinyin": "QianXiXian", + "pinyinFirst": "QXX", + "capital": "兴城镇", + "population": 40, + "area": 1439, + "areaCode": "0315", + "zipCode": "064300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627202122, + "parentId": 653116627193925, + "name": "玉田县", + "shortName": null, + "level": 3, + "code": "130229", + "pinyin": "YuTianXian", + "pinyinFirst": "YTX", + "capital": "无终街道", + "population": 70, + "area": 1165, + "areaCode": "0315", + "zipCode": "064100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627705925, + "parentId": 653116624724037, + "name": "秦皇岛市", + "shortName": null, + "level": 2, + "code": "130300", + "pinyin": "QinHuangDaoShi", + "pinyinFirst": "QHDS", + "capital": "海港区", + "population": 301, + "area": 7813, + "areaCode": "0335", + "zipCode": "066000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116627710021, + "parentId": 653116627705925, + "name": "海港区", + "shortName": null, + "level": 3, + "code": "130302", + "pinyin": "HaiGangQu", + "pinyinFirst": "HGQ", + "capital": "建设大街街道", + "population": 85, + "area": 713, + "areaCode": "0335", + "zipCode": "066000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627710022, + "parentId": 653116627705925, + "name": "山海关区", + "shortName": null, + "level": 3, + "code": "130303", + "pinyin": "ShanHaiGuanQu", + "pinyinFirst": "SHGQ", + "capital": "路南街道", + "population": 14, + "area": 193, + "areaCode": "0335", + "zipCode": "066200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627710023, + "parentId": 653116627705925, + "name": "北戴河区", + "shortName": null, + "level": 3, + "code": "130304", + "pinyin": "BeiDaiHeQu", + "pinyinFirst": "BDHQ", + "capital": "西山街道", + "population": 13, + "area": 155, + "areaCode": "0335", + "zipCode": "066100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627710024, + "parentId": 653116627705925, + "name": "抚宁区", + "shortName": null, + "level": 3, + "code": "130306", + "pinyin": "FuNingQu", + "pinyinFirst": "FNQ", + "capital": "抚宁镇", + "population": 35, + "area": 1069, + "areaCode": "0335", + "zipCode": "066300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627710025, + "parentId": 653116627705925, + "name": "昌黎县", + "shortName": null, + "level": 3, + "code": "130322", + "pinyin": "ChangLiXian", + "pinyinFirst": "CLX", + "capital": "昌黎镇", + "population": 56, + "area": 1212, + "areaCode": "0335", + "zipCode": "066600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627710026, + "parentId": 653116627705925, + "name": "卢龙县", + "shortName": null, + "level": 3, + "code": "130324", + "pinyin": "LuLongXian", + "pinyinFirst": "LLX", + "capital": "卢龙镇", + "population": 42, + "area": 961, + "areaCode": "0335", + "zipCode": "066400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627714117, + "parentId": 653116627705925, + "name": "青龙满族自治县", + "shortName": null, + "level": 3, + "code": "130321", + "pinyin": "QingLongManZuZiZhiXian", + "pinyinFirst": "QLMZZZX", + "capital": "青龙镇", + "population": 57, + "area": 3510, + "areaCode": "0335", + "zipCode": "066500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627836997, + "parentId": 653116624724037, + "name": "邯郸市", + "shortName": null, + "level": 2, + "code": "130400", + "pinyin": "HanDanShi", + "pinyinFirst": "HDS", + "capital": "丛台区", + "population": 1061, + "area": 12047, + "areaCode": "0310", + "zipCode": "056000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116627845189, + "parentId": 653116627836997, + "name": "丛台区", + "shortName": null, + "level": 3, + "code": "130403", + "pinyin": "CongTaiQu", + "pinyinFirst": "CTQ", + "capital": "丛台西街道", + "population": 83, + "area": 387, + "areaCode": "0310", + "zipCode": "056002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845190, + "parentId": 653116627836997, + "name": "邯山区", + "shortName": null, + "level": 3, + "code": "130402", + "pinyin": "HanShanQu", + "pinyinFirst": "HSQ", + "capital": "火磨街道", + "population": 77, + "area": 416, + "areaCode": "0310", + "zipCode": "056001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845191, + "parentId": 653116627836997, + "name": "复兴区", + "shortName": null, + "level": 3, + "code": "130404", + "pinyin": "FuXingQu", + "pinyinFirst": "FXQ", + "capital": "胜利桥街道", + "population": 37, + "area": 243, + "areaCode": "0310", + "zipCode": "056003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845192, + "parentId": 653116627836997, + "name": "峰峰矿区", + "shortName": null, + "level": 3, + "code": "130406", + "pinyin": "FengFengKuangQu", + "pinyinFirst": "FFKQ", + "capital": "滏阳东路街道", + "population": 46, + "area": 374, + "areaCode": "0310", + "zipCode": "056200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845193, + "parentId": 653116627836997, + "name": "肥乡区", + "shortName": null, + "level": 3, + "code": "130407", + "pinyin": "FeiXiangQu", + "pinyinFirst": "FXQ", + "capital": "肥乡镇", + "population": 41, + "area": 503, + "areaCode": "0310", + "zipCode": "057550", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845194, + "parentId": 653116627836997, + "name": "永年区", + "shortName": null, + "level": 3, + "code": "130408", + "pinyin": "YongNianQu", + "pinyinFirst": "YNQ", + "capital": "临洺关镇", + "population": 97, + "area": 760, + "areaCode": "0310", + "zipCode": "057150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845195, + "parentId": 653116627836997, + "name": "武安市", + "shortName": null, + "level": 3, + "code": "130481", + "pinyin": "WuAnShi", + "pinyinFirst": "WAS", + "capital": "武安镇", + "population": 85, + "area": 1806, + "areaCode": "0310", + "zipCode": "056300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845196, + "parentId": 653116627836997, + "name": "临漳县", + "shortName": null, + "level": 3, + "code": "130423", + "pinyin": "LinZhangXian", + "pinyinFirst": "LZX", + "capital": "临漳镇", + "population": 76, + "area": 742, + "areaCode": "0310", + "zipCode": "056600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845197, + "parentId": 653116627836997, + "name": "成安县", + "shortName": null, + "level": 3, + "code": "130424", + "pinyin": "ChengAnXian", + "pinyinFirst": "CAX", + "capital": "成安镇", + "population": 47, + "area": 482, + "areaCode": "0310", + "zipCode": "056700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845198, + "parentId": 653116627836997, + "name": "大名县", + "shortName": null, + "level": 3, + "code": "130425", + "pinyin": "DaMingXian", + "pinyinFirst": "DMX", + "capital": "大名镇", + "population": 94, + "area": 1053, + "areaCode": "0310", + "zipCode": "056900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845199, + "parentId": 653116627836997, + "name": "涉县", + "shortName": null, + "level": 3, + "code": "130426", + "pinyin": "SheXian", + "pinyinFirst": "SX", + "capital": "平安街道", + "population": 43, + "area": 1509, + "areaCode": "0310", + "zipCode": "056400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845200, + "parentId": 653116627836997, + "name": "磁县", + "shortName": null, + "level": 3, + "code": "130427", + "pinyin": "CiXian", + "pinyinFirst": "CX", + "capital": "磁州镇", + "population": 49, + "area": 695, + "areaCode": "0310", + "zipCode": "056500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845201, + "parentId": 653116627836997, + "name": "邱县", + "shortName": null, + "level": 3, + "code": "130430", + "pinyin": "QiuXian", + "pinyinFirst": "QX", + "capital": "新马头镇", + "population": 26, + "area": 449, + "areaCode": "0310", + "zipCode": "057450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845202, + "parentId": 653116627836997, + "name": "鸡泽县", + "shortName": null, + "level": 3, + "code": "130431", + "pinyin": "JiZeXian", + "pinyinFirst": "JZX", + "capital": "鸡泽镇", + "population": 34, + "area": 336, + "areaCode": "0310", + "zipCode": "057350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845203, + "parentId": 653116627836997, + "name": "广平县", + "shortName": null, + "level": 3, + "code": "130432", + "pinyin": "GuangPingXian", + "pinyinFirst": "GPX", + "capital": "广平镇", + "population": 31, + "area": 314, + "areaCode": "0310", + "zipCode": "057650", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845204, + "parentId": 653116627836997, + "name": "馆陶县", + "shortName": null, + "level": 3, + "code": "130433", + "pinyin": "GuanTaoXian", + "pinyinFirst": "GTX", + "capital": "馆陶镇", + "population": 36, + "area": 456, + "areaCode": "0310", + "zipCode": "057750", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627845205, + "parentId": 653116627836997, + "name": "魏县", + "shortName": null, + "level": 3, + "code": "130434", + "pinyin": "WeiXian", + "pinyinFirst": "WX", + "capital": "魏城镇", + "population": 104, + "area": 864, + "areaCode": "0310", + "zipCode": "056800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116627849285, + "parentId": 653116627836997, + "name": "曲周县", + "shortName": null, + "level": 3, + "code": "130435", + "pinyin": "QuZhouXian", + "pinyinFirst": "QZX", + "capital": "曲周镇", + "population": 54, + "area": 677, + "areaCode": "0310", + "zipCode": "057250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628009029, + "parentId": 653116624724037, + "name": "邢台市", + "shortName": null, + "level": 2, + "code": "130500", + "pinyin": "XingTaiShi", + "pinyinFirst": "XTS", + "capital": "襄都区", + "population": 801, + "area": 12143, + "areaCode": "0319", + "zipCode": "054000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116628013125, + "parentId": 653116628009029, + "name": "襄都区", + "shortName": null, + "level": 3, + "code": "130502", + "pinyin": "XiangDuQu", + "pinyinFirst": "XDQ", + "capital": "南长街街道", + "population": 53, + "area": 318, + "areaCode": "0319", + "zipCode": "054001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628013126, + "parentId": 653116628009029, + "name": "信都区", + "shortName": null, + "level": 3, + "code": "130503", + "pinyin": "XinDuQu", + "pinyinFirst": "XDQ", + "capital": "钢铁路街道", + "population": 74, + "area": 1894, + "areaCode": "0319", + "zipCode": "054002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628013127, + "parentId": 653116628009029, + "name": "任泽区", + "shortName": null, + "level": 3, + "code": "130505", + "pinyin": "RenZeQu", + "pinyinFirst": "RZQ", + "capital": "任城镇", + "population": 39, + "area": 431, + "areaCode": "0319", + "zipCode": "055150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628013128, + "parentId": 653116628009029, + "name": "南和区", + "shortName": null, + "level": 3, + "code": "130506", + "pinyin": "NanHeQu", + "pinyinFirst": "NHQ", + "capital": "和阳镇", + "population": 40, + "area": 405, + "areaCode": "0319", + "zipCode": "054400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628013129, + "parentId": 653116628009029, + "name": "南宫市", + "shortName": null, + "level": 3, + "code": "130581", + "pinyin": "NanGongShi", + "pinyinFirst": "NGS", + "capital": "凤岗街道", + "population": 51, + "area": 861, + "areaCode": "0319", + "zipCode": "055750", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628013130, + "parentId": 653116628009029, + "name": "沙河市", + "shortName": null, + "level": 3, + "code": "130582", + "pinyin": "ShaHeShi", + "pinyinFirst": "SHS", + "capital": "褡裢街道", + "population": 46, + "area": 859, + "areaCode": "0319", + "zipCode": "054100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628013131, + "parentId": 653116628009029, + "name": "临城县", + "shortName": null, + "level": 3, + "code": "130522", + "pinyin": "LinChengXian", + "pinyinFirst": "LCX", + "capital": "临城镇", + "population": 22, + "area": 797, + "areaCode": "0319", + "zipCode": "054300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628013132, + "parentId": 653116628009029, + "name": "内丘县", + "shortName": null, + "level": 3, + "code": "130523", + "pinyin": "NeiQiuXian", + "pinyinFirst": "NQX", + "capital": "内丘镇", + "population": 30, + "area": 788, + "areaCode": "0319", + "zipCode": "054200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628013133, + "parentId": 653116628009029, + "name": "柏乡县", + "shortName": null, + "level": 3, + "code": "130524", + "pinyin": "BaiXiangXian", + "pinyinFirst": "BXX", + "capital": "柏乡镇", + "population": 21, + "area": 268, + "areaCode": "0319", + "zipCode": "055450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628013134, + "parentId": 653116628009029, + "name": "隆尧县", + "shortName": null, + "level": 3, + "code": "130525", + "pinyin": "LongYaoXian", + "pinyinFirst": "LYX", + "capital": "隆尧镇", + "population": 57, + "area": 749, + "areaCode": "0319", + "zipCode": "055350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628017221, + "parentId": 653116628009029, + "name": "宁晋县", + "shortName": null, + "level": 3, + "code": "130528", + "pinyin": "NingJinXian", + "pinyinFirst": "NJX", + "capital": "凤凰镇", + "population": 87, + "area": 1032, + "areaCode": "0319", + "zipCode": "055550", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628017222, + "parentId": 653116628009029, + "name": "巨鹿县", + "shortName": null, + "level": 3, + "code": "130529", + "pinyin": "JuLuXian", + "pinyinFirst": "JLX", + "capital": "巨鹿镇", + "population": 43, + "area": 631, + "areaCode": "0319", + "zipCode": "055250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628017223, + "parentId": 653116628009029, + "name": "新河县", + "shortName": null, + "level": 3, + "code": "130530", + "pinyin": "XinHeXian", + "pinyinFirst": "XHX", + "capital": "新河镇", + "population": 18, + "area": 366, + "areaCode": "0319", + "zipCode": "055650", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628017224, + "parentId": 653116628009029, + "name": "广宗县", + "shortName": null, + "level": 3, + "code": "130531", + "pinyin": "GuangZongXian", + "pinyinFirst": "GZX", + "capital": "广宗镇", + "population": 34, + "area": 504, + "areaCode": "0319", + "zipCode": "054600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628017225, + "parentId": 653116628009029, + "name": "平乡县", + "shortName": null, + "level": 3, + "code": "130532", + "pinyin": "PingXiangXian", + "pinyinFirst": "PXX", + "capital": "中华路街道", + "population": 37, + "area": 406, + "areaCode": "0319", + "zipCode": "054500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628017226, + "parentId": 653116628009029, + "name": "威县", + "shortName": null, + "level": 3, + "code": "130533", + "pinyin": "WeiXian", + "pinyinFirst": "WX", + "capital": "洺州镇", + "population": 65, + "area": 994, + "areaCode": "0319", + "zipCode": "054700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628017227, + "parentId": 653116628009029, + "name": "清河县", + "shortName": null, + "level": 3, + "code": "130534", + "pinyin": "QingHeXian", + "pinyinFirst": "QHX", + "capital": "葛仙庄镇", + "population": 45, + "area": 500, + "areaCode": "0319", + "zipCode": "054800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628017228, + "parentId": 653116628009029, + "name": "临西县", + "shortName": null, + "level": 3, + "code": "130535", + "pinyin": "LinXiXian", + "pinyinFirst": "LXX", + "capital": "临西镇", + "population": 39, + "area": 542, + "areaCode": "0319", + "zipCode": "054900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628234309, + "parentId": 653116624724037, + "name": "保定市", + "shortName": null, + "level": 2, + "code": "130600", + "pinyin": "BaoDingShi", + "pinyinFirst": "BDS", + "capital": "竞秀区", + "population": 1090, + "area": 22135, + "areaCode": "0312", + "zipCode": "071000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116628242501, + "parentId": 653116628234309, + "name": "竞秀区", + "shortName": null, + "level": 3, + "code": "130602", + "pinyin": "JingXiuQu", + "pinyinFirst": "JXQ", + "capital": "先锋街道", + "population": 52, + "area": 139, + "areaCode": "0312", + "zipCode": "071051", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242502, + "parentId": 653116628234309, + "name": "莲池区", + "shortName": null, + "level": 3, + "code": "130606", + "pinyin": "LianChiQu", + "pinyinFirst": "LCQ", + "capital": "五四路街道", + "population": 64, + "area": 173, + "areaCode": "0312", + "zipCode": "071000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242503, + "parentId": 653116628234309, + "name": "满城区", + "shortName": null, + "level": 3, + "code": "130607", + "pinyin": "ManChengQu", + "pinyinFirst": "MCQ", + "capital": "满城镇", + "population": 41, + "area": 629, + "areaCode": "0312", + "zipCode": "072150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242504, + "parentId": 653116628234309, + "name": "清苑区", + "shortName": null, + "level": 3, + "code": "130608", + "pinyin": "QingYuanQu", + "pinyinFirst": "QYQ", + "capital": "清苑镇", + "population": 69, + "area": 867, + "areaCode": "0312", + "zipCode": "071100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242505, + "parentId": 653116628234309, + "name": "徐水区", + "shortName": null, + "level": 3, + "code": "130609", + "pinyin": "XuShuiQu", + "pinyinFirst": "XSQ", + "capital": "安肃镇", + "population": 64, + "area": 723, + "areaCode": "0312", + "zipCode": "072550", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242506, + "parentId": 653116628234309, + "name": "涿州市", + "shortName": null, + "level": 3, + "code": "130681", + "pinyin": "ZhuoZhouShi", + "pinyinFirst": "ZZS", + "capital": "双塔街道", + "population": 70, + "area": 751, + "areaCode": "0312", + "zipCode": "072750", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242507, + "parentId": 653116628234309, + "name": "定州市", + "shortName": null, + "level": 3, + "code": "130682", + "pinyin": "DingZhouShi", + "pinyinFirst": "DZS", + "capital": "南城区街道", + "population": 124, + "area": 1283, + "areaCode": "0312", + "zipCode": "073000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242508, + "parentId": 653116628234309, + "name": "安国市", + "shortName": null, + "level": 3, + "code": "130683", + "pinyin": "AnGuoShi", + "pinyinFirst": "AGS", + "capital": "祁州路街道", + "population": 41, + "area": 486, + "areaCode": "0312", + "zipCode": "071200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242509, + "parentId": 653116628234309, + "name": "高碑店市", + "shortName": null, + "level": 3, + "code": "130684", + "pinyin": "GaoBeiDianShi", + "pinyinFirst": "GBDS", + "capital": "兴华路街道", + "population": 63, + "area": 618, + "areaCode": "0312", + "zipCode": "074000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242510, + "parentId": 653116628234309, + "name": "涞水县", + "shortName": null, + "level": 3, + "code": "130623", + "pinyin": "LaiShuiXian", + "pinyinFirst": "LSX", + "capital": "涞水镇", + "population": 36, + "area": 1658, + "areaCode": "0312", + "zipCode": "074100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242511, + "parentId": 653116628234309, + "name": "阜平县", + "shortName": null, + "level": 3, + "code": "130624", + "pinyin": "FuPingXian", + "pinyinFirst": "FPX", + "capital": "阜平镇", + "population": 23, + "area": 2496, + "areaCode": "0312", + "zipCode": "073200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242512, + "parentId": 653116628234309, + "name": "定兴县", + "shortName": null, + "level": 3, + "code": "130626", + "pinyin": "DingXingXian", + "pinyinFirst": "DXX", + "capital": "定兴镇", + "population": 61, + "area": 714, + "areaCode": "0312", + "zipCode": "072650", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242513, + "parentId": 653116628234309, + "name": "唐县", + "shortName": null, + "level": 3, + "code": "130627", + "pinyin": "TangXian", + "pinyinFirst": "TX", + "capital": "仁厚镇", + "population": 60, + "area": 1417, + "areaCode": "0312", + "zipCode": "072350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242514, + "parentId": 653116628234309, + "name": "高阳县", + "shortName": null, + "level": 3, + "code": "130628", + "pinyin": "GaoYangXian", + "pinyinFirst": "GYX", + "capital": "锦华街道", + "population": 36, + "area": 495, + "areaCode": "0312", + "zipCode": "071500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242515, + "parentId": 653116628234309, + "name": "容城县", + "shortName": null, + "level": 3, + "code": "130629", + "pinyin": "RongChengXian", + "pinyinFirst": "RCX", + "capital": "容城镇", + "population": 28, + "area": 314, + "areaCode": "0312", + "zipCode": "071700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242516, + "parentId": 653116628234309, + "name": "涞源县", + "shortName": null, + "level": 3, + "code": "130630", + "pinyin": "LaiYuanXian", + "pinyinFirst": "LYX", + "capital": "涞源镇", + "population": 29, + "area": 2448, + "areaCode": "0312", + "zipCode": "074300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242517, + "parentId": 653116628234309, + "name": "望都县", + "shortName": null, + "level": 3, + "code": "130631", + "pinyin": "WangDuXian", + "pinyinFirst": "WDX", + "capital": "望都镇", + "population": 27, + "area": 370, + "areaCode": "0312", + "zipCode": "072450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242518, + "parentId": 653116628234309, + "name": "安新县", + "shortName": null, + "level": 3, + "code": "130632", + "pinyin": "AnXinXian", + "pinyinFirst": "AXX", + "capital": "安新镇", + "population": 48, + "area": 728, + "areaCode": "0312", + "zipCode": "071600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242519, + "parentId": 653116628234309, + "name": "易县", + "shortName": null, + "level": 3, + "code": "130633", + "pinyin": "YiXian", + "pinyinFirst": "YX", + "capital": "易州镇", + "population": 58, + "area": 2534, + "areaCode": "0312", + "zipCode": "074200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242520, + "parentId": 653116628234309, + "name": "曲阳县", + "shortName": null, + "level": 3, + "code": "130634", + "pinyin": "QuYangXian", + "pinyinFirst": "QYX", + "capital": "恒州镇", + "population": 66, + "area": 1084, + "areaCode": "0312", + "zipCode": "073100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242521, + "parentId": 653116628234309, + "name": "蠡县", + "shortName": null, + "level": 3, + "code": "130635", + "pinyin": "LiXian", + "pinyinFirst": "LX", + "capital": "蠡吾镇", + "population": 55, + "area": 652, + "areaCode": "0312", + "zipCode": "071400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242522, + "parentId": 653116628234309, + "name": "顺平县", + "shortName": null, + "level": 3, + "code": "130636", + "pinyin": "ShunPingXian", + "pinyinFirst": "SPX", + "capital": "蒲阳镇", + "population": 32, + "area": 711, + "areaCode": "0312", + "zipCode": "072250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628242523, + "parentId": 653116628234309, + "name": "博野县", + "shortName": null, + "level": 3, + "code": "130637", + "pinyin": "BoYeXian", + "pinyinFirst": "BYX", + "capital": "博野镇", + "population": 27, + "area": 331, + "areaCode": "0312", + "zipCode": "071300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628246597, + "parentId": 653116628234309, + "name": "雄县", + "shortName": null, + "level": 3, + "code": "130638", + "pinyin": "XiongXian", + "pinyinFirst": "XX", + "capital": "雄州镇", + "population": 40, + "area": 514, + "areaCode": "0312", + "zipCode": "071800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628553797, + "parentId": 653116624724037, + "name": "张家口市", + "shortName": null, + "level": 2, + "code": "130700", + "pinyin": "ZhangJiaKouShi", + "pinyinFirst": "ZJKS", + "capital": "桥西区", + "population": 465, + "area": 36303, + "areaCode": "0313", + "zipCode": "075000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116628557893, + "parentId": 653116628553797, + "name": "桥西区", + "shortName": null, + "level": 3, + "code": "130703", + "pinyin": "QiaoXiQu", + "pinyinFirst": "QXQ", + "capital": "新华街街道", + "population": 29, + "area": 218, + "areaCode": "0313", + "zipCode": "075000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628557894, + "parentId": 653116628553797, + "name": "桥东区", + "shortName": null, + "level": 3, + "code": "130702", + "pinyin": "QiaoDongQu", + "pinyinFirst": "QDQ", + "capital": "红旗楼街道", + "population": 33, + "area": 385, + "areaCode": "0313", + "zipCode": "075000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628557895, + "parentId": 653116628553797, + "name": "宣化区", + "shortName": null, + "level": 3, + "code": "130705", + "pinyin": "XuanHuaQu", + "pinyinFirst": "XHQ", + "capital": "建国街街道", + "population": 52, + "area": 2014, + "areaCode": "0313", + "zipCode": "075100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628557896, + "parentId": 653116628553797, + "name": "下花园区", + "shortName": null, + "level": 3, + "code": "130706", + "pinyin": "XiaHuaYuanQu", + "pinyinFirst": "XHYQ", + "capital": "城镇街道", + "population": 6, + "area": 315, + "areaCode": "0313", + "zipCode": "075300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628557897, + "parentId": 653116628553797, + "name": "万全区", + "shortName": null, + "level": 3, + "code": "130708", + "pinyin": "WanQuanQu", + "pinyinFirst": "WQQ", + "capital": "孔家庄镇", + "population": 22, + "area": 1162, + "areaCode": "0313", + "zipCode": "076250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628557898, + "parentId": 653116628553797, + "name": "崇礼区", + "shortName": null, + "level": 3, + "code": "130709", + "pinyin": "ChongLiQu", + "pinyinFirst": "CLQ", + "capital": "西湾子镇", + "population": 13, + "area": 2324, + "areaCode": "0313", + "zipCode": "076350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628557899, + "parentId": 653116628553797, + "name": "张北县", + "shortName": null, + "level": 3, + "code": "130722", + "pinyin": "ZhangBeiXian", + "pinyinFirst": "ZBX", + "capital": "张北镇", + "population": 38, + "area": 3863, + "areaCode": "0313", + "zipCode": "076450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628557900, + "parentId": 653116628553797, + "name": "康保县", + "shortName": null, + "level": 3, + "code": "130723", + "pinyin": "KangBaoXian", + "pinyinFirst": "KBX", + "capital": "康保镇", + "population": 27, + "area": 3365, + "areaCode": "0313", + "zipCode": "076650", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628557901, + "parentId": 653116628553797, + "name": "沽源县", + "shortName": null, + "level": 3, + "code": "130724", + "pinyin": "GuYuanXian", + "pinyinFirst": "GYX", + "capital": "平定堡镇", + "population": 23, + "area": 3388, + "areaCode": "0313", + "zipCode": "076550", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628557902, + "parentId": 653116628553797, + "name": "尚义县", + "shortName": null, + "level": 3, + "code": "130725", + "pinyin": "ShangYiXian", + "pinyinFirst": "SYX", + "capital": "南壕堑镇", + "population": 19, + "area": 2601, + "areaCode": "0313", + "zipCode": "076750", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628557903, + "parentId": 653116628553797, + "name": "蔚县", + "shortName": null, + "level": 3, + "code": "130726", + "pinyin": "YuXian", + "pinyinFirst": "YX", + "capital": "蔚州镇", + "population": 50, + "area": 3220, + "areaCode": "0313", + "zipCode": "075700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628561989, + "parentId": 653116628553797, + "name": "阳原县", + "shortName": null, + "level": 3, + "code": "130727", + "pinyin": "YangYuanXian", + "pinyinFirst": "YYX", + "capital": "西城镇", + "population": 27, + "area": 1849, + "areaCode": "0313", + "zipCode": "075800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628561990, + "parentId": 653116628553797, + "name": "怀安县", + "shortName": null, + "level": 3, + "code": "130728", + "pinyin": "HuaiAnXian", + "pinyinFirst": "HAX", + "capital": "柴沟堡镇", + "population": 24, + "area": 1698, + "areaCode": "0313", + "zipCode": "076150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628561991, + "parentId": 653116628553797, + "name": "怀来县", + "shortName": null, + "level": 3, + "code": "130730", + "pinyin": "HuaiLaiXian", + "pinyinFirst": "HLX", + "capital": "沙城镇", + "population": 37, + "area": 1801, + "areaCode": "0313", + "zipCode": "075400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628561992, + "parentId": 653116628553797, + "name": "涿鹿县", + "shortName": null, + "level": 3, + "code": "130731", + "pinyin": "ZhuoLuXian", + "pinyinFirst": "ZLX", + "capital": "涿鹿镇", + "population": 35, + "area": 2802, + "areaCode": "0313", + "zipCode": "075600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628561993, + "parentId": 653116628553797, + "name": "赤城县", + "shortName": null, + "level": 3, + "code": "130732", + "pinyin": "ChiChengXian", + "pinyinFirst": "CCX", + "capital": "赤城镇", + "population": 29, + "area": 5287, + "areaCode": "0313", + "zipCode": "075500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628893765, + "parentId": 653116624724037, + "name": "承德市", + "shortName": null, + "level": 2, + "code": "130800", + "pinyin": "ChengDeShi", + "pinyinFirst": "CDS", + "capital": "双桥区", + "population": 383, + "area": 39719, + "areaCode": "0314", + "zipCode": "067000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116628942917, + "parentId": 653116628893765, + "name": "双桥区", + "shortName": null, + "level": 3, + "code": "130802", + "pinyin": "ShuangQiaoQu", + "pinyinFirst": "SQQ", + "capital": "中华路街道", + "population": 39, + "area": 667, + "areaCode": "0314", + "zipCode": "067000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628942918, + "parentId": 653116628893765, + "name": "双滦区", + "shortName": null, + "level": 3, + "code": "130803", + "pinyin": "ShuangLuanQu", + "pinyinFirst": "SLQ", + "capital": "双塔山镇", + "population": 15, + "area": 452, + "areaCode": "0314", + "zipCode": "067001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628942919, + "parentId": 653116628893765, + "name": "鹰手营子矿区", + "shortName": null, + "level": 3, + "code": "130804", + "pinyin": "YingShouYingZiKuangQu", + "pinyinFirst": "YSYZKQ", + "capital": "铁北路街道", + "population": 6, + "area": 148, + "areaCode": "0314", + "zipCode": "067200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628947013, + "parentId": 653116628893765, + "name": "平泉市", + "shortName": null, + "level": 3, + "code": "130881", + "pinyin": "PingQuanShi", + "pinyinFirst": "PQS", + "capital": "平泉镇", + "population": 48, + "area": 3294, + "areaCode": "0314", + "zipCode": "067500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628947014, + "parentId": 653116628893765, + "name": "承德县", + "shortName": null, + "level": 3, + "code": "130821", + "pinyin": "ChengDeXian", + "pinyinFirst": "CDX", + "capital": "下板城镇", + "population": 43, + "area": 3648, + "areaCode": "0314", + "zipCode": "067400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628947015, + "parentId": 653116628893765, + "name": "兴隆县", + "shortName": null, + "level": 3, + "code": "130822", + "pinyin": "XingLongXian", + "pinyinFirst": "XLX", + "capital": "兴隆镇", + "population": 33, + "area": 3123, + "areaCode": "0314", + "zipCode": "067300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628947016, + "parentId": 653116628893765, + "name": "滦平县", + "shortName": null, + "level": 3, + "code": "130824", + "pinyin": "LuanPingXian", + "pinyinFirst": "LPX", + "capital": "中兴路街道", + "population": 33, + "area": 2993, + "areaCode": "0314", + "zipCode": "068250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628947017, + "parentId": 653116628893765, + "name": "隆化县", + "shortName": null, + "level": 3, + "code": "130825", + "pinyin": "LongHuaXian", + "pinyinFirst": "LHX", + "capital": "安州街道", + "population": 45, + "area": 5473, + "areaCode": "0314", + "zipCode": "068150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628947018, + "parentId": 653116628893765, + "name": "丰宁满族自治县", + "shortName": null, + "level": 3, + "code": "130826", + "pinyin": "FengNingManZuZiZhiXian", + "pinyinFirst": "FNMZZZX", + "capital": "大阁镇", + "population": 41, + "area": 8765, + "areaCode": "0314", + "zipCode": "068350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628947019, + "parentId": 653116628893765, + "name": "宽城满族自治县", + "shortName": null, + "level": 3, + "code": "130827", + "pinyin": "KuanChengManZuZiZhiXian", + "pinyinFirst": "KCMZZZX", + "capital": "宽城镇", + "population": 26, + "area": 1936, + "areaCode": "0314", + "zipCode": "067600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116628947020, + "parentId": 653116628893765, + "name": "围场满族蒙古族自治县", + "shortName": null, + "level": 3, + "code": "130828", + "pinyin": "WeiChangManZuMengGuZuZiZhiXian", + "pinyinFirst": "WCMZMGZZZX", + "capital": "围场镇", + "population": 54, + "area": 9220, + "areaCode": "0314", + "zipCode": "068450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629356613, + "parentId": 653116624724037, + "name": "沧州市", + "shortName": null, + "level": 2, + "code": "130900", + "pinyin": "CangZhouShi", + "pinyinFirst": "CZS", + "capital": "运河区", + "population": 787, + "area": 13488, + "areaCode": "0317", + "zipCode": "061000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116629360709, + "parentId": 653116629356613, + "name": "运河区", + "shortName": null, + "level": 3, + "code": "130903", + "pinyin": "YunHeQu", + "pinyinFirst": "YHQ", + "capital": "水月寺街道", + "population": 37, + "area": 138, + "areaCode": "0317", + "zipCode": "061001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629360710, + "parentId": 653116629356613, + "name": "新华区", + "shortName": null, + "level": 3, + "code": "130902", + "pinyin": "XinHuaQu", + "pinyinFirst": "XHQ", + "capital": "建设北街街道", + "population": 23, + "area": 89, + "areaCode": "0317", + "zipCode": "061000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629360711, + "parentId": 653116629356613, + "name": "泊头市", + "shortName": null, + "level": 3, + "code": "130981", + "pinyin": "BoTouShi", + "pinyinFirst": "BTS", + "capital": "解放街道", + "population": 63, + "area": 1009, + "areaCode": "0317", + "zipCode": "062150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629360712, + "parentId": 653116629356613, + "name": "任丘市", + "shortName": null, + "level": 3, + "code": "130982", + "pinyin": "RenQiuShi", + "pinyinFirst": "RQS", + "capital": "新华路街道", + "population": 91, + "area": 1012, + "areaCode": "0317", + "zipCode": "062550", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629360713, + "parentId": 653116629356613, + "name": "黄骅市", + "shortName": null, + "level": 3, + "code": "130983", + "pinyin": "HuangHuaShi", + "pinyinFirst": "HHS", + "capital": "骅西街道", + "population": 58, + "area": 1545, + "areaCode": "0317", + "zipCode": "061100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629360714, + "parentId": 653116629356613, + "name": "河间市", + "shortName": null, + "level": 3, + "code": "130984", + "pinyin": "HeJianShi", + "pinyinFirst": "HJS", + "capital": "瀛州路街道", + "population": 91, + "area": 1333, + "areaCode": "0317", + "zipCode": "062450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629360715, + "parentId": 653116629356613, + "name": "沧县", + "shortName": null, + "level": 3, + "code": "130921", + "pinyin": "CangXian", + "pinyinFirst": "CX", + "capital": "沧州市新华区", + "population": 74, + "area": 1520, + "areaCode": "0317", + "zipCode": "061000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629360716, + "parentId": 653116629356613, + "name": "青县", + "shortName": null, + "level": 3, + "code": "130922", + "pinyin": "QingXian", + "pinyinFirst": "QX", + "capital": "清州镇", + "population": 44, + "area": 968, + "areaCode": "0317", + "zipCode": "062650", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629360717, + "parentId": 653116629356613, + "name": "东光县", + "shortName": null, + "level": 3, + "code": "130923", + "pinyin": "DongGuangXian", + "pinyinFirst": "DGX", + "capital": "东光镇", + "population": 39, + "area": 711, + "areaCode": "0317", + "zipCode": "061600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629364805, + "parentId": 653116629356613, + "name": "海兴县", + "shortName": null, + "level": 3, + "code": "130924", + "pinyin": "HaiXingXian", + "pinyinFirst": "HXX", + "capital": "苏基镇", + "population": 24, + "area": 919, + "areaCode": "0317", + "zipCode": "061200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629364806, + "parentId": 653116629356613, + "name": "盐山县", + "shortName": null, + "level": 3, + "code": "130925", + "pinyin": "YanShanXian", + "pinyinFirst": "YSX", + "capital": "盐山镇", + "population": 50, + "area": 795, + "areaCode": "0317", + "zipCode": "061300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629364807, + "parentId": 653116629356613, + "name": "肃宁县", + "shortName": null, + "level": 3, + "code": "130926", + "pinyin": "SuNingXian", + "pinyinFirst": "SNX", + "capital": "肃宁镇", + "population": 37, + "area": 516, + "areaCode": "0317", + "zipCode": "062350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629364808, + "parentId": 653116629356613, + "name": "南皮县", + "shortName": null, + "level": 3, + "code": "130927", + "pinyin": "NanPiXian", + "pinyinFirst": "NPX", + "capital": "南皮镇", + "population": 40, + "area": 790, + "areaCode": "0317", + "zipCode": "061500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629364809, + "parentId": 653116629356613, + "name": "吴桥县", + "shortName": null, + "level": 3, + "code": "130928", + "pinyin": "WuQiaoXian", + "pinyinFirst": "WQX", + "capital": "桑园镇", + "population": 28, + "area": 583, + "areaCode": "0317", + "zipCode": "061800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629364810, + "parentId": 653116629356613, + "name": "献县", + "shortName": null, + "level": 3, + "code": "130929", + "pinyin": "XianXian", + "pinyinFirst": "XX", + "capital": "乐寿镇", + "population": 66, + "area": 1173, + "areaCode": "0317", + "zipCode": "062250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629364811, + "parentId": 653116629356613, + "name": "孟村回族自治县", + "shortName": null, + "level": 3, + "code": "130930", + "pinyin": "MengCunHuiZuZiZhiXian", + "pinyinFirst": "MCHZZZX", + "capital": "孟村镇", + "population": 23, + "area": 387, + "areaCode": "0317", + "zipCode": "061400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629827653, + "parentId": 653116624724037, + "name": "廊坊市", + "shortName": null, + "level": 2, + "code": "131000", + "pinyin": "LangFangShi", + "pinyinFirst": "LFS", + "capital": "广阳区", + "population": 483, + "area": 6420, + "areaCode": "0316", + "zipCode": "065000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116629831749, + "parentId": 653116629827653, + "name": "广阳区", + "shortName": null, + "level": 3, + "code": "131003", + "pinyin": "GuangYangQu", + "pinyinFirst": "GYQ", + "capital": "解放道街道", + "population": 50, + "area": 384, + "areaCode": "0316", + "zipCode": "065000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629831750, + "parentId": 653116629827653, + "name": "安次区", + "shortName": null, + "level": 3, + "code": "131002", + "pinyin": "AnCiQu", + "pinyinFirst": "ACQ", + "capital": "银河北路街道", + "population": 38, + "area": 578, + "areaCode": "0316", + "zipCode": "065000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629831751, + "parentId": 653116629827653, + "name": "霸州市", + "shortName": null, + "level": 3, + "code": "131081", + "pinyin": "BaZhouShi", + "pinyinFirst": "BZS", + "capital": "霸州镇", + "population": 66, + "area": 802, + "areaCode": "0316", + "zipCode": "065700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629831752, + "parentId": 653116629827653, + "name": "三河市", + "shortName": null, + "level": 3, + "code": "131082", + "pinyin": "SanHeShi", + "pinyinFirst": "SHS", + "capital": "鼎盛东大街街道", + "population": 75, + "area": 634, + "areaCode": "0316", + "zipCode": "065200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629831753, + "parentId": 653116629827653, + "name": "固安县", + "shortName": null, + "level": 3, + "code": "131022", + "pinyin": "GuAnXian", + "pinyinFirst": "GAX", + "capital": "固安镇", + "population": 53, + "area": 703, + "areaCode": "0316", + "zipCode": "065500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629831754, + "parentId": 653116629827653, + "name": "永清县", + "shortName": null, + "level": 3, + "code": "131023", + "pinyin": "YongQingXian", + "pinyinFirst": "YQX", + "capital": "永清镇", + "population": 41, + "area": 761, + "areaCode": "0316", + "zipCode": "065600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629831755, + "parentId": 653116629827653, + "name": "香河县", + "shortName": null, + "level": 3, + "code": "131024", + "pinyin": "XiangHeXian", + "pinyinFirst": "XHX", + "capital": "淑阳镇", + "population": 38, + "area": 448, + "areaCode": "0316", + "zipCode": "065400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629831756, + "parentId": 653116629827653, + "name": "大城县", + "shortName": null, + "level": 3, + "code": "131025", + "pinyin": "DaiChengXian", + "pinyinFirst": "DCX", + "capital": "平舒镇", + "population": 54, + "area": 897, + "areaCode": "0316", + "zipCode": "065900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629831757, + "parentId": 653116629827653, + "name": "文安县", + "shortName": null, + "level": 3, + "code": "131026", + "pinyin": "WenAnXian", + "pinyinFirst": "WAX", + "capital": "文安镇", + "population": 56, + "area": 1037, + "areaCode": "0316", + "zipCode": "065800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116629831758, + "parentId": 653116629827653, + "name": "大厂回族自治县", + "shortName": null, + "level": 3, + "code": "131028", + "pinyin": "DaChangHuiZuZiZhiXian", + "pinyinFirst": "DCHZZZX", + "capital": "大厂镇", + "population": 13, + "area": 176, + "areaCode": "0316", + "zipCode": "065300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116630188101, + "parentId": 653116624724037, + "name": "衡水市", + "shortName": null, + "level": 2, + "code": "131100", + "pinyin": "HengShuiShi", + "pinyinFirst": "HSS", + "capital": "桃城区", + "population": 458, + "area": 8758, + "areaCode": "0318", + "zipCode": "053000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116630192197, + "parentId": 653116630188101, + "name": "桃城区", + "shortName": null, + "level": 3, + "code": "131102", + "pinyin": "TaoChengQu", + "pinyinFirst": "TCQ", + "capital": "中华大街街道", + "population": 68, + "area": 563, + "areaCode": "0318", + "zipCode": "053000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116630192198, + "parentId": 653116630188101, + "name": "冀州区", + "shortName": null, + "level": 3, + "code": "131103", + "pinyin": "JiZhouQu", + "pinyinFirst": "JZQ", + "capital": "冀州镇", + "population": 35, + "area": 878, + "areaCode": "0318", + "zipCode": "053200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116630192199, + "parentId": 653116630188101, + "name": "深州市", + "shortName": null, + "level": 3, + "code": "131182", + "pinyin": "ShenZhouShi", + "pinyinFirst": "SZS", + "capital": "深州镇", + "population": 57, + "area": 1245, + "areaCode": "0318", + "zipCode": "053800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116630192200, + "parentId": 653116630188101, + "name": "枣强县", + "shortName": null, + "level": 3, + "code": "131121", + "pinyin": "ZaoQiangXian", + "pinyinFirst": "ZQX", + "capital": "枣强镇", + "population": 41, + "area": 905, + "areaCode": "0318", + "zipCode": "053100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116630192201, + "parentId": 653116630188101, + "name": "武邑县", + "shortName": null, + "level": 3, + "code": "131122", + "pinyin": "WuYiXian", + "pinyinFirst": "WYX", + "capital": "武邑镇", + "population": 32, + "area": 832, + "areaCode": "0318", + "zipCode": "053400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116630192202, + "parentId": 653116630188101, + "name": "武强县", + "shortName": null, + "level": 3, + "code": "131123", + "pinyin": "WuQiangXian", + "pinyinFirst": "WQX", + "capital": "武强镇", + "population": 22, + "area": 443, + "areaCode": "0318", + "zipCode": "053300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116630192203, + "parentId": 653116630188101, + "name": "饶阳县", + "shortName": null, + "level": 3, + "code": "131124", + "pinyin": "RaoYangXian", + "pinyinFirst": "RYX", + "capital": "饶阳镇", + "population": 29, + "area": 572, + "areaCode": "0318", + "zipCode": "053900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116630192204, + "parentId": 653116630188101, + "name": "安平县", + "shortName": null, + "level": 3, + "code": "131125", + "pinyin": "AnPingXian", + "pinyinFirst": "APX", + "capital": "安平镇", + "population": 34, + "area": 496, + "areaCode": "0318", + "zipCode": "053600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116630192205, + "parentId": 653116630188101, + "name": "故城县", + "shortName": null, + "level": 3, + "code": "131126", + "pinyin": "GuChengXian", + "pinyinFirst": "GCX", + "capital": "郑口镇", + "population": 53, + "area": 941, + "areaCode": "0318", + "zipCode": "053800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116630192206, + "parentId": 653116630188101, + "name": "景县", + "shortName": null, + "level": 3, + "code": "131127", + "pinyin": "JingXian", + "pinyinFirst": "JX", + "capital": "景州镇", + "population": 55, + "area": 1188, + "areaCode": "0318", + "zipCode": "053500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116630192207, + "parentId": 653116630188101, + "name": "阜城县", + "shortName": null, + "level": 3, + "code": "131128", + "pinyin": "FuChengXian", + "pinyinFirst": "FCX", + "capital": "阜城镇", + "population": 35, + "area": 695, + "areaCode": "0318", + "zipCode": "053700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:23", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:56" + }, + { + "id": 653116630548549, + "parentId": 0, + "name": "山西省", + "shortName": "晋", + "level": 1, + "code": "140000", + "pinyin": "ShanXiSheng", + "pinyinFirst": "SXS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116632117317, + "parentId": 653116630548549, + "name": "太原市", + "shortName": null, + "level": 2, + "code": "140100", + "pinyin": "TaiYuanShi", + "pinyinFirst": "TYS", + "capital": "杏花岭区", + "population": 384, + "area": 6909, + "areaCode": "0351", + "zipCode": "030000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116632121413, + "parentId": 653116632117317, + "name": "杏花岭区", + "shortName": null, + "level": 3, + "code": "140107", + "pinyin": "XingHuaLingQu", + "pinyinFirst": "XHLQ", + "capital": "巨轮街道", + "population": 62, + "area": 146, + "areaCode": "0351", + "zipCode": "030009", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632121414, + "parentId": 653116632117317, + "name": "小店区", + "shortName": null, + "level": 3, + "code": "140105", + "pinyin": "XiaoDianQu", + "pinyinFirst": "XDQ", + "capital": "小店街道", + "population": 69, + "area": 290, + "areaCode": "0351", + "zipCode": "030032", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632121415, + "parentId": 653116632117317, + "name": "迎泽区", + "shortName": null, + "level": 3, + "code": "140106", + "pinyin": "YingZeQu", + "pinyinFirst": "YZQ", + "capital": "柳巷街道", + "population": 55, + "area": 105, + "areaCode": "0351", + "zipCode": "030002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632121416, + "parentId": 653116632117317, + "name": "尖草坪区", + "shortName": null, + "level": 3, + "code": "140108", + "pinyin": "JianCaoPingQu", + "pinyinFirst": "JCPQ", + "capital": "柴村街道", + "population": 33, + "area": 296, + "areaCode": "0351", + "zipCode": "030023", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632121417, + "parentId": 653116632117317, + "name": "万柏林区", + "shortName": null, + "level": 3, + "code": "140109", + "pinyin": "WanBoLinQu", + "pinyinFirst": "WBLQ", + "capital": "千峰街道", + "population": 59, + "area": 289, + "areaCode": "0351", + "zipCode": "030024", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632121418, + "parentId": 653116632117317, + "name": "晋源区", + "shortName": null, + "level": 3, + "code": "140110", + "pinyin": "JinYuanQu", + "pinyinFirst": "JYQ", + "capital": "晋源街道", + "population": 22, + "area": 290, + "areaCode": "0351", + "zipCode": "030025", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632121419, + "parentId": 653116632117317, + "name": "古交市", + "shortName": null, + "level": 3, + "code": "140181", + "pinyin": "GuJiaoShi", + "pinyinFirst": "GJS", + "capital": "东曲街道", + "population": 21, + "area": 1512, + "areaCode": "0351", + "zipCode": "030200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632121420, + "parentId": 653116632117317, + "name": "清徐县", + "shortName": null, + "level": 3, + "code": "140121", + "pinyin": "QingXuXian", + "pinyinFirst": "QXX", + "capital": "清源镇", + "population": 34, + "area": 608, + "areaCode": "0351", + "zipCode": "030400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632121421, + "parentId": 653116632117317, + "name": "阳曲县", + "shortName": null, + "level": 3, + "code": "140122", + "pinyin": "YangQuXian", + "pinyinFirst": "YQX", + "capital": "黄寨镇", + "population": 15, + "area": 2084, + "areaCode": "0351", + "zipCode": "030100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632121422, + "parentId": 653116632117317, + "name": "娄烦县", + "shortName": null, + "level": 3, + "code": "140123", + "pinyin": "LouFanXian", + "pinyinFirst": "LFX", + "capital": "娄烦镇", + "population": 13, + "area": 1289, + "areaCode": "0351", + "zipCode": "030300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632215621, + "parentId": 653116630548549, + "name": "大同市", + "shortName": null, + "level": 2, + "code": "140200", + "pinyin": "DaTongShi", + "pinyinFirst": "DTS", + "capital": "平城区", + "population": 318, + "area": 14056, + "areaCode": "0352", + "zipCode": "037000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116632219717, + "parentId": 653116632215621, + "name": "平城区", + "shortName": null, + "level": 3, + "code": "140213", + "pinyin": "PingChengQu", + "pinyinFirst": "PCQ", + "capital": "向阳里街道", + "population": 75, + "area": 240, + "areaCode": "0352", + "zipCode": "037008", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632219718, + "parentId": 653116632215621, + "name": "云冈区", + "shortName": null, + "level": 3, + "code": "140214", + "pinyin": "YunGangQu", + "pinyinFirst": "YGQ", + "capital": "口泉乡", + "population": 66, + "area": 743, + "areaCode": "0352", + "zipCode": "037001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632219719, + "parentId": 653116632215621, + "name": "新荣区", + "shortName": null, + "level": 3, + "code": "140212", + "pinyin": "XinRongQu", + "pinyinFirst": "XRQ", + "capital": "新荣镇", + "population": 10, + "area": 1090, + "areaCode": "0352", + "zipCode": "037002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632219720, + "parentId": 653116632215621, + "name": "云州区", + "shortName": null, + "level": 3, + "code": "140215", + "pinyin": "YunZhouQu", + "pinyinFirst": "YZQ", + "capital": "西坪镇", + "population": 19, + "area": 1478, + "areaCode": "0352", + "zipCode": "037300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632219721, + "parentId": 653116632215621, + "name": "阳高县", + "shortName": null, + "level": 3, + "code": "140221", + "pinyin": "YangGaoXian", + "pinyinFirst": "YGX", + "capital": "龙泉镇", + "population": 27, + "area": 1678, + "areaCode": "0352", + "zipCode": "038100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632219722, + "parentId": 653116632215621, + "name": "天镇县", + "shortName": null, + "level": 3, + "code": "140222", + "pinyin": "TianZhenXian", + "pinyinFirst": "TZX", + "capital": "玉泉镇", + "population": 23, + "area": 1629, + "areaCode": "0352", + "zipCode": "038200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632219723, + "parentId": 653116632215621, + "name": "广灵县", + "shortName": null, + "level": 3, + "code": "140223", + "pinyin": "GuangLingXian", + "pinyinFirst": "GLX", + "capital": "壶泉镇", + "population": 18, + "area": 1204, + "areaCode": "0352", + "zipCode": "037500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632219724, + "parentId": 653116632215621, + "name": "灵丘县", + "shortName": null, + "level": 3, + "code": "140224", + "pinyin": "LingQiuXian", + "pinyinFirst": "LQX", + "capital": "武灵镇", + "population": 25, + "area": 2732, + "areaCode": "0352", + "zipCode": "034400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632219725, + "parentId": 653116632215621, + "name": "浑源县", + "shortName": null, + "level": 3, + "code": "140225", + "pinyin": "HunYuanXian", + "pinyinFirst": "HYX", + "capital": "永安镇", + "population": 35, + "area": 1968, + "areaCode": "0352", + "zipCode": "037400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632219726, + "parentId": 653116632215621, + "name": "左云县", + "shortName": null, + "level": 3, + "code": "140226", + "pinyin": "ZuoYunXian", + "pinyinFirst": "ZYX", + "capital": "云兴镇", + "population": 14, + "area": 1294, + "areaCode": "0352", + "zipCode": "037100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632318021, + "parentId": 653116630548549, + "name": "阳泉市", + "shortName": null, + "level": 2, + "code": "140300", + "pinyin": "YangQuanShi", + "pinyinFirst": "YQS", + "capital": "城区", + "population": 132, + "area": 4559, + "areaCode": "0353", + "zipCode": "045000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116632322117, + "parentId": 653116632318021, + "name": "城区", + "shortName": null, + "level": 3, + "code": "140302", + "pinyin": "ChengQu", + "pinyinFirst": "CQ", + "capital": "上站街道", + "population": 24, + "area": 15, + "areaCode": "0353", + "zipCode": "045000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632322118, + "parentId": 653116632318021, + "name": "矿区", + "shortName": null, + "level": 3, + "code": "140303", + "pinyin": "KuangQu", + "pinyinFirst": "KQ", + "capital": "平潭街街道", + "population": 26, + "area": 12, + "areaCode": "0353", + "zipCode": "045000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632322119, + "parentId": 653116632318021, + "name": "郊区", + "shortName": null, + "level": 3, + "code": "140311", + "pinyin": "JiaoQu", + "pinyinFirst": "JQ", + "capital": "荫营镇", + "population": 19, + "area": 627, + "areaCode": "0353", + "zipCode": "045011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632322120, + "parentId": 653116632318021, + "name": "平定县", + "shortName": null, + "level": 3, + "code": "140321", + "pinyin": "PingDingXian", + "pinyinFirst": "PDX", + "capital": "冠山镇", + "population": 32, + "area": 1391, + "areaCode": "0353", + "zipCode": "045200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632322121, + "parentId": 653116632318021, + "name": "盂县", + "shortName": null, + "level": 3, + "code": "140322", + "pinyin": "YuXian", + "pinyinFirst": "YX", + "capital": "秀水镇", + "population": 31, + "area": 2514, + "areaCode": "0353", + "zipCode": "045100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632420421, + "parentId": 653116630548549, + "name": "长治市", + "shortName": null, + "level": 2, + "code": "140400", + "pinyin": "ChangZhiShi", + "pinyinFirst": "CZS", + "capital": "潞州区", + "population": 340, + "area": 13954, + "areaCode": "0355", + "zipCode": "046000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116632428613, + "parentId": 653116632420421, + "name": "潞州区", + "shortName": null, + "level": 3, + "code": "140403", + "pinyin": "LuZhouQu", + "pinyinFirst": "LZQ", + "capital": "太行东街街道", + "population": 75, + "area": 344, + "areaCode": "0355", + "zipCode": "046011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632428614, + "parentId": 653116632420421, + "name": "上党区", + "shortName": null, + "level": 3, + "code": "140404", + "pinyin": "ShangDangQu", + "pinyinFirst": "SDQ", + "capital": "韩店街道", + "population": 35, + "area": 482, + "areaCode": "0355", + "zipCode": "047100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632428615, + "parentId": 653116632420421, + "name": "屯留区", + "shortName": null, + "level": 3, + "code": "140405", + "pinyin": "TunLiuQu", + "pinyinFirst": "TLQ", + "capital": "麟绛街道", + "population": 28, + "area": 1190, + "areaCode": "0355", + "zipCode": "046100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632428616, + "parentId": 653116632420421, + "name": "潞城区", + "shortName": null, + "level": 3, + "code": "140406", + "pinyin": "LuChengQu", + "pinyinFirst": "LCQ", + "capital": "潞华街道", + "population": 23, + "area": 614, + "areaCode": "0355", + "zipCode": "047500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632428617, + "parentId": 653116632420421, + "name": "襄垣县", + "shortName": null, + "level": 3, + "code": "140423", + "pinyin": "XiangYuanXian", + "pinyinFirst": "XYX", + "capital": "古韩镇", + "population": 27, + "area": 1178, + "areaCode": "0355", + "zipCode": "046200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632428618, + "parentId": 653116632420421, + "name": "平顺县", + "shortName": null, + "level": 3, + "code": "140425", + "pinyin": "PingShunXian", + "pinyinFirst": "PSX", + "capital": "青羊镇", + "population": 15, + "area": 1510, + "areaCode": "0355", + "zipCode": "047400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632428619, + "parentId": 653116632420421, + "name": "黎城县", + "shortName": null, + "level": 3, + "code": "140426", + "pinyin": "LiChengXian", + "pinyinFirst": "LCX", + "capital": "黎侯镇", + "population": 16, + "area": 1113, + "areaCode": "0355", + "zipCode": "047600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632428620, + "parentId": 653116632420421, + "name": "壶关县", + "shortName": null, + "level": 3, + "code": "140427", + "pinyin": "HuGuanXian", + "pinyinFirst": "HGX", + "capital": "龙泉镇", + "population": 30, + "area": 1008, + "areaCode": "0355", + "zipCode": "047300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632428621, + "parentId": 653116632420421, + "name": "长子县", + "shortName": null, + "level": 3, + "code": "140428", + "pinyin": "ZhangZiXian", + "pinyinFirst": "ZZX", + "capital": "丹朱镇", + "population": 37, + "area": 1031, + "areaCode": "0355", + "zipCode": "046600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632428622, + "parentId": 653116632420421, + "name": "武乡县", + "shortName": null, + "level": 3, + "code": "140429", + "pinyin": "WuXiangXian", + "pinyinFirst": "WXX", + "capital": "丰州镇", + "population": 21, + "area": 1615, + "areaCode": "0355", + "zipCode": "046300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632428623, + "parentId": 653116632420421, + "name": "沁县", + "shortName": null, + "level": 3, + "code": "140430", + "pinyin": "QinXian", + "pinyinFirst": "QX", + "capital": "定昌镇", + "population": 17, + "area": 1320, + "areaCode": "0355", + "zipCode": "046400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632428624, + "parentId": 653116632420421, + "name": "沁源县", + "shortName": null, + "level": 3, + "code": "140431", + "pinyin": "QinYuanXian", + "pinyinFirst": "QYX", + "capital": "沁河镇", + "population": 16, + "area": 2549, + "areaCode": "0355", + "zipCode": "046500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632535109, + "parentId": 653116630548549, + "name": "晋城市", + "shortName": null, + "level": 2, + "code": "140500", + "pinyin": "JinChengShi", + "pinyinFirst": "JCS", + "capital": "城区", + "population": 222, + "area": 9425, + "areaCode": "0356", + "zipCode": "048000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116632539205, + "parentId": 653116632535109, + "name": "城区", + "shortName": null, + "level": 3, + "code": "140502", + "pinyin": "ChengQu", + "pinyinFirst": "CQ", + "capital": "东街街道", + "population": 40, + "area": 143, + "areaCode": "0356", + "zipCode": "048000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632539206, + "parentId": 653116632535109, + "name": "高平市", + "shortName": null, + "level": 3, + "code": "140581", + "pinyin": "GaoPingShi", + "pinyinFirst": "GPS", + "capital": "北城街道", + "population": 49, + "area": 980, + "areaCode": "0356", + "zipCode": "048400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632539207, + "parentId": 653116632535109, + "name": "沁水县", + "shortName": null, + "level": 3, + "code": "140521", + "pinyin": "QinShuiXian", + "pinyinFirst": "QSX", + "capital": "龙港镇", + "population": 20, + "area": 2658, + "areaCode": "0356", + "zipCode": "048200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632539208, + "parentId": 653116632535109, + "name": "阳城县", + "shortName": null, + "level": 3, + "code": "140522", + "pinyin": "YangChengXian", + "pinyinFirst": "YCX", + "capital": "凤城镇", + "population": 38, + "area": 1918, + "areaCode": "0356", + "zipCode": "048100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632539209, + "parentId": 653116632535109, + "name": "陵川县", + "shortName": null, + "level": 3, + "code": "140524", + "pinyin": "LingChuanXian", + "pinyinFirst": "LCX", + "capital": "崇文镇", + "population": 25, + "area": 1702, + "areaCode": "0356", + "zipCode": "048300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632539210, + "parentId": 653116632535109, + "name": "泽州县", + "shortName": null, + "level": 3, + "code": "140525", + "pinyin": "ZeZhouXian", + "pinyinFirst": "ZZX", + "capital": "金村镇", + "population": 49, + "area": 2024, + "areaCode": "0356", + "zipCode": "048000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632657989, + "parentId": 653116630548549, + "name": "朔州市", + "shortName": null, + "level": 2, + "code": "140600", + "pinyin": "ShuoZhouShi", + "pinyinFirst": "SZS", + "capital": "朔城区", + "population": 163, + "area": 10626, + "areaCode": "0349", + "zipCode": "038500", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116632662085, + "parentId": 653116632657989, + "name": "朔城区", + "shortName": null, + "level": 3, + "code": "140602", + "pinyin": "ShuoChengQu", + "pinyinFirst": "SCQ", + "capital": "北城街道", + "population": 45, + "area": 1780, + "areaCode": "0349", + "zipCode": "036000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632662086, + "parentId": 653116632657989, + "name": "平鲁区", + "shortName": null, + "level": 3, + "code": "140603", + "pinyin": "PingLuQu", + "pinyinFirst": "PLQ", + "capital": "井坪镇", + "population": 23, + "area": 2315, + "areaCode": "0349", + "zipCode": "038600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632662087, + "parentId": 653116632657989, + "name": "怀仁市", + "shortName": null, + "level": 3, + "code": "140681", + "pinyin": "HuaiRenShi", + "pinyinFirst": "HRS", + "capital": "云中镇", + "population": 29, + "area": 1234, + "areaCode": "0349", + "zipCode": "038300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632662088, + "parentId": 653116632657989, + "name": "山阴县", + "shortName": null, + "level": 3, + "code": "140621", + "pinyin": "ShanYinXian", + "pinyinFirst": "SYX", + "capital": "岱岳镇", + "population": 24, + "area": 1645, + "areaCode": "0349", + "zipCode": "036900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632662089, + "parentId": 653116632657989, + "name": "应县", + "shortName": null, + "level": 3, + "code": "140622", + "pinyin": "YingXian", + "pinyinFirst": "YX", + "capital": "金城镇", + "population": 31, + "area": 1673, + "areaCode": "0349", + "zipCode": "037600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632662090, + "parentId": 653116632657989, + "name": "右玉县", + "shortName": null, + "level": 3, + "code": "140623", + "pinyin": "YouYuXian", + "pinyinFirst": "YYX", + "capital": "新城镇", + "population": 11, + "area": 1979, + "areaCode": "0349", + "zipCode": "037200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632801349, + "parentId": 653116630548549, + "name": "晋中市", + "shortName": null, + "level": 2, + "code": "140700", + "pinyin": "JinZhongShi", + "pinyinFirst": "JZS", + "capital": "榆次区", + "population": 335, + "area": 16391, + "areaCode": "0354", + "zipCode": "030600", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116632801350, + "parentId": 653116632801349, + "name": "榆次区", + "shortName": null, + "level": 3, + "code": "140702", + "pinyin": "YuCiQu", + "pinyinFirst": "YCQ", + "capital": "新建街道", + "population": 63, + "area": 1318, + "areaCode": "0354", + "zipCode": "030600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632801351, + "parentId": 653116632801349, + "name": "太谷区", + "shortName": null, + "level": 3, + "code": "140703", + "pinyin": "TaiGuQu", + "pinyinFirst": "TGQ", + "capital": "明星镇", + "population": 29, + "area": 1046, + "areaCode": "0354", + "zipCode": "030800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632801352, + "parentId": 653116632801349, + "name": "介休市", + "shortName": null, + "level": 3, + "code": "140781", + "pinyin": "JieXiuShi", + "pinyinFirst": "JXS", + "capital": "北关街道", + "population": 44, + "area": 741, + "areaCode": "0354", + "zipCode": "032000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632805445, + "parentId": 653116632801349, + "name": "榆社县", + "shortName": null, + "level": 3, + "code": "140721", + "pinyin": "YuSheXian", + "pinyinFirst": "YSX", + "capital": "箕城镇", + "population": 15, + "area": 1700, + "areaCode": "0354", + "zipCode": "031800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632805446, + "parentId": 653116632801349, + "name": "左权县", + "shortName": null, + "level": 3, + "code": "140722", + "pinyin": "ZuoQuanXian", + "pinyinFirst": "ZQX", + "capital": "辽阳镇", + "population": 16, + "area": 2022, + "areaCode": "0354", + "zipCode": "032600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632805447, + "parentId": 653116632801349, + "name": "和顺县", + "shortName": null, + "level": 3, + "code": "140723", + "pinyin": "HeShunXian", + "pinyinFirst": "HSX", + "capital": "义兴镇", + "population": 14, + "area": 2194, + "areaCode": "0354", + "zipCode": "032700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632805448, + "parentId": 653116632801349, + "name": "昔阳县", + "shortName": null, + "level": 3, + "code": "140724", + "pinyin": "XiYangXian", + "pinyinFirst": "XYX", + "capital": "乐平镇", + "population": 24, + "area": 1945, + "areaCode": "0354", + "zipCode": "045300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632805449, + "parentId": 653116632801349, + "name": "寿阳县", + "shortName": null, + "level": 3, + "code": "140725", + "pinyin": "ShouYangXian", + "pinyinFirst": "SYX", + "capital": "朝阳镇", + "population": 21, + "area": 2116, + "areaCode": "0354", + "zipCode": "045400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632805450, + "parentId": 653116632801349, + "name": "祁县", + "shortName": null, + "level": 3, + "code": "140727", + "pinyin": "QiXian", + "pinyinFirst": "QX", + "capital": "昭馀镇", + "population": 28, + "area": 853, + "areaCode": "0354", + "zipCode": "030900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632805451, + "parentId": 653116632801349, + "name": "平遥县", + "shortName": null, + "level": 3, + "code": "140728", + "pinyin": "PingYaoXian", + "pinyinFirst": "PYX", + "capital": "古陶镇", + "population": 54, + "area": 1254, + "areaCode": "0354", + "zipCode": "031100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632805452, + "parentId": 653116632801349, + "name": "灵石县", + "shortName": null, + "level": 3, + "code": "140729", + "pinyin": "LingShiXian", + "pinyinFirst": "LSX", + "capital": "翠峰镇", + "population": 26, + "area": 1202, + "areaCode": "0354", + "zipCode": "031300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632969285, + "parentId": 653116630548549, + "name": "运城市", + "shortName": null, + "level": 2, + "code": "140800", + "pinyin": "YunChengShi", + "pinyinFirst": "YCS", + "capital": "盐湖区", + "population": 514, + "area": 14183, + "areaCode": "0359", + "zipCode": "044000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116632973381, + "parentId": 653116632969285, + "name": "盐湖区", + "shortName": null, + "level": 3, + "code": "140802", + "pinyin": "YanHuQu", + "pinyinFirst": "YHQ", + "capital": "中城街道", + "population": 70, + "area": 1205, + "areaCode": "0359", + "zipCode": "044000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632973382, + "parentId": 653116632969285, + "name": "永济市", + "shortName": null, + "level": 3, + "code": "140881", + "pinyin": "YongJiShi", + "pinyinFirst": "YJS", + "capital": "城西街道", + "population": 44, + "area": 1208, + "areaCode": "0359", + "zipCode": "044500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632973383, + "parentId": 653116632969285, + "name": "河津市", + "shortName": null, + "level": 3, + "code": "140882", + "pinyin": "HeJinShi", + "pinyinFirst": "HJS", + "capital": "城区街道", + "population": 40, + "area": 593, + "areaCode": "0359", + "zipCode": "043300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632973384, + "parentId": 653116632969285, + "name": "临猗县", + "shortName": null, + "level": 3, + "code": "140821", + "pinyin": "LinYiXian", + "pinyinFirst": "LYX", + "capital": "猗氏镇", + "population": 56, + "area": 1362, + "areaCode": "0359", + "zipCode": "044100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632973385, + "parentId": 653116632969285, + "name": "万荣县", + "shortName": null, + "level": 3, + "code": "140822", + "pinyin": "WanRongXian", + "pinyinFirst": "WRX", + "capital": "解店镇", + "population": 44, + "area": 1076, + "areaCode": "0359", + "zipCode": "044200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632973386, + "parentId": 653116632969285, + "name": "闻喜县", + "shortName": null, + "level": 3, + "code": "140823", + "pinyin": "WenXiXian", + "pinyinFirst": "WXX", + "capital": "桐城镇", + "population": 40, + "area": 1168, + "areaCode": "0359", + "zipCode": "043800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632973387, + "parentId": 653116632969285, + "name": "稷山县", + "shortName": null, + "level": 3, + "code": "140824", + "pinyin": "JiShanXian", + "pinyinFirst": "JSX", + "capital": "稷峰镇", + "population": 36, + "area": 686, + "areaCode": "0359", + "zipCode": "043200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632973388, + "parentId": 653116632969285, + "name": "新绛县", + "shortName": null, + "level": 3, + "code": "140825", + "pinyin": "XinJiangXian", + "pinyinFirst": "XJX", + "capital": "龙兴镇", + "population": 33, + "area": 597, + "areaCode": "0359", + "zipCode": "043100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632973389, + "parentId": 653116632969285, + "name": "绛县", + "shortName": null, + "level": 3, + "code": "140826", + "pinyin": "JiangXian", + "pinyinFirst": "JX", + "capital": "古绛镇", + "population": 28, + "area": 978, + "areaCode": "0359", + "zipCode": "043600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632973390, + "parentId": 653116632969285, + "name": "垣曲县", + "shortName": null, + "level": 3, + "code": "140827", + "pinyin": "YuanQuXian", + "pinyinFirst": "YQX", + "capital": "新城镇", + "population": 22, + "area": 1609, + "areaCode": "0359", + "zipCode": "043700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632973391, + "parentId": 653116632969285, + "name": "夏县", + "shortName": null, + "level": 3, + "code": "140828", + "pinyin": "XiaXian", + "pinyinFirst": "XX", + "capital": "瑶峰镇", + "population": 37, + "area": 1351, + "areaCode": "0359", + "zipCode": "044400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632973392, + "parentId": 653116632969285, + "name": "平陆县", + "shortName": null, + "level": 3, + "code": "140829", + "pinyin": "PingLuXian", + "pinyinFirst": "PLX", + "capital": "圣人涧镇", + "population": 25, + "area": 1174, + "areaCode": "0359", + "zipCode": "044300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116632973393, + "parentId": 653116632969285, + "name": "芮城县", + "shortName": null, + "level": 3, + "code": "140830", + "pinyin": "RuiChengXian", + "pinyinFirst": "RCX", + "capital": "古魏镇", + "population": 38, + "area": 1176, + "areaCode": "0359", + "zipCode": "044600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633194565, + "parentId": 653116630548549, + "name": "忻州市", + "shortName": null, + "level": 2, + "code": "140900", + "pinyin": "XinZhouShi", + "pinyinFirst": "XZS", + "capital": "忻府区", + "population": 307, + "area": 25154, + "areaCode": "0350", + "zipCode": "034000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116633194566, + "parentId": 653116633194565, + "name": "忻府区", + "shortName": null, + "level": 3, + "code": "140902", + "pinyin": "XinFuQu", + "pinyinFirst": "XFQ", + "capital": "秀容街道", + "population": 55, + "area": 1987, + "areaCode": "0350", + "zipCode": "034000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633194567, + "parentId": 653116633194565, + "name": "原平市", + "shortName": null, + "level": 3, + "code": "140981", + "pinyin": "YuanPingShi", + "pinyinFirst": "YPS", + "capital": "北城街道", + "population": 48, + "area": 2550, + "areaCode": "0350", + "zipCode": "034100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633194568, + "parentId": 653116633194565, + "name": "定襄县", + "shortName": null, + "level": 3, + "code": "140921", + "pinyin": "DingXiangXian", + "pinyinFirst": "DXX", + "capital": "晋昌镇", + "population": 22, + "area": 851, + "areaCode": "0350", + "zipCode": "035400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633194569, + "parentId": 653116633194565, + "name": "五台县", + "shortName": null, + "level": 3, + "code": "140922", + "pinyin": "WuTaiXian", + "pinyinFirst": "WTX", + "capital": "台城镇", + "population": 31, + "area": 2865, + "areaCode": "0350", + "zipCode": "035500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633194570, + "parentId": 653116633194565, + "name": "代县", + "shortName": null, + "level": 3, + "code": "140923", + "pinyin": "DaiXian", + "pinyinFirst": "DX", + "capital": "上馆镇", + "population": 20, + "area": 1729, + "areaCode": "0350", + "zipCode": "034200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633194571, + "parentId": 653116633194565, + "name": "繁峙县", + "shortName": null, + "level": 3, + "code": "140924", + "pinyin": "FanShiXian", + "pinyinFirst": "FSX", + "capital": "繁城镇", + "population": 28, + "area": 2373, + "areaCode": "0350", + "zipCode": "034300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633194572, + "parentId": 653116633194565, + "name": "宁武县", + "shortName": null, + "level": 3, + "code": "140925", + "pinyin": "NingWuXian", + "pinyinFirst": "NWX", + "capital": "凤凰镇", + "population": 16, + "area": 1944, + "areaCode": "0350", + "zipCode": "036700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633194573, + "parentId": 653116633194565, + "name": "静乐县", + "shortName": null, + "level": 3, + "code": "140926", + "pinyin": "JingLeXian", + "pinyinFirst": "JLX", + "capital": "鹅城镇", + "population": 16, + "area": 2037, + "areaCode": "0350", + "zipCode": "035100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633194574, + "parentId": 653116633194565, + "name": "神池县", + "shortName": null, + "level": 3, + "code": "140927", + "pinyin": "ShenChiXian", + "pinyinFirst": "SCX", + "capital": "龙泉镇", + "population": 10, + "area": 1471, + "areaCode": "0350", + "zipCode": "036100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633194575, + "parentId": 653116633194565, + "name": "五寨县", + "shortName": null, + "level": 3, + "code": "140928", + "pinyin": "WuZhaiXian", + "pinyinFirst": "WZX", + "capital": "砚城镇", + "population": 11, + "area": 1388, + "areaCode": "0350", + "zipCode": "036200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633194576, + "parentId": 653116633194565, + "name": "岢岚县", + "shortName": null, + "level": 3, + "code": "140929", + "pinyin": "KeLanXian", + "pinyinFirst": "KLX", + "capital": "岚漪镇", + "population": 8, + "area": 1980, + "areaCode": "0350", + "zipCode": "036300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633194577, + "parentId": 653116633194565, + "name": "河曲县", + "shortName": null, + "level": 3, + "code": "140930", + "pinyin": "HeQuXian", + "pinyinFirst": "HQX", + "capital": "文笔镇", + "population": 14, + "area": 1317, + "areaCode": "0350", + "zipCode": "036500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633194578, + "parentId": 653116633194565, + "name": "保德县", + "shortName": null, + "level": 3, + "code": "140931", + "pinyin": "BaoDeXian", + "pinyinFirst": "BDX", + "capital": "东关镇", + "population": 16, + "area": 995, + "areaCode": "0350", + "zipCode": "036600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633194579, + "parentId": 653116633194565, + "name": "偏关县", + "shortName": null, + "level": 3, + "code": "140932", + "pinyin": "PianGuanXian", + "pinyinFirst": "PGX", + "capital": "新关镇", + "population": 10, + "area": 1667, + "areaCode": "0350", + "zipCode": "036400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633395269, + "parentId": 653116630548549, + "name": "临汾市", + "shortName": null, + "level": 2, + "code": "141000", + "pinyin": "LinFenShi", + "pinyinFirst": "LFS", + "capital": "尧都区", + "population": 431, + "area": 20301, + "areaCode": "0357", + "zipCode": "041000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116633399365, + "parentId": 653116633395269, + "name": "尧都区", + "shortName": null, + "level": 3, + "code": "141002", + "pinyin": "YaoDuQu", + "pinyinFirst": "YDQ", + "capital": "路东街道", + "population": 82, + "area": 1307, + "areaCode": "0357", + "zipCode": "041000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399366, + "parentId": 653116633395269, + "name": "侯马市", + "shortName": null, + "level": 3, + "code": "141081", + "pinyin": "HouMaShi", + "pinyinFirst": "HMS", + "capital": "路东街道", + "population": 24, + "area": 220, + "areaCode": "0357", + "zipCode": "043000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399367, + "parentId": 653116633395269, + "name": "霍州市", + "shortName": null, + "level": 3, + "code": "141082", + "pinyin": "HuoZhouShi", + "pinyinFirst": "HZS", + "capital": "开元街街道", + "population": 31, + "area": 765, + "areaCode": "0357", + "zipCode": "031400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399368, + "parentId": 653116633395269, + "name": "曲沃县", + "shortName": null, + "level": 3, + "code": "141021", + "pinyin": "QuWoXian", + "pinyinFirst": "QWX", + "capital": "乐昌镇", + "population": 23, + "area": 437, + "areaCode": "0357", + "zipCode": "043400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399369, + "parentId": 653116633395269, + "name": "翼城县", + "shortName": null, + "level": 3, + "code": "141022", + "pinyin": "YiChengXian", + "pinyinFirst": "YCX", + "capital": "唐兴镇", + "population": 31, + "area": 1168, + "areaCode": "0357", + "zipCode": "043500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399370, + "parentId": 653116633395269, + "name": "襄汾县", + "shortName": null, + "level": 3, + "code": "141023", + "pinyin": "XiangFenXian", + "pinyinFirst": "XFX", + "capital": "新城镇", + "population": 50, + "area": 1031, + "areaCode": "0357", + "zipCode": "041500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399371, + "parentId": 653116633395269, + "name": "洪洞县", + "shortName": null, + "level": 3, + "code": "141024", + "pinyin": "HongTongXian", + "pinyinFirst": "HTX", + "capital": "大槐树镇", + "population": 77, + "area": 1495, + "areaCode": "0357", + "zipCode": "041600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399372, + "parentId": 653116633395269, + "name": "古县", + "shortName": null, + "level": 3, + "code": "141025", + "pinyin": "GuXian", + "pinyinFirst": "GX", + "capital": "岳阳镇", + "population": 9, + "area": 1196, + "areaCode": "0357", + "zipCode": "042400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399373, + "parentId": 653116633395269, + "name": "安泽县", + "shortName": null, + "level": 3, + "code": "141026", + "pinyin": "AnZeXian", + "pinyinFirst": "AZX", + "capital": "府城镇", + "population": 8, + "area": 1960, + "areaCode": "0357", + "zipCode": "042500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399374, + "parentId": 653116633395269, + "name": "浮山县", + "shortName": null, + "level": 3, + "code": "141027", + "pinyin": "FuShanXian", + "pinyinFirst": "FSX", + "capital": "天坛镇", + "population": 13, + "area": 940, + "areaCode": "0357", + "zipCode": "042600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399375, + "parentId": 653116633395269, + "name": "吉县", + "shortName": null, + "level": 3, + "code": "141028", + "pinyin": "JiXian", + "pinyinFirst": "JX", + "capital": "吉昌镇", + "population": 11, + "area": 1780, + "areaCode": "0357", + "zipCode": "042200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399376, + "parentId": 653116633395269, + "name": "乡宁县", + "shortName": null, + "level": 3, + "code": "141029", + "pinyin": "XiangNingXian", + "pinyinFirst": "XNX", + "capital": "昌宁镇", + "population": 24, + "area": 2025, + "areaCode": "0357", + "zipCode": "042100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399377, + "parentId": 653116633395269, + "name": "大宁县", + "shortName": null, + "level": 3, + "code": "141030", + "pinyin": "DaNingXian", + "pinyinFirst": "DNX", + "capital": "昕水镇", + "population": 7, + "area": 962, + "areaCode": "0357", + "zipCode": "042300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399378, + "parentId": 653116633395269, + "name": "隰县", + "shortName": null, + "level": 3, + "code": "141031", + "pinyin": "XiXian", + "pinyinFirst": "XX", + "capital": "龙泉镇", + "population": 11, + "area": 1413, + "areaCode": "0357", + "zipCode": "041300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399379, + "parentId": 653116633395269, + "name": "永和县", + "shortName": null, + "level": 3, + "code": "141032", + "pinyin": "YongHeXian", + "pinyinFirst": "YHX", + "capital": "芝河镇", + "population": 7, + "area": 1214, + "areaCode": "0357", + "zipCode": "041400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399380, + "parentId": 653116633395269, + "name": "蒲县", + "shortName": null, + "level": 3, + "code": "141033", + "pinyin": "PuXian", + "pinyinFirst": "PX", + "capital": "蒲城镇", + "population": 11, + "area": 1513, + "areaCode": "0357", + "zipCode": "041200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633399381, + "parentId": 653116633395269, + "name": "汾西县", + "shortName": null, + "level": 3, + "code": "141034", + "pinyin": "FenXiXian", + "pinyinFirst": "FXX", + "capital": "永安镇", + "population": 15, + "area": 875, + "areaCode": "0357", + "zipCode": "031500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633661509, + "parentId": 653116630548549, + "name": "吕梁市", + "shortName": null, + "level": 2, + "code": "141100", + "pinyin": "LvLiangShi", + "pinyinFirst": "LLS", + "capital": "离石区", + "population": 393, + "area": 21140, + "areaCode": "0358", + "zipCode": "033000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116633665605, + "parentId": 653116633661509, + "name": "离石区", + "shortName": null, + "level": 3, + "code": "141102", + "pinyin": "LiShiQu", + "pinyinFirst": "LSQ", + "capital": "滨河街道", + "population": 29, + "area": 1324, + "areaCode": "0358", + "zipCode": "033000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633665606, + "parentId": 653116633661509, + "name": "孝义市", + "shortName": null, + "level": 3, + "code": "141181", + "pinyin": "XiaoYiShi", + "pinyinFirst": "XYS", + "capital": "新义街道", + "population": 49, + "area": 938, + "areaCode": "0358", + "zipCode": "032300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633665607, + "parentId": 653116633661509, + "name": "汾阳市", + "shortName": null, + "level": 3, + "code": "141182", + "pinyin": "FenYangShi", + "pinyinFirst": "FYS", + "capital": "太和桥街道", + "population": 43, + "area": 1170, + "areaCode": "0358", + "zipCode": "032200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633665608, + "parentId": 653116633661509, + "name": "文水县", + "shortName": null, + "level": 3, + "code": "141121", + "pinyin": "WenShuiXian", + "pinyinFirst": "WSX", + "capital": "凤城镇", + "population": 45, + "area": 1069, + "areaCode": "0358", + "zipCode": "032100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633665609, + "parentId": 653116633661509, + "name": "交城县", + "shortName": null, + "level": 3, + "code": "141122", + "pinyin": "JiaoChengXian", + "pinyinFirst": "JCX", + "capital": "天宁镇", + "population": 23, + "area": 1826, + "areaCode": "0358", + "zipCode": "030500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633665610, + "parentId": 653116633661509, + "name": "兴县", + "shortName": null, + "level": 3, + "code": "141123", + "pinyin": "XingXian", + "pinyinFirst": "XX", + "capital": "蔚汾镇", + "population": 29, + "area": 3169, + "areaCode": "0358", + "zipCode": "033600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633665611, + "parentId": 653116633661509, + "name": "临县", + "shortName": null, + "level": 3, + "code": "141124", + "pinyin": "LinXian", + "pinyinFirst": "LX", + "capital": "临泉镇", + "population": 66, + "area": 2976, + "areaCode": "0358", + "zipCode": "033200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633665612, + "parentId": 653116633661509, + "name": "柳林县", + "shortName": null, + "level": 3, + "code": "141125", + "pinyin": "LiuLinXian", + "pinyinFirst": "LLX", + "capital": "柳林镇", + "population": 35, + "area": 1288, + "areaCode": "0358", + "zipCode": "033300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633665613, + "parentId": 653116633661509, + "name": "石楼县", + "shortName": null, + "level": 3, + "code": "141126", + "pinyin": "ShiLouXian", + "pinyinFirst": "SLX", + "capital": "灵泉镇", + "population": 12, + "area": 1735, + "areaCode": "0358", + "zipCode": "032500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633665614, + "parentId": 653116633661509, + "name": "岚县", + "shortName": null, + "level": 3, + "code": "141127", + "pinyin": "LanXian", + "pinyinFirst": "LX", + "capital": "东村镇", + "population": 19, + "area": 1513, + "areaCode": "0358", + "zipCode": "033500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633665615, + "parentId": 653116633661509, + "name": "方山县", + "shortName": null, + "level": 3, + "code": "141128", + "pinyin": "FangShanXian", + "pinyinFirst": "FSX", + "capital": "圪洞镇", + "population": 16, + "area": 1433, + "areaCode": "0358", + "zipCode": "033100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633665616, + "parentId": 653116633661509, + "name": "中阳县", + "shortName": null, + "level": 3, + "code": "141129", + "pinyin": "ZhongYangXian", + "pinyinFirst": "ZYX", + "capital": "宁乡镇", + "population": 16, + "area": 1439, + "areaCode": "0358", + "zipCode": "033400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633665617, + "parentId": 653116633661509, + "name": "交口县", + "shortName": null, + "level": 3, + "code": "141130", + "pinyin": "JiaoKouXian", + "pinyinFirst": "JKX", + "capital": "水头镇", + "population": 12, + "area": 1260, + "areaCode": "0358", + "zipCode": "032400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:24", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116633903173, + "parentId": 0, + "name": "内蒙古自治区", + "shortName": "内蒙古", + "level": 1, + "code": "150000", + "pinyin": "NeiMengGuZiZhiQu", + "pinyinFirst": "NMGZZQ", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116635877445, + "parentId": 653116633903173, + "name": "呼和浩特市", + "shortName": null, + "level": 2, + "code": "150100", + "pinyin": "HuHeHaoTeShi", + "pinyinFirst": "HHHTS", + "capital": "新城区", + "population": 249, + "area": 17420, + "areaCode": "0471", + "zipCode": "010000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116635881541, + "parentId": 653116635877445, + "name": "新城区", + "shortName": null, + "level": 3, + "code": "150102", + "pinyin": "XinChengQu", + "pinyinFirst": "XCQ", + "capital": "成吉思汗大街街道", + "population": 43, + "area": 661, + "areaCode": "0471", + "zipCode": "010050", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635881542, + "parentId": 653116635877445, + "name": "回民区", + "shortName": null, + "level": 3, + "code": "150103", + "pinyin": "HuiMinQu", + "pinyinFirst": "HMQ", + "capital": "钢铁路街道", + "population": 24, + "area": 194, + "areaCode": "0471", + "zipCode": "010030", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635881543, + "parentId": 653116635877445, + "name": "玉泉区", + "shortName": null, + "level": 3, + "code": "150104", + "pinyin": "YuQuanQu", + "pinyinFirst": "YQQ", + "capital": "昭君路街道", + "population": 20, + "area": 207, + "areaCode": "0471", + "zipCode": "010070", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635881544, + "parentId": 653116635877445, + "name": "赛罕区", + "shortName": null, + "level": 3, + "code": "150105", + "pinyin": "SaiHanQu", + "pinyinFirst": "SHQ", + "capital": "昭乌达路街道", + "population": 54, + "area": 1025, + "areaCode": "0471", + "zipCode": "010020", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635881545, + "parentId": 653116635877445, + "name": "托克托县", + "shortName": null, + "level": 3, + "code": "150122", + "pinyin": "TuoKeTuoXian", + "pinyinFirst": "TKTX", + "capital": "双河镇", + "population": 20, + "area": 1417, + "areaCode": "0471", + "zipCode": "010200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635885637, + "parentId": 653116635877445, + "name": "和林格尔县", + "shortName": null, + "level": 3, + "code": "150123", + "pinyin": "HeLinGeErXian", + "pinyinFirst": "HLGEX", + "capital": "城关镇", + "population": 20, + "area": 3448, + "areaCode": "0471", + "zipCode": "011500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635885638, + "parentId": 653116635877445, + "name": "清水河县", + "shortName": null, + "level": 3, + "code": "150124", + "pinyin": "QingShuiHeXian", + "pinyinFirst": "QSHX", + "capital": "城关镇", + "population": 14, + "area": 2818, + "areaCode": "0471", + "zipCode": "011600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635885639, + "parentId": 653116635877445, + "name": "武川县", + "shortName": null, + "level": 3, + "code": "150125", + "pinyin": "WuChuanXian", + "pinyinFirst": "WCX", + "capital": "可可以力更镇", + "population": 17, + "area": 4885, + "areaCode": "0471", + "zipCode": "011700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635885640, + "parentId": 653116635877445, + "name": "土默特左旗", + "shortName": null, + "level": 3, + "code": "150121", + "pinyin": "TuMoTeZuoQi", + "pinyinFirst": "TMTZQ", + "capital": "察素齐镇", + "population": 36, + "area": 2765, + "areaCode": "0471", + "zipCode": "010100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635975749, + "parentId": 653116633903173, + "name": "包头市", + "shortName": null, + "level": 2, + "code": "150200", + "pinyin": "BaoTouShi", + "pinyinFirst": "BTS", + "capital": "昆都仑区", + "population": 225, + "area": 27768, + "areaCode": "0472", + "zipCode": "014000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116635979845, + "parentId": 653116635975749, + "name": "昆都仑区", + "shortName": null, + "level": 3, + "code": "150203", + "pinyin": "KunDuLunQu", + "pinyinFirst": "KDLQ", + "capital": "少先路街道", + "population": 52, + "area": 301, + "areaCode": "0472", + "zipCode": "014010", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635979846, + "parentId": 653116635975749, + "name": "东河区", + "shortName": null, + "level": 3, + "code": "150202", + "pinyin": "DongHeQu", + "pinyinFirst": "DHQ", + "capital": "河东街道", + "population": 41, + "area": 470, + "areaCode": "0472", + "zipCode": "014040", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635979847, + "parentId": 653116635975749, + "name": "青山区", + "shortName": null, + "level": 3, + "code": "150204", + "pinyin": "QingShanQu", + "pinyinFirst": "QSQ", + "capital": "青福镇", + "population": 41, + "area": 280, + "areaCode": "0472", + "zipCode": "014030", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635979848, + "parentId": 653116635975749, + "name": "石拐区", + "shortName": null, + "level": 3, + "code": "150205", + "pinyin": "ShiGuaiQu", + "pinyinFirst": "SGQ", + "capital": "石拐街道", + "population": 5, + "area": 761, + "areaCode": "0472", + "zipCode": "014070", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635979849, + "parentId": 653116635975749, + "name": "白云鄂博矿区", + "shortName": null, + "level": 3, + "code": "150206", + "pinyin": "BaiYunEBoKuangQu", + "pinyinFirst": "BYEBKQ", + "capital": "通阳街道", + "population": 2, + "area": 303, + "areaCode": "0472", + "zipCode": "014080", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635979850, + "parentId": 653116635975749, + "name": "九原区", + "shortName": null, + "level": 3, + "code": "150207", + "pinyin": "JiuYuanQu", + "pinyinFirst": "JYQ", + "capital": "沙河街道", + "population": 17, + "area": 850, + "areaCode": "0472", + "zipCode": "014060", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635983941, + "parentId": 653116635975749, + "name": "固阳县", + "shortName": null, + "level": 3, + "code": "150222", + "pinyin": "GuYangXian", + "pinyinFirst": "GYX", + "capital": "金山镇", + "population": 20, + "area": 5025, + "areaCode": "0472", + "zipCode": "014200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635983942, + "parentId": 653116635975749, + "name": "土默特右旗", + "shortName": null, + "level": 3, + "code": "150221", + "pinyin": "TuMoTeYouQi", + "pinyinFirst": "TMTYQ", + "capital": "萨拉齐镇", + "population": 36, + "area": 2368, + "areaCode": "0472", + "zipCode": "014100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116635983943, + "parentId": 653116635975749, + "name": "达尔罕茂明安联合旗", + "shortName": null, + "level": 3, + "code": "150223", + "pinyin": "DaErHanMaoMingAnLianHeQi", + "pinyinFirst": "DEHMMALHQ", + "capital": "百灵庙镇", + "population": 11, + "area": 17410, + "areaCode": "0472", + "zipCode": "014500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636074053, + "parentId": 653116633903173, + "name": "乌海市", + "shortName": null, + "level": 2, + "code": "150300", + "pinyin": "WuHaiShi", + "pinyinFirst": "WHS", + "capital": "海勃湾区", + "population": 44, + "area": 1754, + "areaCode": "0473", + "zipCode": "016000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116636078149, + "parentId": 653116636074053, + "name": "海勃湾区", + "shortName": null, + "level": 3, + "code": "150302", + "pinyin": "HaiBoWanQu", + "pinyinFirst": "HBWQ", + "capital": "凤凰岭街道", + "population": 24, + "area": 529, + "areaCode": "0473", + "zipCode": "016000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636078150, + "parentId": 653116636074053, + "name": "海南区", + "shortName": null, + "level": 3, + "code": "150303", + "pinyin": "HaiNanQu", + "pinyinFirst": "HNQ", + "capital": "拉僧仲街道", + "population": 8, + "area": 1005, + "areaCode": "0473", + "zipCode": "016030", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636078151, + "parentId": 653116636074053, + "name": "乌达区", + "shortName": null, + "level": 3, + "code": "150304", + "pinyin": "WuDaQu", + "pinyinFirst": "WDQ", + "capital": "滨海街道", + "population": 11, + "area": 220, + "areaCode": "0473", + "zipCode": "016040", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636180549, + "parentId": 653116633903173, + "name": "赤峰市", + "shortName": null, + "level": 2, + "code": "150400", + "pinyin": "ChiFengShi", + "pinyinFirst": "CFS", + "capital": "松山区", + "population": 460, + "area": 90021, + "areaCode": "0476", + "zipCode": "024000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116636184645, + "parentId": 653116636180549, + "name": "红山区", + "shortName": null, + "level": 3, + "code": "150402", + "pinyin": "HongShanQu", + "pinyinFirst": "HSQ", + "capital": "站前街道", + "population": 35, + "area": 506, + "areaCode": "0476", + "zipCode": "024000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636184646, + "parentId": 653116636180549, + "name": "元宝山区", + "shortName": null, + "level": 3, + "code": "150403", + "pinyin": "YuanBaoShanQu", + "pinyinFirst": "YBSQ", + "capital": "平庄城区街道", + "population": 32, + "area": 953, + "areaCode": "0476", + "zipCode": "024076", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636184647, + "parentId": 653116636180549, + "name": "松山区", + "shortName": null, + "level": 3, + "code": "150404", + "pinyin": "SongShanQu", + "pinyinFirst": "SSQ", + "capital": "振兴街道", + "population": 61, + "area": 5618, + "areaCode": "0476", + "zipCode": "024005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636184648, + "parentId": 653116636180549, + "name": "林西县", + "shortName": null, + "level": 3, + "code": "150424", + "pinyin": "LinXiXian", + "pinyinFirst": "LXX", + "capital": "林西镇", + "population": 23, + "area": 3933, + "areaCode": "0476", + "zipCode": "025250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636184649, + "parentId": 653116636180549, + "name": "宁城县", + "shortName": null, + "level": 3, + "code": "150429", + "pinyin": "NingChengXian", + "pinyinFirst": "NCX", + "capital": "天义镇", + "population": 61, + "area": 4305, + "areaCode": "0476", + "zipCode": "024200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636184650, + "parentId": 653116636180549, + "name": "阿鲁科尔沁旗", + "shortName": null, + "level": 3, + "code": "150421", + "pinyin": "ALuKeErQinQi", + "pinyinFirst": "ALKEQQ", + "capital": "天山镇", + "population": 29, + "area": 14555, + "areaCode": "0476", + "zipCode": "025550", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636184651, + "parentId": 653116636180549, + "name": "巴林左旗", + "shortName": null, + "level": 3, + "code": "150422", + "pinyin": "BaLinZuoQi", + "pinyinFirst": "BLZQ", + "capital": "林东镇", + "population": 34, + "area": 6459, + "areaCode": "0476", + "zipCode": "025450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636184652, + "parentId": 653116636180549, + "name": "巴林右旗", + "shortName": null, + "level": 3, + "code": "150423", + "pinyin": "BaLinYouQi", + "pinyinFirst": "BLYQ", + "capital": "大板镇", + "population": 18, + "area": 9837, + "areaCode": "0476", + "zipCode": "025150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636184653, + "parentId": 653116636180549, + "name": "克什克腾旗", + "shortName": null, + "level": 3, + "code": "150425", + "pinyin": "KeShenKeTengQi", + "pinyinFirst": "KSKTQ", + "capital": "经棚镇", + "population": 25, + "area": 20673, + "areaCode": "0476", + "zipCode": "025350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636184654, + "parentId": 653116636180549, + "name": "翁牛特旗", + "shortName": null, + "level": 3, + "code": "150426", + "pinyin": "WengNiuTeQi", + "pinyinFirst": "WNTQ", + "capital": "乌丹镇", + "population": 48, + "area": 11882, + "areaCode": "0476", + "zipCode": "024500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636184655, + "parentId": 653116636180549, + "name": "喀喇沁旗", + "shortName": null, + "level": 3, + "code": "150428", + "pinyin": "KaLaQinQi", + "pinyinFirst": "KLQQ", + "capital": "锦山镇", + "population": 35, + "area": 3006, + "areaCode": "0476", + "zipCode": "024400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636184656, + "parentId": 653116636180549, + "name": "敖汉旗", + "shortName": null, + "level": 3, + "code": "150430", + "pinyin": "AoHanQi", + "pinyinFirst": "AHQ", + "capital": "新惠镇", + "population": 60, + "area": 8294, + "areaCode": "0476", + "zipCode": "024300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636295237, + "parentId": 653116633903173, + "name": "通辽市", + "shortName": null, + "level": 2, + "code": "150500", + "pinyin": "TongLiaoShi", + "pinyinFirst": "TLS", + "capital": "科尔沁区", + "population": 317, + "area": 58863, + "areaCode": "0475", + "zipCode": "028000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116636295238, + "parentId": 653116636295237, + "name": "科尔沁区", + "shortName": null, + "level": 3, + "code": "150502", + "pinyin": "KeErQinQu", + "pinyinFirst": "KEQQ", + "capital": "西门街道", + "population": 84, + "area": 3516, + "areaCode": "0475", + "zipCode": "028000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636295239, + "parentId": 653116636295237, + "name": "霍林郭勒市", + "shortName": null, + "level": 3, + "code": "150581", + "pinyin": "HuoLinGuoLeShi", + "pinyinFirst": "HLGLS", + "capital": "莫斯台街道", + "population": 8, + "area": 585, + "areaCode": "0475", + "zipCode": "029200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636295240, + "parentId": 653116636295237, + "name": "开鲁县", + "shortName": null, + "level": 3, + "code": "150523", + "pinyin": "KaiLuXian", + "pinyinFirst": "KLX", + "capital": "开鲁镇", + "population": 39, + "area": 4353, + "areaCode": "0475", + "zipCode": "028400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636295241, + "parentId": 653116636295237, + "name": "库伦旗", + "shortName": null, + "level": 3, + "code": "150524", + "pinyin": "KuLunQi", + "pinyinFirst": "KLQ", + "capital": "库伦镇", + "population": 18, + "area": 4709, + "areaCode": "0475", + "zipCode": "028200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636295242, + "parentId": 653116636295237, + "name": "奈曼旗", + "shortName": null, + "level": 3, + "code": "150525", + "pinyin": "NaiManQi", + "pinyinFirst": "NMQ", + "capital": "大沁他拉镇", + "population": 45, + "area": 8135, + "areaCode": "0475", + "zipCode": "028300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636295243, + "parentId": 653116636295237, + "name": "扎鲁特旗", + "shortName": null, + "level": 3, + "code": "150526", + "pinyin": "ZaLuTeQi", + "pinyinFirst": "ZLTQ", + "capital": "鲁北镇", + "population": 31, + "area": 16492, + "areaCode": "0475", + "zipCode": "029100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636295244, + "parentId": 653116636295237, + "name": "科尔沁左翼中旗", + "shortName": null, + "level": 3, + "code": "150521", + "pinyin": "KeErQinZuoYiZhongQi", + "pinyinFirst": "KEQZYZQ", + "capital": "保康镇", + "population": 52, + "area": 9573, + "areaCode": "0475", + "zipCode": "029300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636295245, + "parentId": 653116636295237, + "name": "科尔沁左翼后旗", + "shortName": null, + "level": 3, + "code": "150522", + "pinyin": "KeErQinZuoYiHouQi", + "pinyinFirst": "KEQZYHQ", + "capital": "甘旗卡镇", + "population": 40, + "area": 11500, + "areaCode": "0475", + "zipCode": "028100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636414021, + "parentId": 653116633903173, + "name": "鄂尔多斯市", + "shortName": null, + "level": 2, + "code": "150600", + "pinyin": "EErDuoSiShi", + "pinyinFirst": "EEDSS", + "capital": "康巴什区", + "population": 164, + "area": 87123, + "areaCode": "0477", + "zipCode": "017000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116636418117, + "parentId": 653116636414021, + "name": "康巴什区", + "shortName": null, + "level": 3, + "code": "150603", + "pinyin": "KangBaShiQu", + "pinyinFirst": "KBSQ", + "capital": "滨河街道", + "population": 4, + "area": 373, + "areaCode": "0477", + "zipCode": "017010", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636418118, + "parentId": 653116636414021, + "name": "东胜区", + "shortName": null, + "level": 3, + "code": "150602", + "pinyin": "DongShengQu", + "pinyinFirst": "DSQ", + "capital": "天骄街道", + "population": 27, + "area": 2146, + "areaCode": "0477", + "zipCode": "017000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636418119, + "parentId": 653116636414021, + "name": "达拉特旗", + "shortName": null, + "level": 3, + "code": "150621", + "pinyin": "DaLaTeQi", + "pinyinFirst": "DLTQ", + "capital": "工业街道", + "population": 37, + "area": 8241, + "areaCode": "0477", + "zipCode": "014300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636418120, + "parentId": 653116636414021, + "name": "准格尔旗", + "shortName": null, + "level": 3, + "code": "150622", + "pinyin": "ZhunGeErQi", + "pinyinFirst": "ZGEQ", + "capital": "兴隆街道", + "population": 33, + "area": 7692, + "areaCode": "0477", + "zipCode": "017100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636418121, + "parentId": 653116636414021, + "name": "鄂托克前旗", + "shortName": null, + "level": 3, + "code": "150623", + "pinyin": "ETuoKeQianQi", + "pinyinFirst": "ETKQQ", + "capital": "敖勒召其镇", + "population": 8, + "area": 12221, + "areaCode": "0477", + "zipCode": "016200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636418122, + "parentId": 653116636414021, + "name": "鄂托克旗", + "shortName": null, + "level": 3, + "code": "150624", + "pinyin": "ETuoKeQi", + "pinyinFirst": "ETKQ", + "capital": "乌兰镇", + "population": 10, + "area": 20367, + "areaCode": "0477", + "zipCode": "016100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636418123, + "parentId": 653116636414021, + "name": "杭锦旗", + "shortName": null, + "level": 3, + "code": "150625", + "pinyin": "HangJinQi", + "pinyinFirst": "HJQ", + "capital": "锡尼镇", + "population": 14, + "area": 18913, + "areaCode": "0477", + "zipCode": "017400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636418124, + "parentId": 653116636414021, + "name": "乌审旗", + "shortName": null, + "level": 3, + "code": "150626", + "pinyin": "WuShenQi", + "pinyinFirst": "WSQ", + "capital": "嘎鲁图镇", + "population": 12, + "area": 11674, + "areaCode": "0477", + "zipCode": "017300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636418125, + "parentId": 653116636414021, + "name": "伊金霍洛旗", + "shortName": null, + "level": 3, + "code": "150627", + "pinyin": "YiJinHuoLuoQi", + "pinyinFirst": "YJHLQ", + "capital": "阿勒腾席热镇", + "population": 18, + "area": 5496, + "areaCode": "0477", + "zipCode": "017200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636549189, + "parentId": 653116633903173, + "name": "呼伦贝尔市", + "shortName": null, + "level": 2, + "code": "150700", + "pinyin": "HuLunBeiErShi", + "pinyinFirst": "HLBES", + "capital": "海拉尔区", + "population": 255, + "area": 260239, + "areaCode": "0470", + "zipCode": "021000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116636553285, + "parentId": 653116636549189, + "name": "海拉尔区", + "shortName": null, + "level": 3, + "code": "150702", + "pinyin": "HaiLaErQu", + "pinyinFirst": "HLEQ", + "capital": "正阳街道", + "population": 29, + "area": 1440, + "areaCode": "0470", + "zipCode": "021000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636553286, + "parentId": 653116636549189, + "name": "扎赉诺尔区", + "shortName": null, + "level": 3, + "code": "150703", + "pinyin": "ZaLaiNuoErQu", + "pinyinFirst": "ZLNEQ", + "capital": "第三街道", + "population": 9, + "area": 270, + "areaCode": "0470", + "zipCode": "021410", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636553287, + "parentId": 653116636549189, + "name": "满洲里市", + "shortName": null, + "level": 3, + "code": "150781", + "pinyin": "ManZhouLiShi", + "pinyinFirst": "MZLS", + "capital": "东山街道", + "population": 9, + "area": 464, + "areaCode": "0470", + "zipCode": "021400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636553288, + "parentId": 653116636549189, + "name": "牙克石市", + "shortName": null, + "level": 3, + "code": "150782", + "pinyin": "YaKeShiShi", + "pinyinFirst": "YKSS", + "capital": "新工街道", + "population": 32, + "area": 27590, + "areaCode": "0470", + "zipCode": "022150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636553289, + "parentId": 653116636549189, + "name": "扎兰屯市", + "shortName": null, + "level": 3, + "code": "150783", + "pinyin": "ZaLanTunShi", + "pinyinFirst": "ZLTS", + "capital": "兴华街道", + "population": 40, + "area": 16785, + "areaCode": "0470", + "zipCode": "162650", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636553290, + "parentId": 653116636549189, + "name": "额尔古纳市", + "shortName": null, + "level": 3, + "code": "150784", + "pinyin": "EErGuNaShi", + "pinyinFirst": "EEGNS", + "capital": "拉布大林街道", + "population": 8, + "area": 28958, + "areaCode": "0470", + "zipCode": "022250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636553291, + "parentId": 653116636549189, + "name": "根河市", + "shortName": null, + "level": 3, + "code": "150785", + "pinyin": "GenHeShi", + "pinyinFirst": "GHS", + "capital": "河西街道", + "population": 13, + "area": 20012, + "areaCode": "0470", + "zipCode": "022350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636553292, + "parentId": 653116636549189, + "name": "阿荣旗", + "shortName": null, + "level": 3, + "code": "150721", + "pinyin": "ARongQi", + "pinyinFirst": "ARQ", + "capital": "那吉镇", + "population": 32, + "area": 11075, + "areaCode": "0470", + "zipCode": "162750", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636553293, + "parentId": 653116636549189, + "name": "陈巴尔虎旗", + "shortName": null, + "level": 3, + "code": "150725", + "pinyin": "ChenBaErHuQi", + "pinyinFirst": "CBEHQ", + "capital": "巴彦库仁镇", + "population": 5, + "area": 17458, + "areaCode": "0470", + "zipCode": "021500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636553294, + "parentId": 653116636549189, + "name": "新巴尔虎左旗", + "shortName": null, + "level": 3, + "code": "150726", + "pinyin": "XinBaErHuZuoQi", + "pinyinFirst": "XBEHZQ", + "capital": "阿木古郎镇", + "population": 4, + "area": 22000, + "areaCode": "0470", + "zipCode": "021200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636553295, + "parentId": 653116636549189, + "name": "新巴尔虎右旗", + "shortName": null, + "level": 3, + "code": "150727", + "pinyin": "XinBaErHuYouQi", + "pinyinFirst": "XBEHYQ", + "capital": "阿拉坦额莫勒镇", + "population": 4, + "area": 24840, + "areaCode": "0470", + "zipCode": "021300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636553296, + "parentId": 653116636549189, + "name": "莫力达瓦达斡尔族自治旗", + "shortName": null, + "level": 3, + "code": "150722", + "pinyin": "MoLiDaWaDaWoErZuZiZhiQi", + "pinyinFirst": "MLDWDWEZZZQ", + "capital": "尼尔基镇", + "population": 32, + "area": 10356, + "areaCode": "0470", + "zipCode": "162850", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636553297, + "parentId": 653116636549189, + "name": "鄂伦春自治旗", + "shortName": null, + "level": 3, + "code": "150723", + "pinyin": "ELunChunZiZhiQi", + "pinyinFirst": "ELCZZQ", + "capital": "阿里河镇", + "population": 24, + "area": 59880, + "areaCode": "0470", + "zipCode": "165450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636553298, + "parentId": 653116636549189, + "name": "鄂温克族自治旗", + "shortName": null, + "level": 3, + "code": "150724", + "pinyin": "EWenKeZuZiZhiQi", + "pinyinFirst": "EWKZZZQ", + "capital": "巴彦托海镇", + "population": 14, + "area": 19111, + "areaCode": "0470", + "zipCode": "021100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636692549, + "parentId": 653116633903173, + "name": "巴彦淖尔市", + "shortName": null, + "level": 2, + "code": "150800", + "pinyin": "BaYanNaoErShi", + "pinyinFirst": "BYNES", + "capital": "临河区", + "population": 174, + "area": 65139, + "areaCode": "0478", + "zipCode": "015000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116636692550, + "parentId": 653116636692549, + "name": "临河区", + "shortName": null, + "level": 3, + "code": "150802", + "pinyin": "LinHeQu", + "pinyinFirst": "LHQ", + "capital": "解放街道", + "population": 52, + "area": 2333, + "areaCode": "0478", + "zipCode": "015001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636696645, + "parentId": 653116636692549, + "name": "五原县", + "shortName": null, + "level": 3, + "code": "150821", + "pinyin": "WuYuanXian", + "pinyinFirst": "WYX", + "capital": "隆兴昌镇", + "population": 28, + "area": 2503, + "areaCode": "0478", + "zipCode": "015100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636696646, + "parentId": 653116636692549, + "name": "磴口县", + "shortName": null, + "level": 3, + "code": "150822", + "pinyin": "DengKouXian", + "pinyinFirst": "DKX", + "capital": "巴彦高勒镇", + "population": 11, + "area": 3676, + "areaCode": "0478", + "zipCode": "015200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636696647, + "parentId": 653116636692549, + "name": "乌拉特前旗", + "shortName": null, + "level": 3, + "code": "150823", + "pinyin": "WuLaTeQianQi", + "pinyinFirst": "WLTQQ", + "capital": "乌拉山镇", + "population": 33, + "area": 7482, + "areaCode": "0478", + "zipCode": "014400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636696648, + "parentId": 653116636692549, + "name": "乌拉特中旗", + "shortName": null, + "level": 3, + "code": "150824", + "pinyin": "WuLaTeZhongQi", + "pinyinFirst": "WLTZQ", + "capital": "海流图镇", + "population": 14, + "area": 22868, + "areaCode": "0478", + "zipCode": "015300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636696649, + "parentId": 653116636692549, + "name": "乌拉特后旗", + "shortName": null, + "level": 3, + "code": "150825", + "pinyin": "WuLaTeHouQi", + "pinyinFirst": "WLTHQ", + "capital": "巴音宝力格镇", + "population": 6, + "area": 24525, + "areaCode": "0478", + "zipCode": "015500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636696650, + "parentId": 653116636692549, + "name": "杭锦后旗", + "shortName": null, + "level": 3, + "code": "150826", + "pinyin": "HangJinHouQi", + "pinyinFirst": "HJHQ", + "capital": "陕坝镇", + "population": 29, + "area": 1752, + "areaCode": "0478", + "zipCode": "015400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636880965, + "parentId": 653116633903173, + "name": "乌兰察布市", + "shortName": null, + "level": 2, + "code": "150900", + "pinyin": "WuLanChaBuShi", + "pinyinFirst": "WLCBS", + "capital": "集宁区", + "population": 269, + "area": 54606, + "areaCode": "0474", + "zipCode": "012000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116636880966, + "parentId": 653116636880965, + "name": "集宁区", + "shortName": null, + "level": 3, + "code": "150902", + "pinyin": "JiNingQu", + "pinyinFirst": "JNQ", + "capital": "新体路街道", + "population": 32, + "area": 405, + "areaCode": "0474", + "zipCode": "012000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636880967, + "parentId": 653116636880965, + "name": "丰镇市", + "shortName": null, + "level": 3, + "code": "150981", + "pinyin": "FengZhenShi", + "pinyinFirst": "FZS", + "capital": "北城区街道", + "population": 31, + "area": 2722, + "areaCode": "0474", + "zipCode": "012100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636880968, + "parentId": 653116636880965, + "name": "卓资县", + "shortName": null, + "level": 3, + "code": "150921", + "pinyin": "ZhuoZiXian", + "pinyinFirst": "ZZX", + "capital": "卓资山镇", + "population": 20, + "area": 3119, + "areaCode": "0474", + "zipCode": "012300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636880969, + "parentId": 653116636880965, + "name": "化德县", + "shortName": null, + "level": 3, + "code": "150922", + "pinyin": "HuaDeXian", + "pinyinFirst": "HDX", + "capital": "长顺镇", + "population": 16, + "area": 2534, + "areaCode": "0474", + "zipCode": "013350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636880970, + "parentId": 653116636880965, + "name": "商都县", + "shortName": null, + "level": 3, + "code": "150923", + "pinyin": "ShangDuXian", + "pinyinFirst": "SDX", + "capital": "七台镇", + "population": 33, + "area": 4284, + "areaCode": "0474", + "zipCode": "013450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636880971, + "parentId": 653116636880965, + "name": "兴和县", + "shortName": null, + "level": 3, + "code": "150924", + "pinyin": "XingHeXian", + "pinyinFirst": "XHX", + "capital": "城关镇", + "population": 32, + "area": 3518, + "areaCode": "0474", + "zipCode": "013650", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636880972, + "parentId": 653116636880965, + "name": "凉城县", + "shortName": null, + "level": 3, + "code": "150925", + "pinyin": "LiangChengXian", + "pinyinFirst": "LCX", + "capital": "鸿茅镇", + "population": 23, + "area": 3451, + "areaCode": "0474", + "zipCode": "013750", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636880973, + "parentId": 653116636880965, + "name": "察哈尔右翼前旗", + "shortName": null, + "level": 3, + "code": "150926", + "pinyin": "ChaHaErYouYiQianQi", + "pinyinFirst": "CHEYYQQ", + "capital": "土贵乌拉镇", + "population": 21, + "area": 2433, + "areaCode": "0474", + "zipCode": "012200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636880974, + "parentId": 653116636880965, + "name": "察哈尔右翼中旗", + "shortName": null, + "level": 3, + "code": "150927", + "pinyin": "ChaHaErYouYiZhongQi", + "pinyinFirst": "CHEYYZQ", + "capital": "科布尔镇", + "population": 20, + "area": 4194, + "areaCode": "0474", + "zipCode": "013550", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636880975, + "parentId": 653116636880965, + "name": "察哈尔右翼后旗", + "shortName": null, + "level": 3, + "code": "150928", + "pinyin": "ChaHaErYouYiHouQi", + "pinyinFirst": "CHEYYHQ", + "capital": "白音察干镇", + "population": 20, + "area": 3910, + "areaCode": "0474", + "zipCode": "012400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116636880976, + "parentId": 653116636880965, + "name": "四子王旗", + "shortName": null, + "level": 3, + "code": "150929", + "pinyin": "SiZiWangQi", + "pinyinFirst": "SZWQ", + "capital": "乌兰花镇", + "population": 21, + "area": 24016, + "areaCode": "0474", + "zipCode": "011800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116637057093, + "parentId": 653116633903173, + "name": "兴安盟", + "shortName": null, + "level": 2, + "code": "152200", + "pinyin": "XingAnMeng", + "pinyinFirst": "XAM", + "capital": "乌兰浩特市", + "population": 163, + "area": 58385, + "areaCode": "0482", + "zipCode": "137400", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116637061189, + "parentId": 653116637057093, + "name": "乌兰浩特市", + "shortName": null, + "level": 3, + "code": "152201", + "pinyin": "WuLanHaoTeShi", + "pinyinFirst": "WLHTS", + "capital": "和平街道", + "population": 32, + "area": 2354, + "areaCode": "0482", + "zipCode": "137400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637061190, + "parentId": 653116637057093, + "name": "阿尔山市", + "shortName": null, + "level": 3, + "code": "152202", + "pinyin": "AErShanShi", + "pinyinFirst": "AESS", + "capital": "温泉街道", + "population": 4, + "area": 7409, + "areaCode": "0482", + "zipCode": "137800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637061191, + "parentId": 653116637057093, + "name": "突泉县", + "shortName": null, + "level": 3, + "code": "152224", + "pinyin": "TuQuanXian", + "pinyinFirst": "TQX", + "capital": "突泉镇", + "population": 30, + "area": 4890, + "areaCode": "0482", + "zipCode": "137500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637061192, + "parentId": 653116637057093, + "name": "科尔沁右翼前旗", + "shortName": null, + "level": 3, + "code": "152221", + "pinyin": "KeErQinYouYiQianQi", + "pinyinFirst": "KEQYYQQ", + "capital": "科尔沁镇", + "population": 33, + "area": 16964, + "areaCode": "0482", + "zipCode": "137713", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637061193, + "parentId": 653116637057093, + "name": "科尔沁右翼中旗", + "shortName": null, + "level": 3, + "code": "152222", + "pinyin": "KeErQinYouYiZhongQi", + "pinyinFirst": "KEQYYZQ", + "capital": "巴彦呼舒镇", + "population": 25, + "area": 15613, + "areaCode": "0482", + "zipCode": "029400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637061194, + "parentId": 653116637057093, + "name": "扎赉特旗", + "shortName": null, + "level": 3, + "code": "152223", + "pinyin": "ZaLaiTeQi", + "pinyinFirst": "ZLTQ", + "capital": "音德尔镇", + "population": 39, + "area": 11155, + "areaCode": "0482", + "zipCode": "137600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116637249605, + "parentId": 653116633903173, + "name": "锡林郭勒盟", + "shortName": null, + "level": 2, + "code": "152500", + "pinyin": "XiLinGuoLeMeng", + "pinyinFirst": "XLGLM", + "capital": "锡林浩特市", + "population": 104, + "area": 199885, + "areaCode": "0479", + "zipCode": "026000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116637253701, + "parentId": 653116637249605, + "name": "锡林浩特市", + "shortName": null, + "level": 3, + "code": "152502", + "pinyin": "XiLinHaoTeShi", + "pinyinFirst": "XLHTS", + "capital": "希日塔拉街道", + "population": 20, + "area": 14778, + "areaCode": "0479", + "zipCode": "026000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637253702, + "parentId": 653116637249605, + "name": "二连浩特市", + "shortName": null, + "level": 3, + "code": "152501", + "pinyin": "ErLianHaoTeShi", + "pinyinFirst": "ELHTS", + "capital": "乌兰街道", + "population": 4, + "area": 4015, + "areaCode": "0479", + "zipCode": "011100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637253703, + "parentId": 653116637249605, + "name": "多伦县", + "shortName": null, + "level": 3, + "code": "152531", + "pinyin": "DuoLunXian", + "pinyinFirst": "DLX", + "capital": "多伦诺尔镇", + "population": 11, + "area": 3864, + "areaCode": "0479", + "zipCode": "027300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637253704, + "parentId": 653116637249605, + "name": "阿巴嘎旗", + "shortName": null, + "level": 3, + "code": "152522", + "pinyin": "ABaGaQi", + "pinyinFirst": "ABGQ", + "capital": "别力古台镇", + "population": 4, + "area": 27476, + "areaCode": "0479", + "zipCode": "011400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637253705, + "parentId": 653116637249605, + "name": "苏尼特左旗", + "shortName": null, + "level": 3, + "code": "152523", + "pinyin": "SuNiTeZuoQi", + "pinyinFirst": "SNTZQ", + "capital": "满都拉图镇", + "population": 3, + "area": 34240, + "areaCode": "0479", + "zipCode": "011300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637253706, + "parentId": 653116637249605, + "name": "苏尼特右旗", + "shortName": null, + "level": 3, + "code": "152524", + "pinyin": "SuNiTeYouQi", + "pinyinFirst": "SNTYQ", + "capital": "赛汉塔拉镇", + "population": 7, + "area": 22456, + "areaCode": "0479", + "zipCode": "011200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637253707, + "parentId": 653116637249605, + "name": "东乌珠穆沁旗", + "shortName": null, + "level": 3, + "code": "152525", + "pinyin": "DongWuZhuMuQinQi", + "pinyinFirst": "DWZMQQ", + "capital": "乌里雅斯太镇", + "population": 8, + "area": 45572, + "areaCode": "0479", + "zipCode": "026300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637253708, + "parentId": 653116637249605, + "name": "西乌珠穆沁旗", + "shortName": null, + "level": 3, + "code": "152526", + "pinyin": "XiWuZhuMuQinQi", + "pinyinFirst": "XWZMQQ", + "capital": "巴拉嘎尔高勒镇", + "population": 8, + "area": 22462, + "areaCode": "0479", + "zipCode": "026200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637253709, + "parentId": 653116637249605, + "name": "太仆寺旗", + "shortName": null, + "level": 3, + "code": "152527", + "pinyin": "TaiPuSiQi", + "pinyinFirst": "TPSQ", + "capital": "宝昌镇", + "population": 21, + "area": 3426, + "areaCode": "0479", + "zipCode": "027000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637253710, + "parentId": 653116637249605, + "name": "镶黄旗", + "shortName": null, + "level": 3, + "code": "152528", + "pinyin": "XiangHuangQi", + "pinyinFirst": "XHQ", + "capital": "新宝拉格镇", + "population": 3, + "area": 5137, + "areaCode": "0479", + "zipCode": "013250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637253711, + "parentId": 653116637249605, + "name": "正镶白旗", + "shortName": null, + "level": 3, + "code": "152529", + "pinyin": "ZhengXiangBaiQi", + "pinyinFirst": "ZXBQ", + "capital": "明安图镇", + "population": 7, + "area": 6253, + "areaCode": "0479", + "zipCode": "013800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637253712, + "parentId": 653116637249605, + "name": "正蓝旗", + "shortName": null, + "level": 3, + "code": "152530", + "pinyin": "ZhengLanQi", + "pinyinFirst": "ZLQ", + "capital": "上都镇", + "population": 8, + "area": 10206, + "areaCode": "0479", + "zipCode": "027200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637474885, + "parentId": 653116633903173, + "name": "阿拉善盟", + "shortName": null, + "level": 2, + "code": "152900", + "pinyin": "ALaShanMeng", + "pinyinFirst": "ALSM", + "capital": "阿拉善左旗", + "population": 19, + "area": 268461, + "areaCode": "0483", + "zipCode": "750300", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116637478981, + "parentId": 653116637474885, + "name": "阿拉善左旗", + "shortName": null, + "level": 3, + "code": "152921", + "pinyin": "ALaShanZuoQi", + "pinyinFirst": "ALSZQ", + "capital": "巴彦浩特镇", + "population": 15, + "area": 80412, + "areaCode": "0483", + "zipCode": "750306", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637478982, + "parentId": 653116637474885, + "name": "阿拉善右旗", + "shortName": null, + "level": 3, + "code": "152922", + "pinyin": "ALaShanYouQi", + "pinyinFirst": "ALSYQ", + "capital": "巴丹吉林镇", + "population": 3, + "area": 73443, + "areaCode": "0483", + "zipCode": "737300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116637478983, + "parentId": 653116637474885, + "name": "额济纳旗", + "shortName": null, + "level": 3, + "code": "152923", + "pinyin": "EJiNaQi", + "pinyinFirst": "EJNQ", + "capital": "达来呼布镇", + "population": 2, + "area": 114606, + "areaCode": "0483", + "zipCode": "735400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:25", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:57" + }, + { + "id": 653116637700165, + "parentId": 0, + "name": "辽宁省", + "shortName": "辽", + "level": 1, + "code": "210000", + "pinyin": "LiaoNingSheng", + "pinyinFirst": "LNS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116639830085, + "parentId": 653116637700165, + "name": "沈阳市", + "shortName": null, + "level": 2, + "code": "210100", + "pinyin": "ShenYangShi", + "pinyinFirst": "SYS", + "capital": "浑南区", + "population": 755, + "area": 12860, + "areaCode": "024", + "zipCode": "110000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116639830086, + "parentId": 653116639830085, + "name": "浑南区", + "shortName": null, + "level": 3, + "code": "210112", + "pinyin": "HunNanQu", + "pinyinFirst": "HNQ", + "capital": "沈中大街", + "population": 44, + "area": 734, + "areaCode": "024", + "zipCode": "110179", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639830087, + "parentId": 653116639830085, + "name": "和平区", + "shortName": null, + "level": 3, + "code": "210102", + "pinyin": "HePingQu", + "pinyinFirst": "HPQ", + "capital": "南市场街道", + "population": 74, + "area": 59, + "areaCode": "024", + "zipCode": "110003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639830088, + "parentId": 653116639830085, + "name": "沈河区", + "shortName": null, + "level": 3, + "code": "210103", + "pinyin": "ShenHeQu", + "pinyinFirst": "SHQ", + "capital": "皇城街道", + "population": 72, + "area": 60, + "areaCode": "024", + "zipCode": "110011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639830089, + "parentId": 653116639830085, + "name": "大东区", + "shortName": null, + "level": 3, + "code": "210104", + "pinyin": "DaDongQu", + "pinyinFirst": "DDQ", + "capital": "津桥街道", + "population": 64, + "area": 100, + "areaCode": "024", + "zipCode": "110041", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639830090, + "parentId": 653116639830085, + "name": "皇姑区", + "shortName": null, + "level": 3, + "code": "210105", + "pinyin": "HuangGuQu", + "pinyinFirst": "HGQ", + "capital": "北塔街道", + "population": 85, + "area": 66, + "areaCode": "024", + "zipCode": "110031", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639830091, + "parentId": 653116639830085, + "name": "铁西区", + "shortName": null, + "level": 3, + "code": "210106", + "pinyin": "TieXiQu", + "pinyinFirst": "TXQ", + "capital": "笃工街道", + "population": 98, + "area": 286, + "areaCode": "024", + "zipCode": "110020", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639830092, + "parentId": 653116639830085, + "name": "苏家屯区", + "shortName": null, + "level": 3, + "code": "210111", + "pinyin": "SuJiaTunQu", + "pinyinFirst": "SJTQ", + "capital": "解放街道", + "population": 42, + "area": 782, + "areaCode": "024", + "zipCode": "110100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639830093, + "parentId": 653116639830085, + "name": "沈北新区", + "shortName": null, + "level": 3, + "code": "210113", + "pinyin": "ShenBeiXinQu", + "pinyinFirst": "SBXQ", + "capital": "新城子街道", + "population": 34, + "area": 884, + "areaCode": "024", + "zipCode": "110121", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639834181, + "parentId": 653116639830085, + "name": "于洪区", + "shortName": null, + "level": 3, + "code": "210114", + "pinyin": "YuHongQu", + "pinyinFirst": "YHQ", + "capital": "迎宾路街道", + "population": 47, + "area": 499, + "areaCode": "024", + "zipCode": "110141", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639834182, + "parentId": 653116639830085, + "name": "辽中区", + "shortName": null, + "level": 3, + "code": "210115", + "pinyin": "LiaoZhongQu", + "pinyinFirst": "LZQ", + "capital": "蒲东街道", + "population": 51, + "area": 1645, + "areaCode": "024", + "zipCode": "110200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639834183, + "parentId": 653116639830085, + "name": "新民市", + "shortName": null, + "level": 3, + "code": "210181", + "pinyin": "XinMinShi", + "pinyinFirst": "XMS", + "capital": "新柳街道", + "population": 67, + "area": 3297, + "areaCode": "024", + "zipCode": "110300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639834184, + "parentId": 653116639830085, + "name": "康平县", + "shortName": null, + "level": 3, + "code": "210123", + "pinyin": "KangPingXian", + "pinyinFirst": "KPX", + "capital": "胜利街道", + "population": 34, + "area": 2167, + "areaCode": "024", + "zipCode": "110500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639834185, + "parentId": 653116639830085, + "name": "法库县", + "shortName": null, + "level": 3, + "code": "210124", + "pinyin": "FaKuXian", + "pinyinFirst": "FKX", + "capital": "吉祥街道", + "population": 44, + "area": 2281, + "areaCode": "024", + "zipCode": "110400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639895621, + "parentId": 653116637700165, + "name": "大连市", + "shortName": null, + "level": 2, + "code": "210200", + "pinyin": "DaLianShi", + "pinyinFirst": "DLS", + "capital": "西岗区", + "population": 599, + "area": 13238, + "areaCode": "0411", + "zipCode": "116000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116639895622, + "parentId": 653116639895621, + "name": "西岗区", + "shortName": null, + "level": 3, + "code": "210203", + "pinyin": "XiGangQu", + "pinyinFirst": "XGQ", + "capital": "人民广场街道", + "population": 28, + "area": 24, + "areaCode": "0411", + "zipCode": "116011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639895623, + "parentId": 653116639895621, + "name": "中山区", + "shortName": null, + "level": 3, + "code": "210202", + "pinyin": "ZhongShanQu", + "pinyinFirst": "ZSQ", + "capital": "青泥洼桥街道", + "population": 36, + "area": 40, + "areaCode": "0411", + "zipCode": "116001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639895624, + "parentId": 653116639895621, + "name": "沙河口区", + "shortName": null, + "level": 3, + "code": "210204", + "pinyin": "ShaHeKouQu", + "pinyinFirst": "SHKQ", + "capital": "星海湾街道", + "population": 62, + "area": 35, + "areaCode": "0411", + "zipCode": "116021", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639895625, + "parentId": 653116639895621, + "name": "甘井子区", + "shortName": null, + "level": 3, + "code": "210211", + "pinyin": "GanJingZiQu", + "pinyinFirst": "GJZQ", + "capital": "辛寨子街道", + "population": 94, + "area": 452, + "areaCode": "0411", + "zipCode": "116031", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639895626, + "parentId": 653116639895621, + "name": "旅顺口区", + "shortName": null, + "level": 3, + "code": "210212", + "pinyin": "LvShunKouQu", + "pinyinFirst": "LSKQ", + "capital": "水师营街道", + "population": 22, + "area": 512, + "areaCode": "0411", + "zipCode": "116050", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639895627, + "parentId": 653116639895621, + "name": "金州区", + "shortName": null, + "level": 3, + "code": "210213", + "pinyin": "JinZhouQu", + "pinyinFirst": "JZQ", + "capital": "马桥子街道", + "population": 84, + "area": 1353, + "areaCode": "0411", + "zipCode": "116100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639895628, + "parentId": 653116639895621, + "name": "瓦房店市", + "shortName": null, + "level": 3, + "code": "210281", + "pinyin": "WaFangDianShi", + "pinyinFirst": "WFDS", + "capital": "共济街道", + "population": 98, + "area": 3567, + "areaCode": "0411", + "zipCode": "116300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639895629, + "parentId": 653116639895621, + "name": "普兰店区", + "shortName": null, + "level": 3, + "code": "210214", + "pinyin": "PuLanDianQu", + "pinyinFirst": "PLDQ", + "capital": "太平街道", + "population": 77, + "area": 2770, + "areaCode": "0411", + "zipCode": "116200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639895630, + "parentId": 653116639895621, + "name": "庄河市", + "shortName": null, + "level": 3, + "code": "210283", + "pinyin": "ZhuangHeShi", + "pinyinFirst": "ZHS", + "capital": "新华街道", + "population": 89, + "area": 3656, + "areaCode": "0411", + "zipCode": "116400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639895631, + "parentId": 653116639895621, + "name": "长海县", + "shortName": null, + "level": 3, + "code": "210224", + "pinyin": "ChangHaiXian", + "pinyinFirst": "CHX", + "capital": "大长山岛镇", + "population": 7, + "area": 157, + "areaCode": "0411", + "zipCode": "116500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639998021, + "parentId": 653116637700165, + "name": "鞍山市", + "shortName": null, + "level": 2, + "code": "210300", + "pinyin": "AnShanShi", + "pinyinFirst": "ASS", + "capital": "铁东区", + "population": 340, + "area": 9252, + "areaCode": "0412", + "zipCode": "114000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116639998022, + "parentId": 653116639998021, + "name": "铁东区", + "shortName": null, + "level": 3, + "code": "210302", + "pinyin": "TieDongQu", + "pinyinFirst": "TDQ", + "capital": "解放街道", + "population": 57, + "area": 135, + "areaCode": "0412", + "zipCode": "114005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639998023, + "parentId": 653116639998021, + "name": "铁西区", + "shortName": null, + "level": 3, + "code": "210303", + "pinyin": "TieXiQu", + "pinyinFirst": "TXQ", + "capital": "八家子街道", + "population": 28, + "area": 147, + "areaCode": "0412", + "zipCode": "114012", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639998024, + "parentId": 653116639998021, + "name": "立山区", + "shortName": null, + "level": 3, + "code": "210304", + "pinyin": "LiShanQu", + "pinyinFirst": "LSQ", + "capital": "立山街道", + "population": 39, + "area": 165, + "areaCode": "0412", + "zipCode": "114031", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639998025, + "parentId": 653116639998021, + "name": "千山区", + "shortName": null, + "level": 3, + "code": "210311", + "pinyin": "QianShanQu", + "pinyinFirst": "QSQ", + "capital": "东鞍山镇", + "population": 22, + "area": 344, + "areaCode": "0412", + "zipCode": "114041", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639998026, + "parentId": 653116639998021, + "name": "海城市", + "shortName": null, + "level": 3, + "code": "210381", + "pinyin": "HaiChengShi", + "pinyinFirst": "HCS", + "capital": "东四街道", + "population": 107, + "area": 2566, + "areaCode": "0412", + "zipCode": "114200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639998027, + "parentId": 653116639998021, + "name": "台安县", + "shortName": null, + "level": 3, + "code": "210321", + "pinyin": "TaiAnXian", + "pinyinFirst": "TAX", + "capital": "八角台街道", + "population": 36, + "area": 1393, + "areaCode": "0412", + "zipCode": "114100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116639998028, + "parentId": 653116639998021, + "name": "岫岩满族自治县", + "shortName": null, + "level": 3, + "code": "210323", + "pinyin": "XiuYanManZuZiZhiXian", + "pinyinFirst": "XYMZZZX", + "capital": "阜昌街道", + "population": 50, + "area": 4502, + "areaCode": "0412", + "zipCode": "114300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640100421, + "parentId": 653116637700165, + "name": "抚顺市", + "shortName": null, + "level": 2, + "code": "210400", + "pinyin": "FuShunShi", + "pinyinFirst": "FSS", + "capital": "顺城区", + "population": 207, + "area": 11278, + "areaCode": "024", + "zipCode": "113000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116640104517, + "parentId": 653116640100421, + "name": "顺城区", + "shortName": null, + "level": 3, + "code": "210411", + "pinyin": "ShunChengQu", + "pinyinFirst": "SCQ", + "capital": "长春街道", + "population": 43, + "area": 348, + "areaCode": "024", + "zipCode": "113006", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640104518, + "parentId": 653116640100421, + "name": "新抚区", + "shortName": null, + "level": 3, + "code": "210402", + "pinyin": "XinFuQu", + "pinyinFirst": "XFQ", + "capital": "永安台街道", + "population": 28, + "area": 108, + "areaCode": "024", + "zipCode": "113008", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640104519, + "parentId": 653116640100421, + "name": "东洲区", + "shortName": null, + "level": 3, + "code": "210403", + "pinyin": "DongZhouQu", + "pinyinFirst": "DZQ", + "capital": "搭连街道", + "population": 27, + "area": 597, + "areaCode": "024", + "zipCode": "113004", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640104520, + "parentId": 653116640100421, + "name": "望花区", + "shortName": null, + "level": 3, + "code": "210404", + "pinyin": "WangHuaQu", + "pinyinFirst": "WHQ", + "capital": "建设街道", + "population": 37, + "area": 322, + "areaCode": "024", + "zipCode": "113001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640104521, + "parentId": 653116640100421, + "name": "抚顺县", + "shortName": null, + "level": 3, + "code": "210421", + "pinyin": "FuShunXian", + "pinyinFirst": "FSX", + "capital": "抚顺城街道", + "population": 11, + "area": 1697, + "areaCode": "024", + "zipCode": "113100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640104522, + "parentId": 653116640100421, + "name": "新宾满族自治县", + "shortName": null, + "level": 3, + "code": "210422", + "pinyin": "XinBinManZuZiZhiXian", + "pinyinFirst": "XBMZZZX", + "capital": "新宾镇", + "population": 29, + "area": 4285, + "areaCode": "024", + "zipCode": "113200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640104523, + "parentId": 653116640100421, + "name": "清原满族自治县", + "shortName": null, + "level": 3, + "code": "210423", + "pinyin": "QingYuanManZuZiZhiXian", + "pinyinFirst": "QYMZZZX", + "capital": "清原镇", + "population": 32, + "area": 3921, + "areaCode": "024", + "zipCode": "113300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640219205, + "parentId": 653116637700165, + "name": "本溪市", + "shortName": null, + "level": 2, + "code": "210500", + "pinyin": "BenXiShi", + "pinyinFirst": "BXS", + "capital": "平山区", + "population": 145, + "area": 8413, + "areaCode": "024", + "zipCode": "117000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116640219206, + "parentId": 653116640219205, + "name": "平山区", + "shortName": null, + "level": 3, + "code": "210502", + "pinyin": "PingShanQu", + "pinyinFirst": "PSQ", + "capital": "东明街道", + "population": 28, + "area": 178, + "areaCode": "024", + "zipCode": "117000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640219207, + "parentId": 653116640219205, + "name": "溪湖区", + "shortName": null, + "level": 3, + "code": "210503", + "pinyin": "XiHuQu", + "pinyinFirst": "XHQ", + "capital": "河东街道", + "population": 19, + "area": 312, + "areaCode": "024", + "zipCode": "117002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640219208, + "parentId": 653116640219205, + "name": "明山区", + "shortName": null, + "level": 3, + "code": "210504", + "pinyin": "MingShanQu", + "pinyinFirst": "MSQ", + "capital": "新明街道", + "population": 34, + "area": 413, + "areaCode": "024", + "zipCode": "117020", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640219209, + "parentId": 653116640219205, + "name": "南芬区", + "shortName": null, + "level": 3, + "code": "210505", + "pinyin": "NanFenQu", + "pinyinFirst": "NFQ", + "capital": "南芬街道", + "population": 7, + "area": 615, + "areaCode": "024", + "zipCode": "117014", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640219210, + "parentId": 653116640219205, + "name": "本溪满族自治县", + "shortName": null, + "level": 3, + "code": "210521", + "pinyin": "BenXiManZuZiZhiXian", + "pinyinFirst": "BXMZZZX", + "capital": "观音阁街道", + "population": 28, + "area": 3342, + "areaCode": "024", + "zipCode": "117100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640219211, + "parentId": 653116640219205, + "name": "桓仁满族自治县", + "shortName": null, + "level": 3, + "code": "210522", + "pinyin": "HuanRenManZuZiZhiXian", + "pinyinFirst": "HRMZZZX", + "capital": "八卦城街道", + "population": 29, + "area": 3553, + "areaCode": "024", + "zipCode": "117200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640354373, + "parentId": 653116637700165, + "name": "丹东市", + "shortName": null, + "level": 2, + "code": "210600", + "pinyin": "DanDongShi", + "pinyinFirst": "DDS", + "capital": "振兴区", + "population": 233, + "area": 15047, + "areaCode": "0415", + "zipCode": "118000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116640354374, + "parentId": 653116640354373, + "name": "振兴区", + "shortName": null, + "level": 3, + "code": "210603", + "pinyin": "ZhenXingQu", + "pinyinFirst": "ZXQ", + "capital": "站前街道", + "population": 43, + "area": 140, + "areaCode": "0415", + "zipCode": "118000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640358469, + "parentId": 653116640354373, + "name": "元宝区", + "shortName": null, + "level": 3, + "code": "210602", + "pinyin": "YuanBaoQu", + "pinyinFirst": "YBQ", + "capital": "广济街道", + "population": 18, + "area": 92, + "areaCode": "0415", + "zipCode": "118000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640358470, + "parentId": 653116640354373, + "name": "振安区", + "shortName": null, + "level": 3, + "code": "210604", + "pinyin": "ZhenAnQu", + "pinyinFirst": "ZAQ", + "capital": "鸭绿江街道", + "population": 17, + "area": 651, + "areaCode": "0415", + "zipCode": "118000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640358471, + "parentId": 653116640354373, + "name": "东港市", + "shortName": null, + "level": 3, + "code": "210681", + "pinyin": "DongGangShi", + "pinyinFirst": "DGS", + "capital": "新兴街道", + "population": 59, + "area": 2452, + "areaCode": "0415", + "zipCode": "118300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640358472, + "parentId": 653116640354373, + "name": "凤城市", + "shortName": null, + "level": 3, + "code": "210682", + "pinyin": "FengChengShi", + "pinyinFirst": "FCS", + "capital": "凤凰城街道", + "population": 55, + "area": 5518, + "areaCode": "0415", + "zipCode": "118100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640358473, + "parentId": 653116640354373, + "name": "宽甸满族自治县", + "shortName": null, + "level": 3, + "code": "210624", + "pinyin": "KuanDianManZuZiZhiXian", + "pinyinFirst": "KDMZZZX", + "capital": "宽甸镇", + "population": 41, + "area": 6194, + "areaCode": "0415", + "zipCode": "118200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640550981, + "parentId": 653116637700165, + "name": "锦州市", + "shortName": null, + "level": 2, + "code": "210700", + "pinyin": "JinZhouShi", + "pinyinFirst": "JZS", + "capital": "太和区", + "population": 293, + "area": 10059, + "areaCode": "0416", + "zipCode": "121000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116640555077, + "parentId": 653116640550981, + "name": "太和区", + "shortName": null, + "level": 3, + "code": "210711", + "pinyin": "TaiHeQu", + "pinyinFirst": "THQ", + "capital": "营盘街道", + "population": 36, + "area": 865, + "areaCode": "0416", + "zipCode": "121012", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640555078, + "parentId": 653116640550981, + "name": "古塔区", + "shortName": null, + "level": 3, + "code": "210702", + "pinyin": "GuTaQu", + "pinyinFirst": "GTQ", + "capital": "保安街道", + "population": 23, + "area": 68, + "areaCode": "0416", + "zipCode": "121004", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640555079, + "parentId": 653116640550981, + "name": "凌河区", + "shortName": null, + "level": 3, + "code": "210703", + "pinyin": "LingHeQu", + "pinyinFirst": "LHQ", + "capital": "龙江街道", + "population": 36, + "area": 42, + "areaCode": "0416", + "zipCode": "121000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640555080, + "parentId": 653116640550981, + "name": "凌海市", + "shortName": null, + "level": 3, + "code": "210781", + "pinyin": "LingHaiShi", + "pinyinFirst": "LHS", + "capital": "大凌河街道", + "population": 50, + "area": 2417, + "areaCode": "0416", + "zipCode": "121200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640555081, + "parentId": 653116640550981, + "name": "北镇市", + "shortName": null, + "level": 3, + "code": "210782", + "pinyin": "BeiZhenShi", + "pinyinFirst": "BZS", + "capital": "北镇街道", + "population": 50, + "area": 1693, + "areaCode": "0416", + "zipCode": "121300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640555082, + "parentId": 653116640550981, + "name": "黑山县", + "shortName": null, + "level": 3, + "code": "210726", + "pinyin": "HeiShanXian", + "pinyinFirst": "HSX", + "capital": "黑山街道", + "population": 58, + "area": 2497, + "areaCode": "0416", + "zipCode": "121400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640555083, + "parentId": 653116640550981, + "name": "义县", + "shortName": null, + "level": 3, + "code": "210727", + "pinyin": "YiXian", + "pinyinFirst": "YX", + "capital": "义州街道", + "population": 40, + "area": 2477, + "areaCode": "0416", + "zipCode": "121100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640723013, + "parentId": 653116637700165, + "name": "营口市", + "shortName": null, + "level": 2, + "code": "210800", + "pinyin": "YingKouShi", + "pinyinFirst": "YKS", + "capital": "站前区", + "population": 231, + "area": 5525, + "areaCode": "0417", + "zipCode": "115000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116640727109, + "parentId": 653116640723013, + "name": "站前区", + "shortName": null, + "level": 3, + "code": "210802", + "pinyin": "ZhanQianQu", + "pinyinFirst": "ZQQ", + "capital": "建设街道", + "population": 28, + "area": 85, + "areaCode": "0417", + "zipCode": "115000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640727110, + "parentId": 653116640723013, + "name": "西市区", + "shortName": null, + "level": 3, + "code": "210803", + "pinyin": "XiShiQu", + "pinyinFirst": "XSQ", + "capital": "得胜街道", + "population": 17, + "area": 317, + "areaCode": "0417", + "zipCode": "115004", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640727111, + "parentId": 653116640723013, + "name": "鲅鱼圈区", + "shortName": null, + "level": 3, + "code": "210804", + "pinyin": "BaYuQuanQu", + "pinyinFirst": "BYQQ", + "capital": "红海街道", + "population": 39, + "area": 295, + "areaCode": "0417", + "zipCode": "115007", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640727112, + "parentId": 653116640723013, + "name": "老边区", + "shortName": null, + "level": 3, + "code": "210811", + "pinyin": "LaoBianQu", + "pinyinFirst": "LBQ", + "capital": "老边街道", + "population": 11, + "area": 273, + "areaCode": "0417", + "zipCode": "115005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640727113, + "parentId": 653116640723013, + "name": "盖州市", + "shortName": null, + "level": 3, + "code": "210881", + "pinyin": "GaiZhouShi", + "pinyinFirst": "GZS", + "capital": "西城街道", + "population": 68, + "area": 2945, + "areaCode": "0417", + "zipCode": "115200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640727114, + "parentId": 653116640723013, + "name": "大石桥市", + "shortName": null, + "level": 3, + "code": "210882", + "pinyin": "DaShiQiaoShi", + "pinyinFirst": "DSQS", + "capital": "镁都街道", + "population": 68, + "area": 1610, + "areaCode": "0417", + "zipCode": "115100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640895045, + "parentId": 653116637700165, + "name": "阜新市", + "shortName": null, + "level": 2, + "code": "210900", + "pinyin": "FuXinShi", + "pinyinFirst": "FXS", + "capital": "细河区", + "population": 184, + "area": 10445, + "areaCode": "0418", + "zipCode": "123000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116640895046, + "parentId": 653116640895045, + "name": "细河区", + "shortName": null, + "level": 3, + "code": "210911", + "pinyin": "XiHeQu", + "pinyinFirst": "XHQ", + "capital": "玉丰街道", + "population": 20, + "area": 126, + "areaCode": "0418", + "zipCode": "123000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640895047, + "parentId": 653116640895045, + "name": "海州区", + "shortName": null, + "level": 3, + "code": "210902", + "pinyin": "HaiZhouQu", + "pinyinFirst": "HZQ", + "capital": "和平街道", + "population": 25, + "area": 97, + "areaCode": "0418", + "zipCode": "123000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640895048, + "parentId": 653116640895045, + "name": "新邱区", + "shortName": null, + "level": 3, + "code": "210903", + "pinyin": "XinQiuQu", + "pinyinFirst": "XQQ", + "capital": "街基街道", + "population": 8, + "area": 128, + "areaCode": "0418", + "zipCode": "123005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640895049, + "parentId": 653116640895045, + "name": "太平区", + "shortName": null, + "level": 3, + "code": "210904", + "pinyin": "TaiPingQu", + "pinyinFirst": "TPQ", + "capital": "红树街道", + "population": 15, + "area": 108, + "areaCode": "0418", + "zipCode": "123003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640895050, + "parentId": 653116640895045, + "name": "清河门区", + "shortName": null, + "level": 3, + "code": "210905", + "pinyin": "QingHeMenQu", + "pinyinFirst": "QHMQ", + "capital": "清河街道", + "population": 6, + "area": 105, + "areaCode": "0418", + "zipCode": "123006", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640895051, + "parentId": 653116640895045, + "name": "彰武县", + "shortName": null, + "level": 3, + "code": "210922", + "pinyin": "ZhangWuXian", + "pinyinFirst": "ZWX", + "capital": "彰武镇", + "population": 40, + "area": 3635, + "areaCode": "0418", + "zipCode": "123200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116640895052, + "parentId": 653116640895045, + "name": "阜新蒙古族自治县", + "shortName": null, + "level": 3, + "code": "210921", + "pinyin": "FuXinMengGuZuZiZhiXian", + "pinyinFirst": "FXMGZZZX", + "capital": "城区街道", + "population": 70, + "area": 6246, + "areaCode": "0418", + "zipCode": "123100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641058885, + "parentId": 653116637700165, + "name": "辽阳市", + "shortName": null, + "level": 2, + "code": "211000", + "pinyin": "LiaoYangShi", + "pinyinFirst": "LYS", + "capital": "白塔区", + "population": 174, + "area": 4736, + "areaCode": "0419", + "zipCode": "111000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116641062981, + "parentId": 653116641058885, + "name": "白塔区", + "shortName": null, + "level": 3, + "code": "211002", + "pinyin": "BaiTaQu", + "pinyinFirst": "BTQ", + "capital": "文圣街道", + "population": 36, + "area": 30, + "areaCode": "0419", + "zipCode": "111000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641062982, + "parentId": 653116641058885, + "name": "文圣区", + "shortName": null, + "level": 3, + "code": "211003", + "pinyin": "WenShengQu", + "pinyinFirst": "WSQ", + "capital": "东京陵街道", + "population": 12, + "area": 296, + "areaCode": "0419", + "zipCode": "111000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641062983, + "parentId": 653116641058885, + "name": "宏伟区", + "shortName": null, + "level": 3, + "code": "211004", + "pinyin": "HongWeiQu", + "pinyinFirst": "HWQ", + "capital": "长征街道", + "population": 14, + "area": 150, + "areaCode": "0419", + "zipCode": "111003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641062984, + "parentId": 653116641058885, + "name": "弓长岭区", + "shortName": null, + "level": 3, + "code": "211005", + "pinyin": "GongChangLingQu", + "pinyinFirst": "GCLQ", + "capital": "汤河镇", + "population": 8, + "area": 330, + "areaCode": "0419", + "zipCode": "111008", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641062985, + "parentId": 653116641058885, + "name": "太子河区", + "shortName": null, + "level": 3, + "code": "211011", + "pinyin": "TaiZiHeQu", + "pinyinFirst": "TZHQ", + "capital": "新华街道", + "population": 15, + "area": 275, + "areaCode": "0419", + "zipCode": "111000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641062986, + "parentId": 653116641058885, + "name": "灯塔市", + "shortName": null, + "level": 3, + "code": "211081", + "pinyin": "DengTaShi", + "pinyinFirst": "DTS", + "capital": "万宝桥街道", + "population": 43, + "area": 1170, + "areaCode": "0419", + "zipCode": "111300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641062987, + "parentId": 653116641058885, + "name": "辽阳县", + "shortName": null, + "level": 3, + "code": "211021", + "pinyin": "LiaoYangXian", + "pinyinFirst": "LYX", + "capital": "首山镇", + "population": 46, + "area": 2485, + "areaCode": "0419", + "zipCode": "111200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641259589, + "parentId": 653116637700165, + "name": "盘锦市", + "shortName": null, + "level": 2, + "code": "211100", + "pinyin": "PanJinShi", + "pinyinFirst": "PJS", + "capital": "兴隆台区", + "population": 130, + "area": 4121, + "areaCode": "0427", + "zipCode": "124000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116641259590, + "parentId": 653116641259589, + "name": "兴隆台区", + "shortName": null, + "level": 3, + "code": "211103", + "pinyin": "XingLongTaiQu", + "pinyinFirst": "XLTQ", + "capital": "创新街道", + "population": 44, + "area": 975, + "areaCode": "0427", + "zipCode": "124010", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641259591, + "parentId": 653116641259589, + "name": "双台子区", + "shortName": null, + "level": 3, + "code": "211102", + "pinyin": "ShuangTaiZiQu", + "pinyinFirst": "STZQ", + "capital": "建设街道", + "population": 19, + "area": 127, + "areaCode": "0427", + "zipCode": "124000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641259592, + "parentId": 653116641259589, + "name": "大洼区", + "shortName": null, + "level": 3, + "code": "211104", + "pinyin": "DaWaQu", + "pinyinFirst": "DWQ", + "capital": "大洼街道", + "population": 39, + "area": 1355, + "areaCode": "0427", + "zipCode": "124200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641259593, + "parentId": 653116641259589, + "name": "盘山县", + "shortName": null, + "level": 3, + "code": "211122", + "pinyin": "PanShanXian", + "pinyinFirst": "PSX", + "capital": "太平街道", + "population": 27, + "area": 1664, + "areaCode": "0427", + "zipCode": "124100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641443909, + "parentId": 653116637700165, + "name": "铁岭市", + "shortName": null, + "level": 2, + "code": "211200", + "pinyin": "TieLingShi", + "pinyinFirst": "TLS", + "capital": "银州区", + "population": 289, + "area": 13006, + "areaCode": "024", + "zipCode": "112000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116641443910, + "parentId": 653116641443909, + "name": "银州区", + "shortName": null, + "level": 3, + "code": "211202", + "pinyin": "YinZhouQu", + "pinyinFirst": "YZQ", + "capital": "工人街道", + "population": 33, + "area": 178, + "areaCode": "024", + "zipCode": "112000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641443911, + "parentId": 653116641443909, + "name": "清河区", + "shortName": null, + "level": 3, + "code": "211204", + "pinyin": "QingHeQu", + "pinyinFirst": "QHQ", + "capital": "红旗街道", + "population": 9, + "area": 480, + "areaCode": "024", + "zipCode": "112003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641443912, + "parentId": 653116641443909, + "name": "调兵山市", + "shortName": null, + "level": 3, + "code": "211281", + "pinyin": "TiaoBingShanShi", + "pinyinFirst": "TBSS", + "capital": "调兵山街道", + "population": 22, + "area": 262, + "areaCode": "024", + "zipCode": "112700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641443913, + "parentId": 653116641443909, + "name": "开原市", + "shortName": null, + "level": 3, + "code": "211282", + "pinyin": "KaiYuanShi", + "pinyinFirst": "KYS", + "capital": "新城街道", + "population": 56, + "area": 2813, + "areaCode": "024", + "zipCode": "112300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641443914, + "parentId": 653116641443909, + "name": "铁岭县", + "shortName": null, + "level": 3, + "code": "211221", + "pinyin": "TieLingXian", + "pinyinFirst": "TLX", + "capital": "铁岭市银州区工人街道", + "population": 38, + "area": 2250, + "areaCode": "024", + "zipCode": "112000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641443915, + "parentId": 653116641443909, + "name": "西丰县", + "shortName": null, + "level": 3, + "code": "211223", + "pinyin": "XiFengXian", + "pinyinFirst": "XFX", + "capital": "西丰镇", + "population": 33, + "area": 2699, + "areaCode": "024", + "zipCode": "112400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641443916, + "parentId": 653116641443909, + "name": "昌图县", + "shortName": null, + "level": 3, + "code": "211224", + "pinyin": "ChangTuXian", + "pinyinFirst": "CTX", + "capital": "昌图镇", + "population": 98, + "area": 4324, + "areaCode": "024", + "zipCode": "112500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641648709, + "parentId": 653116637700165, + "name": "朝阳市", + "shortName": null, + "level": 2, + "code": "211300", + "pinyin": "ZhaoYangShi", + "pinyinFirst": "ZYS", + "capital": "双塔区", + "population": 335, + "area": 19701, + "areaCode": "0421", + "zipCode": "122000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116641648710, + "parentId": 653116641648709, + "name": "双塔区", + "shortName": null, + "level": 3, + "code": "211302", + "pinyin": "ShuangTaQu", + "pinyinFirst": "STQ", + "capital": "双塔街道", + "population": 40, + "area": 500, + "areaCode": "0421", + "zipCode": "122000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641648711, + "parentId": 653116641648709, + "name": "龙城区", + "shortName": null, + "level": 3, + "code": "211303", + "pinyin": "LongChengQu", + "pinyinFirst": "LCQ", + "capital": "新华街道", + "population": 20, + "area": 647, + "areaCode": "0421", + "zipCode": "122000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641648712, + "parentId": 653116641648709, + "name": "北票市", + "shortName": null, + "level": 3, + "code": "211381", + "pinyin": "BeiPiaoShi", + "pinyinFirst": "BPS", + "capital": "南山街道", + "population": 55, + "area": 4418, + "areaCode": "0421", + "zipCode": "122100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641648713, + "parentId": 653116641648709, + "name": "凌源市", + "shortName": null, + "level": 3, + "code": "211382", + "pinyin": "LingYuanShi", + "pinyinFirst": "LYS", + "capital": "北街街道", + "population": 64, + "area": 3278, + "areaCode": "0421", + "zipCode": "122500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641648714, + "parentId": 653116641648709, + "name": "朝阳县", + "shortName": null, + "level": 3, + "code": "211321", + "pinyin": "ZhaoYangXian", + "pinyinFirst": "ZYX", + "capital": "朝阳市双塔区前进街道", + "population": 55, + "area": 3757, + "areaCode": "0421", + "zipCode": "122600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641648715, + "parentId": 653116641648709, + "name": "建平县", + "shortName": null, + "level": 3, + "code": "211322", + "pinyin": "JianPingXian", + "pinyinFirst": "JPX", + "capital": "红山街道", + "population": 57, + "area": 4869, + "areaCode": "0421", + "zipCode": "122400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641648716, + "parentId": 653116641648709, + "name": "喀喇沁左翼蒙古族自治县", + "shortName": null, + "level": 3, + "code": "211324", + "pinyin": "KaLaQinZuoYiMengGuZuZiZhiXian", + "pinyinFirst": "KLQZYMGZZZX", + "capital": "大城子街道", + "population": 42, + "area": 2232, + "areaCode": "0421", + "zipCode": "122300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641886277, + "parentId": 653116637700165, + "name": "葫芦岛市", + "shortName": null, + "level": 2, + "code": "211400", + "pinyin": "HuLuDaoShi", + "pinyinFirst": "HLDS", + "capital": "龙港区", + "population": 276, + "area": 10440, + "areaCode": "0429", + "zipCode": "125000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116641890373, + "parentId": 653116641886277, + "name": "龙港区", + "shortName": null, + "level": 3, + "code": "211403", + "pinyin": "LongGangQu", + "pinyinFirst": "LGQ", + "capital": "玉皇街道", + "population": 24, + "area": 178, + "areaCode": "0429", + "zipCode": "125003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641890374, + "parentId": 653116641886277, + "name": "连山区", + "shortName": null, + "level": 3, + "code": "211402", + "pinyin": "LianShanQu", + "pinyinFirst": "LSQ", + "capital": "连山街道", + "population": 45, + "area": 1182, + "areaCode": "0429", + "zipCode": "125001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641890375, + "parentId": 653116641886277, + "name": "南票区", + "shortName": null, + "level": 3, + "code": "211404", + "pinyin": "NanPiaoQu", + "pinyinFirst": "NPQ", + "capital": "九龙街道", + "population": 27, + "area": 1002, + "areaCode": "0429", + "zipCode": "125027", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641890376, + "parentId": 653116641886277, + "name": "兴城市", + "shortName": null, + "level": 3, + "code": "211481", + "pinyin": "XingChengShi", + "pinyinFirst": "XCS", + "capital": "温泉街道", + "population": 53, + "area": 2103, + "areaCode": "0429", + "zipCode": "125100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641890377, + "parentId": 653116641886277, + "name": "绥中县", + "shortName": null, + "level": 3, + "code": "211421", + "pinyin": "SuiZhongXian", + "pinyinFirst": "SZX", + "capital": "绥中镇", + "population": 64, + "area": 2780, + "areaCode": "0429", + "zipCode": "125200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116641890378, + "parentId": 653116641886277, + "name": "建昌县", + "shortName": null, + "level": 3, + "code": "211422", + "pinyin": "JianChangXian", + "pinyinFirst": "JCX", + "capital": "建昌镇", + "population": 62, + "area": 3195, + "areaCode": "0429", + "zipCode": "125300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:58" + }, + { + "id": 653116642103365, + "parentId": 0, + "name": "吉林省", + "shortName": "吉", + "level": 1, + "code": "220000", + "pinyin": "JiLinSheng", + "pinyinFirst": "JLS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116643147845, + "parentId": 653116642103365, + "name": "长春市", + "shortName": null, + "level": 2, + "code": "220100", + "pinyin": "ChangChunShi", + "pinyinFirst": "CCS", + "capital": "南关区", + "population": 957, + "area": 24592, + "areaCode": "0431", + "zipCode": "130000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116643147846, + "parentId": 653116643147845, + "name": "南关区", + "shortName": null, + "level": 3, + "code": "220102", + "pinyin": "NanGuanQu", + "pinyinFirst": "NGQ", + "capital": "南岭街道", + "population": 76, + "area": 497, + "areaCode": "0431", + "zipCode": "130022", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643147847, + "parentId": 653116643147845, + "name": "宽城区", + "shortName": null, + "level": 3, + "code": "220103", + "pinyin": "KuanChengQu", + "pinyinFirst": "KCQ", + "capital": "新发街道", + "population": 66, + "area": 877, + "areaCode": "0431", + "zipCode": "130051", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643147848, + "parentId": 653116643147845, + "name": "朝阳区", + "shortName": null, + "level": 3, + "code": "220104", + "pinyin": "ZhaoYangQu", + "pinyinFirst": "ZYQ", + "capital": "前进街道", + "population": 76, + "area": 379, + "areaCode": "0431", + "zipCode": "130012", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643147849, + "parentId": 653116643147845, + "name": "二道区", + "shortName": null, + "level": 3, + "code": "220105", + "pinyin": "ErDaoQu", + "pinyinFirst": "EDQ", + "capital": "东盛街道", + "population": 58, + "area": 965, + "areaCode": "0431", + "zipCode": "130031", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643147850, + "parentId": 653116643147845, + "name": "绿园区", + "shortName": null, + "level": 3, + "code": "220106", + "pinyin": "LvYuanQu", + "pinyinFirst": "LYQ", + "capital": "春城街道", + "population": 65, + "area": 301, + "areaCode": "0431", + "zipCode": "130062", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643147851, + "parentId": 653116643147845, + "name": "双阳区", + "shortName": null, + "level": 3, + "code": "220112", + "pinyin": "ShuangYangQu", + "pinyinFirst": "SYQ", + "capital": "云山街道", + "population": 36, + "area": 1663, + "areaCode": "0431", + "zipCode": "130600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643147852, + "parentId": 653116643147845, + "name": "九台区", + "shortName": null, + "level": 3, + "code": "220113", + "pinyin": "JiuTaiQu", + "pinyinFirst": "JTQ", + "capital": "九台街道", + "population": 67, + "area": 2875, + "areaCode": "0431", + "zipCode": "130500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643147853, + "parentId": 653116643147845, + "name": "榆树市", + "shortName": null, + "level": 3, + "code": "220182", + "pinyin": "YuShuShi", + "pinyinFirst": "YSS", + "capital": "华昌街道", + "population": 122, + "area": 4691, + "areaCode": "0431", + "zipCode": "130400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643147854, + "parentId": 653116643147845, + "name": "德惠市", + "shortName": null, + "level": 3, + "code": "220183", + "pinyin": "DeHuiShi", + "pinyinFirst": "DHS", + "capital": "胜利街道", + "population": 80, + "area": 3096, + "areaCode": "0431", + "zipCode": "130300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643147855, + "parentId": 653116643147845, + "name": "公主岭市", + "shortName": null, + "level": 3, + "code": "220184", + "pinyin": "GongZhuLingShi", + "pinyinFirst": "GZLS", + "capital": "河南街道", + "population": 103, + "area": 4027, + "areaCode": "0434", + "zipCode": "136100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643147856, + "parentId": 653116643147845, + "name": "农安县", + "shortName": null, + "level": 3, + "code": "220122", + "pinyin": "NongAnXian", + "pinyinFirst": "NAX", + "capital": "宝塔街道", + "population": 106, + "area": 5221, + "areaCode": "0431", + "zipCode": "130200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643201093, + "parentId": 653116642103365, + "name": "吉林市", + "shortName": null, + "level": 2, + "code": "220200", + "pinyin": "JiLinShi", + "pinyinFirst": "JLS", + "capital": "船营区", + "population": 412, + "area": 27722, + "areaCode": "0432", + "zipCode": "132000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116643201094, + "parentId": 653116643201093, + "name": "船营区", + "shortName": null, + "level": 3, + "code": "220204", + "pinyin": "ChuanYingQu", + "pinyinFirst": "CYQ", + "capital": "德胜街道", + "population": 46, + "area": 711, + "areaCode": "0432", + "zipCode": "132011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643201095, + "parentId": 653116643201093, + "name": "昌邑区", + "shortName": null, + "level": 3, + "code": "220202", + "pinyin": "ChangYiQu", + "pinyinFirst": "CYQ", + "capital": "兴华街道", + "population": 61, + "area": 865, + "areaCode": "0432", + "zipCode": "132002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643201096, + "parentId": 653116643201093, + "name": "龙潭区", + "shortName": null, + "level": 3, + "code": "220203", + "pinyin": "LongTanQu", + "pinyinFirst": "LTQ", + "capital": "龙华街道", + "population": 43, + "area": 1209, + "areaCode": "0432", + "zipCode": "132021", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643201097, + "parentId": 653116643201093, + "name": "丰满区", + "shortName": null, + "level": 3, + "code": "220211", + "pinyin": "FengManQu", + "pinyinFirst": "FMQ", + "capital": "泰山街道", + "population": 30, + "area": 1032, + "areaCode": "0432", + "zipCode": "132013", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643201098, + "parentId": 653116643201093, + "name": "蛟河市", + "shortName": null, + "level": 3, + "code": "220281", + "pinyin": "JiaoHeShi", + "pinyinFirst": "JHS", + "capital": "民主街道", + "population": 42, + "area": 6235, + "areaCode": "0432", + "zipCode": "132500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643201099, + "parentId": 653116643201093, + "name": "桦甸市", + "shortName": null, + "level": 3, + "code": "220282", + "pinyin": "HuaDianShi", + "pinyinFirst": "HDS", + "capital": "明桦街道", + "population": 42, + "area": 6624, + "areaCode": "0432", + "zipCode": "132400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643201100, + "parentId": 653116643201093, + "name": "舒兰市", + "shortName": null, + "level": 3, + "code": "220283", + "pinyin": "ShuLanShi", + "pinyinFirst": "SLS", + "capital": "滨河街道", + "population": 60, + "area": 4554, + "areaCode": "0432", + "zipCode": "132600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643201101, + "parentId": 653116643201093, + "name": "磐石市", + "shortName": null, + "level": 3, + "code": "220284", + "pinyin": "PanShiShi", + "pinyinFirst": "PSS", + "capital": "东宁街道", + "population": 50, + "area": 3867, + "areaCode": "0432", + "zipCode": "132300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643201102, + "parentId": 653116643201093, + "name": "永吉县", + "shortName": null, + "level": 3, + "code": "220221", + "pinyin": "YongJiXian", + "pinyinFirst": "YJX", + "capital": "口前镇", + "population": 38, + "area": 2625, + "areaCode": "0432", + "zipCode": "132200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643303493, + "parentId": 653116642103365, + "name": "四平市", + "shortName": null, + "level": 2, + "code": "220300", + "pinyin": "SiPingShi", + "pinyinFirst": "SPS", + "capital": "铁西区", + "population": 216, + "area": 10296, + "areaCode": "0434", + "zipCode": "136000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116643303494, + "parentId": 653116643303493, + "name": "铁西区", + "shortName": null, + "level": 3, + "code": "220302", + "pinyin": "TieXiQu", + "pinyinFirst": "TXQ", + "capital": "站前街道", + "population": 36, + "area": 778, + "areaCode": "0434", + "zipCode": "136000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643303495, + "parentId": 653116643303493, + "name": "铁东区", + "shortName": null, + "level": 3, + "code": "220303", + "pinyin": "TieDongQu", + "pinyinFirst": "TDQ", + "capital": "四马路街道", + "population": 32, + "area": 945, + "areaCode": "0434", + "zipCode": "136000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643303496, + "parentId": 653116643303493, + "name": "双辽市", + "shortName": null, + "level": 3, + "code": "220382", + "pinyin": "ShuangLiaoShi", + "pinyinFirst": "SLS", + "capital": "辽南街道", + "population": 39, + "area": 3121, + "areaCode": "0434", + "zipCode": "136400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643303497, + "parentId": 653116643303493, + "name": "梨树县", + "shortName": null, + "level": 3, + "code": "220322", + "pinyin": "LiShuXian", + "pinyinFirst": "LSX", + "capital": "富强街道", + "population": 64, + "area": 2967, + "areaCode": "0434", + "zipCode": "136500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643303498, + "parentId": 653116643303493, + "name": "伊通满族自治县", + "shortName": null, + "level": 3, + "code": "220323", + "pinyin": "YiTongManZuZiZhiXian", + "pinyinFirst": "YTMZZZX", + "capital": "永宁街道", + "population": 45, + "area": 2523, + "areaCode": "0434", + "zipCode": "130700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643426373, + "parentId": 653116642103365, + "name": "辽源市", + "shortName": null, + "level": 2, + "code": "220400", + "pinyin": "LiaoYuanShi", + "pinyinFirst": "LYS", + "capital": "龙山区", + "population": 117, + "area": 5125, + "areaCode": "0437", + "zipCode": "136200", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116643426374, + "parentId": 653116643426373, + "name": "龙山区", + "shortName": null, + "level": 3, + "code": "220402", + "pinyin": "LongShanQu", + "pinyinFirst": "LSQ", + "capital": "南康街道", + "population": 30, + "area": 257, + "areaCode": "0437", + "zipCode": "136200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643426375, + "parentId": 653116643426373, + "name": "西安区", + "shortName": null, + "level": 3, + "code": "220403", + "pinyin": "XiAnQu", + "pinyinFirst": "XAQ", + "capital": "仙城街道", + "population": 15, + "area": 172, + "areaCode": "0437", + "zipCode": "136201", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643426376, + "parentId": 653116643426373, + "name": "东丰县", + "shortName": null, + "level": 3, + "code": "220421", + "pinyin": "DongFengXian", + "pinyinFirst": "DFX", + "capital": "吉鹿街道", + "population": 38, + "area": 2522, + "areaCode": "0437", + "zipCode": "136300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643426377, + "parentId": 653116643426373, + "name": "东辽县", + "shortName": null, + "level": 3, + "code": "220422", + "pinyin": "DongLiaoXian", + "pinyinFirst": "DLX", + "capital": "白泉镇", + "population": 33, + "area": 2174, + "areaCode": "0437", + "zipCode": "136600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643549253, + "parentId": 653116642103365, + "name": "通化市", + "shortName": null, + "level": 2, + "code": "220500", + "pinyin": "TongHuaShi", + "pinyinFirst": "THS", + "capital": "东昌区", + "population": 215, + "area": 15698, + "areaCode": "0435", + "zipCode": "134000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116643549254, + "parentId": 653116643549253, + "name": "东昌区", + "shortName": null, + "level": 3, + "code": "220502", + "pinyin": "DongChangQu", + "pinyinFirst": "DCQ", + "capital": "新站街道", + "population": 32, + "area": 547, + "areaCode": "0435", + "zipCode": "134001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643549255, + "parentId": 653116643549253, + "name": "二道江区", + "shortName": null, + "level": 3, + "code": "220503", + "pinyin": "ErDaoJiangQu", + "pinyinFirst": "EDJQ", + "capital": "东通化街道", + "population": 12, + "area": 378, + "areaCode": "0435", + "zipCode": "134003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643549256, + "parentId": 653116643549253, + "name": "梅河口市", + "shortName": null, + "level": 3, + "code": "220581", + "pinyin": "MeiHeKouShi", + "pinyinFirst": "MHKS", + "capital": "新华街道", + "population": 59, + "area": 2175, + "areaCode": "0435", + "zipCode": "135000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643549257, + "parentId": 653116643549253, + "name": "集安市", + "shortName": null, + "level": 3, + "code": "220582", + "pinyin": "JiAnShi", + "pinyinFirst": "JAS", + "capital": "黎明街道", + "population": 21, + "area": 3408, + "areaCode": "0435", + "zipCode": "134200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643553349, + "parentId": 653116643549253, + "name": "通化县", + "shortName": null, + "level": 3, + "code": "220521", + "pinyin": "TongHuaXian", + "pinyinFirst": "THX", + "capital": "快大茂镇", + "population": 23, + "area": 3554, + "areaCode": "0435", + "zipCode": "134100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643553350, + "parentId": 653116643549253, + "name": "辉南县", + "shortName": null, + "level": 3, + "code": "220523", + "pinyin": "HuiNanXian", + "pinyinFirst": "HNX", + "capital": "朝辉街道", + "population": 32, + "area": 2277, + "areaCode": "0435", + "zipCode": "135100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643553351, + "parentId": 653116643549253, + "name": "柳河县", + "shortName": null, + "level": 3, + "code": "220524", + "pinyin": "LiuHeXian", + "pinyinFirst": "LHX", + "capital": "中岗街道", + "population": 36, + "area": 3348, + "areaCode": "0435", + "zipCode": "135300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643676229, + "parentId": 653116642103365, + "name": "白山市", + "shortName": null, + "level": 2, + "code": "220600", + "pinyin": "BaiShanShi", + "pinyinFirst": "BSS", + "capital": "浑江区", + "population": 117, + "area": 17485, + "areaCode": "0439", + "zipCode": "134300", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116643680325, + "parentId": 653116643676229, + "name": "浑江区", + "shortName": null, + "level": 3, + "code": "220602", + "pinyin": "HunJiangQu", + "pinyinFirst": "HJQ", + "capital": "新建街道", + "population": 32, + "area": 1388, + "areaCode": "0439", + "zipCode": "134300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643680326, + "parentId": 653116643676229, + "name": "江源区", + "shortName": null, + "level": 3, + "code": "220605", + "pinyin": "JiangYuanQu", + "pinyinFirst": "JYQ", + "capital": "江源街道", + "population": 20, + "area": 1348, + "areaCode": "0439", + "zipCode": "134700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643680327, + "parentId": 653116643676229, + "name": "临江市", + "shortName": null, + "level": 3, + "code": "220681", + "pinyin": "LinJiangShi", + "pinyinFirst": "LJS", + "capital": "建国街道", + "population": 15, + "area": 3009, + "areaCode": "0439", + "zipCode": "134600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643680328, + "parentId": 653116643676229, + "name": "抚松县", + "shortName": null, + "level": 3, + "code": "220621", + "pinyin": "FuSongXian", + "pinyinFirst": "FSX", + "capital": "抚松镇", + "population": 28, + "area": 6150, + "areaCode": "0439", + "zipCode": "134500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643680329, + "parentId": 653116643676229, + "name": "靖宇县", + "shortName": null, + "level": 3, + "code": "220622", + "pinyin": "JingYuXian", + "pinyinFirst": "JYX", + "capital": "靖宇镇", + "population": 13, + "area": 3094, + "areaCode": "0439", + "zipCode": "135200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643680330, + "parentId": 653116643676229, + "name": "长白朝鲜族自治县", + "shortName": null, + "level": 3, + "code": "220623", + "pinyin": "ChangBaiChaoXianZuZiZhiXian", + "pinyinFirst": "CBCXZZZX", + "capital": "长白镇", + "population": 8, + "area": 2496, + "areaCode": "0439", + "zipCode": "134400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643807301, + "parentId": 653116642103365, + "name": "松原市", + "shortName": null, + "level": 2, + "code": "220700", + "pinyin": "SongYuanShi", + "pinyinFirst": "SYS", + "capital": "宁江区", + "population": 275, + "area": 20159, + "areaCode": "0438", + "zipCode": "138000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116643807302, + "parentId": 653116643807301, + "name": "宁江区", + "shortName": null, + "level": 3, + "code": "220702", + "pinyin": "NingJiangQu", + "pinyinFirst": "NJQ", + "capital": "团结街道", + "population": 56, + "area": 1576, + "areaCode": "0438", + "zipCode": "138000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643807303, + "parentId": 653116643807301, + "name": "扶余市", + "shortName": null, + "level": 3, + "code": "220781", + "pinyin": "FuYuShi", + "pinyinFirst": "FYS", + "capital": "育才街道", + "population": 71, + "area": 4189, + "areaCode": "0438", + "zipCode": "131200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643807304, + "parentId": 653116643807301, + "name": "长岭县", + "shortName": null, + "level": 3, + "code": "220722", + "pinyin": "ChangLingXian", + "pinyinFirst": "CLX", + "capital": "长盛街道", + "population": 63, + "area": 5787, + "areaCode": "0438", + "zipCode": "131500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643807305, + "parentId": 653116643807301, + "name": "乾安县", + "shortName": null, + "level": 3, + "code": "220723", + "pinyin": "QianAnXian", + "pinyinFirst": "QAX", + "capital": "荣业街道", + "population": 27, + "area": 3522, + "areaCode": "0438", + "zipCode": "131400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643807306, + "parentId": 653116643807301, + "name": "前郭尔罗斯蒙古族自治县", + "shortName": null, + "level": 3, + "code": "220721", + "pinyin": "QianGuoErLuoSiMengGuZuZiZhiXian", + "pinyinFirst": "QGELSMGZZZX", + "capital": "前郭尔罗斯镇", + "population": 57, + "area": 5085, + "areaCode": "0438", + "zipCode": "138000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643942469, + "parentId": 653116642103365, + "name": "白城市", + "shortName": null, + "level": 2, + "code": "220800", + "pinyin": "BaiChengShi", + "pinyinFirst": "BCS", + "capital": "洮北区", + "population": 189, + "area": 25683, + "areaCode": "0436", + "zipCode": "137000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116643946565, + "parentId": 653116643942469, + "name": "洮北区", + "shortName": null, + "level": 3, + "code": "220802", + "pinyin": "TaoBeiQu", + "pinyinFirst": "TBQ", + "capital": "明仁街道", + "population": 48, + "area": 2525, + "areaCode": "0436", + "zipCode": "137000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643946566, + "parentId": 653116643942469, + "name": "洮南市", + "shortName": null, + "level": 3, + "code": "220881", + "pinyin": "TaoNanShi", + "pinyinFirst": "TNS", + "capital": "光明街道", + "population": 40, + "area": 5108, + "areaCode": "0436", + "zipCode": "137100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643946567, + "parentId": 653116643942469, + "name": "大安市", + "shortName": null, + "level": 3, + "code": "220882", + "pinyin": "DaAnShi", + "pinyinFirst": "DAS", + "capital": "锦华街道", + "population": 38, + "area": 4879, + "areaCode": "0436", + "zipCode": "131300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643946568, + "parentId": 653116643942469, + "name": "镇赉县", + "shortName": null, + "level": 3, + "code": "220821", + "pinyin": "ZhenLaiXian", + "pinyinFirst": "ZLX", + "capital": "镇赉镇", + "population": 26, + "area": 4695, + "areaCode": "0436", + "zipCode": "137300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116643946569, + "parentId": 653116643942469, + "name": "通榆县", + "shortName": null, + "level": 3, + "code": "220822", + "pinyin": "TongYuXian", + "pinyinFirst": "TYX", + "capital": "八区街道", + "population": 35, + "area": 8476, + "areaCode": "0436", + "zipCode": "137200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116644085829, + "parentId": 653116642103365, + "name": "延边朝鲜族自治州", + "shortName": null, + "level": 2, + "code": "222400", + "pinyin": "YanBianChaoXianZuZiZhiZhou", + "pinyinFirst": "YBCXZZZZ", + "capital": "延吉市", + "population": 207, + "area": 43474, + "areaCode": "0433", + "zipCode": "133000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116644085830, + "parentId": 653116644085829, + "name": "延吉市", + "shortName": null, + "level": 3, + "code": "222401", + "pinyin": "YanJiShi", + "pinyinFirst": "YJS", + "capital": "新兴街道", + "population": 56, + "area": 1731, + "areaCode": "0433", + "zipCode": "133000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116644085831, + "parentId": 653116644085829, + "name": "图们市", + "shortName": null, + "level": 3, + "code": "222402", + "pinyin": "TuMenShi", + "pinyinFirst": "TMS", + "capital": "向上街道", + "population": 11, + "area": 1142, + "areaCode": "0433", + "zipCode": "133100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116644085832, + "parentId": 653116644085829, + "name": "敦化市", + "shortName": null, + "level": 3, + "code": "222403", + "pinyin": "DunHuaShi", + "pinyinFirst": "DHS", + "capital": "民主街道", + "population": 45, + "area": 11963, + "areaCode": "0433", + "zipCode": "133700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116644085833, + "parentId": 653116644085829, + "name": "珲春市", + "shortName": null, + "level": 3, + "code": "222404", + "pinyin": "HunChunShi", + "pinyinFirst": "HCS", + "capital": "河南街道", + "population": 23, + "area": 4938, + "areaCode": "0433", + "zipCode": "133300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116644085834, + "parentId": 653116644085829, + "name": "龙井市", + "shortName": null, + "level": 3, + "code": "222405", + "pinyin": "LongJingShi", + "pinyinFirst": "LJS", + "capital": "安民街道", + "population": 15, + "area": 2193, + "areaCode": "0433", + "zipCode": "133400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116644085835, + "parentId": 653116644085829, + "name": "和龙市", + "shortName": null, + "level": 3, + "code": "222406", + "pinyin": "HeLongShi", + "pinyinFirst": "HLS", + "capital": "文化街道", + "population": 16, + "area": 5069, + "areaCode": "0433", + "zipCode": "133500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116644085836, + "parentId": 653116644085829, + "name": "汪清县", + "shortName": null, + "level": 3, + "code": "222424", + "pinyin": "WangQingXian", + "pinyinFirst": "WQX", + "capital": "大川街道", + "population": 22, + "area": 8994, + "areaCode": "0433", + "zipCode": "133200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116644085837, + "parentId": 653116644085829, + "name": "安图县", + "shortName": null, + "level": 3, + "code": "222426", + "pinyin": "AnTuXian", + "pinyinFirst": "ATX", + "capital": "九龙街道", + "population": 19, + "area": 7444, + "areaCode": "0433", + "zipCode": "133600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:27", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:13:59" + }, + { + "id": 653116644233285, + "parentId": 0, + "name": "黑龙江省", + "shortName": "黑", + "level": 1, + "code": "230000", + "pinyin": "HeiLongJiangSheng", + "pinyinFirst": "HLJS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116646105157, + "parentId": 653116644233285, + "name": "哈尔滨市", + "shortName": null, + "level": 2, + "code": "230100", + "pinyin": "HaErBinShi", + "pinyinFirst": "HEBS", + "capital": "松北区", + "population": 951, + "area": 53186, + "areaCode": "0451", + "zipCode": "150000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116646105158, + "parentId": 653116646105157, + "name": "松北区", + "shortName": null, + "level": 3, + "code": "230109", + "pinyin": "SongBeiQu", + "pinyinFirst": "SBQ", + "capital": "松北街道", + "population": 23, + "area": 736, + "areaCode": "0451", + "zipCode": "150028", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105159, + "parentId": 653116646105157, + "name": "道里区", + "shortName": null, + "level": 3, + "code": "230102", + "pinyin": "DaoLiQu", + "pinyinFirst": "DLQ", + "capital": "抚顺街道", + "population": 79, + "area": 479, + "areaCode": "0451", + "zipCode": "150010", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105160, + "parentId": 653116646105157, + "name": "南岗区", + "shortName": null, + "level": 3, + "code": "230103", + "pinyin": "NanGangQu", + "pinyinFirst": "NGQ", + "capital": "大成街道", + "population": 105, + "area": 192, + "areaCode": "0451", + "zipCode": "150006", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105161, + "parentId": 653116646105157, + "name": "道外区", + "shortName": null, + "level": 3, + "code": "230104", + "pinyin": "DaoWaiQu", + "pinyinFirst": "DWQ", + "capital": "大兴街道", + "population": 64, + "area": 619, + "areaCode": "0451", + "zipCode": "150020", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105162, + "parentId": 653116646105157, + "name": "平房区", + "shortName": null, + "level": 3, + "code": "230108", + "pinyin": "PingFangQu", + "pinyinFirst": "PFQ", + "capital": "友协街道", + "population": 15, + "area": 94, + "areaCode": "0451", + "zipCode": "150060", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105163, + "parentId": 653116646105157, + "name": "香坊区", + "shortName": null, + "level": 3, + "code": "230110", + "pinyin": "XiangFangQu", + "pinyinFirst": "XFQ", + "capital": "香坊大街街道", + "population": 74, + "area": 340, + "areaCode": "0451", + "zipCode": "150036", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105164, + "parentId": 653116646105157, + "name": "呼兰区", + "shortName": null, + "level": 3, + "code": "230111", + "pinyin": "HuLanQu", + "pinyinFirst": "HLQ", + "capital": "南京路街道", + "population": 61, + "area": 2197, + "areaCode": "0451", + "zipCode": "150500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105165, + "parentId": 653116646105157, + "name": "阿城区", + "shortName": null, + "level": 3, + "code": "230112", + "pinyin": "AChengQu", + "pinyinFirst": "ACQ", + "capital": "金城街道", + "population": 54, + "area": 2445, + "areaCode": "0451", + "zipCode": "150300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105166, + "parentId": 653116646105157, + "name": "双城区", + "shortName": null, + "level": 3, + "code": "230113", + "pinyin": "ShuangChengQu", + "pinyinFirst": "SCQ", + "capital": "永治街道", + "population": 77, + "area": 3112, + "areaCode": "0451", + "zipCode": "150100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105167, + "parentId": 653116646105157, + "name": "尚志市", + "shortName": null, + "level": 3, + "code": "230183", + "pinyin": "ShangZhiShi", + "pinyinFirst": "SZS", + "capital": "尚志镇", + "population": 56, + "area": 8891, + "areaCode": "0451", + "zipCode": "150600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105168, + "parentId": 653116646105157, + "name": "五常市", + "shortName": null, + "level": 3, + "code": "230184", + "pinyin": "WuChangShi", + "pinyinFirst": "WCS", + "capital": "五常镇", + "population": 89, + "area": 7512, + "areaCode": "0451", + "zipCode": "150200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105169, + "parentId": 653116646105157, + "name": "依兰县", + "shortName": null, + "level": 3, + "code": "230123", + "pinyin": "YiLanXian", + "pinyinFirst": "YLX", + "capital": "依兰镇", + "population": 38, + "area": 4616, + "areaCode": "0451", + "zipCode": "154800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105170, + "parentId": 653116646105157, + "name": "方正县", + "shortName": null, + "level": 3, + "code": "230124", + "pinyin": "FangZhengXian", + "pinyinFirst": "FZX", + "capital": "方正镇", + "population": 22, + "area": 2969, + "areaCode": "0451", + "zipCode": "150800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105171, + "parentId": 653116646105157, + "name": "宾县", + "shortName": null, + "level": 3, + "code": "230125", + "pinyin": "BinXian", + "pinyinFirst": "BX", + "capital": "宾州镇", + "population": 57, + "area": 3845, + "areaCode": "0451", + "zipCode": "150400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105172, + "parentId": 653116646105157, + "name": "巴彦县", + "shortName": null, + "level": 3, + "code": "230126", + "pinyin": "BaYanXian", + "pinyinFirst": "BYX", + "capital": "巴彦镇", + "population": 64, + "area": 3135, + "areaCode": "0451", + "zipCode": "151800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105173, + "parentId": 653116646105157, + "name": "木兰县", + "shortName": null, + "level": 3, + "code": "230127", + "pinyin": "MuLanXian", + "pinyinFirst": "MLX", + "capital": "木兰镇", + "population": 25, + "area": 3179, + "areaCode": "0451", + "zipCode": "151900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105174, + "parentId": 653116646105157, + "name": "通河县", + "shortName": null, + "level": 3, + "code": "230128", + "pinyin": "TongHeXian", + "pinyinFirst": "THX", + "capital": "通河镇", + "population": 23, + "area": 5675, + "areaCode": "0451", + "zipCode": "150900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646105175, + "parentId": 653116646105157, + "name": "延寿县", + "shortName": null, + "level": 3, + "code": "230129", + "pinyin": "YanShouXian", + "pinyinFirst": "YSX", + "capital": "延寿镇", + "population": 25, + "area": 3150, + "areaCode": "0451", + "zipCode": "150700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646191173, + "parentId": 653116644233285, + "name": "齐齐哈尔市", + "shortName": null, + "level": 2, + "code": "230200", + "pinyin": "QiQiHaErShi", + "pinyinFirst": "QQHES", + "capital": "建华区", + "population": 527, + "area": 44287, + "areaCode": "0452", + "zipCode": "161000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116646195269, + "parentId": 653116646191173, + "name": "建华区", + "shortName": null, + "level": 3, + "code": "230203", + "pinyin": "JianHuaQu", + "pinyinFirst": "JHQ", + "capital": "卜奎街道", + "population": 26, + "area": 853, + "areaCode": "0452", + "zipCode": "161006", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195270, + "parentId": 653116646191173, + "name": "龙沙区", + "shortName": null, + "level": 3, + "code": "230202", + "pinyin": "LongShaQu", + "pinyinFirst": "LSQ", + "capital": "南航街道", + "population": 28, + "area": 188, + "areaCode": "0452", + "zipCode": "161005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195271, + "parentId": 653116646191173, + "name": "铁锋区", + "shortName": null, + "level": 3, + "code": "230204", + "pinyin": "TieFengQu", + "pinyinFirst": "TFQ", + "capital": "龙华街道", + "population": 26, + "area": 695, + "areaCode": "0452", + "zipCode": "161002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195272, + "parentId": 653116646191173, + "name": "昂昂溪区", + "shortName": null, + "level": 3, + "code": "230205", + "pinyin": "AngAngXiQu", + "pinyinFirst": "AAXQ", + "capital": "新兴街道", + "population": 7, + "area": 1166, + "areaCode": "0452", + "zipCode": "161031", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195273, + "parentId": 653116646191173, + "name": "富拉尔基区", + "shortName": null, + "level": 3, + "code": "230206", + "pinyin": "FuLaErJiQu", + "pinyinFirst": "FLEJQ", + "capital": "红岸街道", + "population": 21, + "area": 375, + "areaCode": "0452", + "zipCode": "161002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195274, + "parentId": 653116646191173, + "name": "碾子山区", + "shortName": null, + "level": 3, + "code": "230207", + "pinyin": "NianZiShanQu", + "pinyinFirst": "NZSQ", + "capital": "繁荣街道", + "population": 7, + "area": 357, + "areaCode": "0452", + "zipCode": "161046", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195275, + "parentId": 653116646191173, + "name": "梅里斯达斡尔族区", + "shortName": null, + "level": 3, + "code": "230208", + "pinyin": "MeiLiSiDaWoErZuQu", + "pinyinFirst": "MLSDWEZQ", + "capital": "梅里斯街道", + "population": 16, + "area": 1948, + "areaCode": "0452", + "zipCode": "161021", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195276, + "parentId": 653116646191173, + "name": "讷河市", + "shortName": null, + "level": 3, + "code": "230281", + "pinyin": "NeHeShi", + "pinyinFirst": "NHS", + "capital": "通江街道", + "population": 68, + "area": 6664, + "areaCode": "0452", + "zipCode": "161300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195277, + "parentId": 653116646191173, + "name": "龙江县", + "shortName": null, + "level": 3, + "code": "230221", + "pinyin": "LongJiangXian", + "pinyinFirst": "LJX", + "capital": "龙江镇", + "population": 58, + "area": 6197, + "areaCode": "0452", + "zipCode": "161100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195278, + "parentId": 653116646191173, + "name": "依安县", + "shortName": null, + "level": 3, + "code": "230223", + "pinyin": "YiAnXian", + "pinyinFirst": "YAX", + "capital": "依安镇", + "population": 46, + "area": 3780, + "areaCode": "0452", + "zipCode": "161500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195279, + "parentId": 653116646191173, + "name": "泰来县", + "shortName": null, + "level": 3, + "code": "230224", + "pinyin": "TaiLaiXian", + "pinyinFirst": "TLX", + "capital": "泰来镇", + "population": 30, + "area": 4061, + "areaCode": "0452", + "zipCode": "162400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195280, + "parentId": 653116646191173, + "name": "甘南县", + "shortName": null, + "level": 3, + "code": "230225", + "pinyin": "GanNanXian", + "pinyinFirst": "GNX", + "capital": "甘南镇", + "population": 37, + "area": 4384, + "areaCode": "0452", + "zipCode": "162100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195281, + "parentId": 653116646191173, + "name": "富裕县", + "shortName": null, + "level": 3, + "code": "230227", + "pinyin": "FuYuXian", + "pinyinFirst": "FYX", + "capital": "富裕镇", + "population": 28, + "area": 4335, + "areaCode": "0452", + "zipCode": "161200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195282, + "parentId": 653116646191173, + "name": "克山县", + "shortName": null, + "level": 3, + "code": "230229", + "pinyin": "KeShanXian", + "pinyinFirst": "KSX", + "capital": "克山镇", + "population": 46, + "area": 3632, + "areaCode": "0452", + "zipCode": "161600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195283, + "parentId": 653116646191173, + "name": "克东县", + "shortName": null, + "level": 3, + "code": "230230", + "pinyin": "KeDongXian", + "pinyinFirst": "KDX", + "capital": "克东镇", + "population": 28, + "area": 2083, + "areaCode": "0452", + "zipCode": "164800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646195284, + "parentId": 653116646191173, + "name": "拜泉县", + "shortName": null, + "level": 3, + "code": "230231", + "pinyin": "BaiQuanXian", + "pinyinFirst": "BQX", + "capital": "拜泉镇", + "population": 55, + "area": 3569, + "areaCode": "0452", + "zipCode": "164700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646301765, + "parentId": 653116644233285, + "name": "鸡西市", + "shortName": null, + "level": 2, + "code": "230300", + "pinyin": "JiXiShi", + "pinyinFirst": "JXS", + "capital": "鸡冠区", + "population": 169, + "area": 22551, + "areaCode": "0467", + "zipCode": "158100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116646305861, + "parentId": 653116646301765, + "name": "鸡冠区", + "shortName": null, + "level": 3, + "code": "230302", + "pinyin": "JiGuanQu", + "pinyinFirst": "JGQ", + "capital": "红军路街道", + "population": 35, + "area": 148, + "areaCode": "0467", + "zipCode": "158100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646305862, + "parentId": 653116646301765, + "name": "恒山区", + "shortName": null, + "level": 3, + "code": "230303", + "pinyin": "HengShanQu", + "pinyinFirst": "HSQ", + "capital": "奋斗街道", + "population": 13, + "area": 587, + "areaCode": "0467", + "zipCode": "158130", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646305863, + "parentId": 653116646301765, + "name": "滴道区", + "shortName": null, + "level": 3, + "code": "230304", + "pinyin": "DiDaoQu", + "pinyinFirst": "DDQ", + "capital": "东兴街道", + "population": 9, + "area": 500, + "areaCode": "0467", + "zipCode": "158150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646305864, + "parentId": 653116646301765, + "name": "梨树区", + "shortName": null, + "level": 3, + "code": "230305", + "pinyin": "LiShuQu", + "pinyinFirst": "LSQ", + "capital": "梨树街道", + "population": 7, + "area": 412, + "areaCode": "0467", + "zipCode": "158160", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646305865, + "parentId": 653116646301765, + "name": "城子河区", + "shortName": null, + "level": 3, + "code": "230306", + "pinyin": "ChengZiHeQu", + "pinyinFirst": "CZHQ", + "capital": "城子河街道", + "population": 10, + "area": 181, + "areaCode": "0467", + "zipCode": "158170", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646305866, + "parentId": 653116646301765, + "name": "麻山区", + "shortName": null, + "level": 3, + "code": "230307", + "pinyin": "MaShanQu", + "pinyinFirst": "MSQ", + "capital": "麻山街道", + "population": 3, + "area": 425, + "areaCode": "0467", + "zipCode": "158180", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646305867, + "parentId": 653116646301765, + "name": "虎林市", + "shortName": null, + "level": 3, + "code": "230381", + "pinyin": "HuLinShi", + "pinyinFirst": "HLS", + "capital": "虎林镇", + "population": 27, + "area": 9334, + "areaCode": "0467", + "zipCode": "158400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646305868, + "parentId": 653116646301765, + "name": "密山市", + "shortName": null, + "level": 3, + "code": "230382", + "pinyin": "MiShanShi", + "pinyinFirst": "MSS", + "capital": "密山镇", + "population": 39, + "area": 7731, + "areaCode": "0467", + "zipCode": "158300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646305869, + "parentId": 653116646301765, + "name": "鸡东县", + "shortName": null, + "level": 3, + "code": "230321", + "pinyin": "JiDongXian", + "pinyinFirst": "JDX", + "capital": "鸡东镇", + "population": 27, + "area": 3233, + "areaCode": "0467", + "zipCode": "158200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646445125, + "parentId": 653116644233285, + "name": "鹤岗市", + "shortName": null, + "level": 2, + "code": "230400", + "pinyin": "HeGangShi", + "pinyinFirst": "HGS", + "capital": "向阳区", + "population": 98, + "area": 14665, + "areaCode": "0468", + "zipCode": "154100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116646445126, + "parentId": 653116646445125, + "name": "向阳区", + "shortName": null, + "level": 3, + "code": "230402", + "pinyin": "XiangYangQu", + "pinyinFirst": "XYQ", + "capital": "光明街道", + "population": 8, + "area": 8, + "areaCode": "0468", + "zipCode": "154003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646445127, + "parentId": 653116646445125, + "name": "工农区", + "shortName": null, + "level": 3, + "code": "230403", + "pinyin": "GongNongQu", + "pinyinFirst": "GNQ", + "capital": "红旗街道", + "population": 14, + "area": 12, + "areaCode": "0468", + "zipCode": "154101", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646445128, + "parentId": 653116646445125, + "name": "南山区", + "shortName": null, + "level": 3, + "code": "230404", + "pinyin": "NanShanQu", + "pinyinFirst": "NSQ", + "capital": "铁西街道", + "population": 12, + "area": 31, + "areaCode": "0468", + "zipCode": "154104", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646445129, + "parentId": 653116646445125, + "name": "兴安区", + "shortName": null, + "level": 3, + "code": "230405", + "pinyin": "XingAnQu", + "pinyinFirst": "XAQ", + "capital": "兴安街道", + "population": 12, + "area": 254, + "areaCode": "0468", + "zipCode": "154102", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646445130, + "parentId": 653116646445125, + "name": "东山区", + "shortName": null, + "level": 3, + "code": "230406", + "pinyin": "DongShanQu", + "pinyinFirst": "DSQ", + "capital": "东山街道", + "population": 11, + "area": 4220, + "areaCode": "0468", + "zipCode": "154106", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646445131, + "parentId": 653116646445125, + "name": "兴山区", + "shortName": null, + "level": 3, + "code": "230407", + "pinyin": "XingShanQu", + "pinyinFirst": "XSQ", + "capital": "沟南街道", + "population": 4, + "area": 28, + "areaCode": "0468", + "zipCode": "154105", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646445132, + "parentId": 653116646445125, + "name": "萝北县", + "shortName": null, + "level": 3, + "code": "230421", + "pinyin": "LuoBeiXian", + "pinyinFirst": "LBX", + "capital": "凤翔镇", + "population": 21, + "area": 6768, + "areaCode": "0468", + "zipCode": "154200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646445133, + "parentId": 653116646445125, + "name": "绥滨县", + "shortName": null, + "level": 3, + "code": "230422", + "pinyin": "SuiBinXian", + "pinyinFirst": "SBX", + "capital": "绥滨镇", + "population": 18, + "area": 3344, + "areaCode": "0468", + "zipCode": "156200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646584389, + "parentId": 653116644233285, + "name": "双鸭山市", + "shortName": null, + "level": 2, + "code": "230500", + "pinyin": "ShuangYaShanShi", + "pinyinFirst": "SYSS", + "capital": "尖山区", + "population": 141, + "area": 22802, + "areaCode": "0469", + "zipCode": "155100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116646588485, + "parentId": 653116646584389, + "name": "尖山区", + "shortName": null, + "level": 3, + "code": "230502", + "pinyin": "JianShanQu", + "pinyinFirst": "JSQ", + "capital": "铁西街道", + "population": 24, + "area": 118, + "areaCode": "0469", + "zipCode": "155100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646588486, + "parentId": 653116646584389, + "name": "岭东区", + "shortName": null, + "level": 3, + "code": "230503", + "pinyin": "LingDongQu", + "pinyinFirst": "LDQ", + "capital": "北山街道", + "population": 5, + "area": 802, + "areaCode": "0469", + "zipCode": "155120", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646588487, + "parentId": 653116646584389, + "name": "四方台区", + "shortName": null, + "level": 3, + "code": "230505", + "pinyin": "SiFangTaiQu", + "pinyinFirst": "SFTQ", + "capital": "振兴中路街道", + "population": 6, + "area": 225, + "areaCode": "0469", + "zipCode": "155130", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646588488, + "parentId": 653116646584389, + "name": "宝山区", + "shortName": null, + "level": 3, + "code": "230506", + "pinyin": "BaoShanQu", + "pinyinFirst": "BSQ", + "capital": "红旗街道", + "population": 11, + "area": 750, + "areaCode": "0469", + "zipCode": "155131", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646588489, + "parentId": 653116646584389, + "name": "集贤县", + "shortName": null, + "level": 3, + "code": "230521", + "pinyin": "JiXianXian", + "pinyinFirst": "JXX", + "capital": "福利镇", + "population": 29, + "area": 2253, + "areaCode": "0469", + "zipCode": "155900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646588490, + "parentId": 653116646584389, + "name": "友谊县", + "shortName": null, + "level": 3, + "code": "230522", + "pinyin": "YouYiXian", + "pinyinFirst": "YYX", + "capital": "友谊镇", + "population": 12, + "area": 1888, + "areaCode": "0469", + "zipCode": "155800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646588491, + "parentId": 653116646584389, + "name": "宝清县", + "shortName": null, + "level": 3, + "code": "230523", + "pinyin": "BaoQingXian", + "pinyinFirst": "BQX", + "capital": "宝清镇", + "population": 40, + "area": 10001, + "areaCode": "0469", + "zipCode": "155600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646588492, + "parentId": 653116646584389, + "name": "饶河县", + "shortName": null, + "level": 3, + "code": "230524", + "pinyin": "RaoHeXian", + "pinyinFirst": "RHX", + "capital": "饶河镇", + "population": 14, + "area": 6765, + "areaCode": "0469", + "zipCode": "155700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646744133, + "parentId": 653116644233285, + "name": "大庆市", + "shortName": null, + "level": 2, + "code": "230600", + "pinyin": "DaQingShi", + "pinyinFirst": "DQS", + "capital": "萨尔图区", + "population": 275, + "area": 21643, + "areaCode": "0459", + "zipCode": "163000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116646744134, + "parentId": 653116646744133, + "name": "萨尔图区", + "shortName": null, + "level": 3, + "code": "230602", + "pinyin": "SaErTuQu", + "pinyinFirst": "SETQ", + "capital": "格林街道", + "population": 39, + "area": 504, + "areaCode": "0459", + "zipCode": "163001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646744135, + "parentId": 653116646744133, + "name": "龙凤区", + "shortName": null, + "level": 3, + "code": "230603", + "pinyin": "LongFengQu", + "pinyinFirst": "LFQ", + "capital": "龙政街道", + "population": 19, + "area": 416, + "areaCode": "0459", + "zipCode": "163711", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646744136, + "parentId": 653116646744133, + "name": "让胡路区", + "shortName": null, + "level": 3, + "code": "230604", + "pinyin": "RangHuLuQu", + "pinyinFirst": "RHLQ", + "capital": "龙岗街道", + "population": 48, + "area": 1394, + "areaCode": "0459", + "zipCode": "163712", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646744137, + "parentId": 653116646744133, + "name": "红岗区", + "shortName": null, + "level": 3, + "code": "230605", + "pinyin": "HongGangQu", + "pinyinFirst": "HGQ", + "capital": "红岗街道", + "population": 10, + "area": 625, + "areaCode": "0459", + "zipCode": "163511", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646744138, + "parentId": 653116646744133, + "name": "大同区", + "shortName": null, + "level": 3, + "code": "230606", + "pinyin": "DaTongQu", + "pinyinFirst": "DTQ", + "capital": "和苑街道", + "population": 22, + "area": 2372, + "areaCode": "0459", + "zipCode": "163515", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646744139, + "parentId": 653116646744133, + "name": "肇州县", + "shortName": null, + "level": 3, + "code": "230621", + "pinyin": "ZhaoZhouXian", + "pinyinFirst": "ZZX", + "capital": "肇州镇", + "population": 43, + "area": 2445, + "areaCode": "0459", + "zipCode": "166400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646744140, + "parentId": 653116646744133, + "name": "肇源县", + "shortName": null, + "level": 3, + "code": "230622", + "pinyin": "ZhaoYuanXian", + "pinyinFirst": "ZYX", + "capital": "肇源镇", + "population": 44, + "area": 4120, + "areaCode": "0459", + "zipCode": "166500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646744141, + "parentId": 653116646744133, + "name": "林甸县", + "shortName": null, + "level": 3, + "code": "230623", + "pinyin": "LinDianXian", + "pinyinFirst": "LDX", + "capital": "林甸镇", + "population": 25, + "area": 3591, + "areaCode": "0459", + "zipCode": "166300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646744142, + "parentId": 653116646744133, + "name": "杜尔伯特蒙古族自治县", + "shortName": null, + "level": 3, + "code": "230624", + "pinyin": "DuErBoTeMengGuZuZiZhiXian", + "pinyinFirst": "DEBTMGZZZX", + "capital": "杜尔伯特镇", + "population": 24, + "area": 6176, + "areaCode": "0459", + "zipCode": "166200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646932549, + "parentId": 653116644233285, + "name": "伊春市", + "shortName": null, + "level": 2, + "code": "230700", + "pinyin": "YiChunShi", + "pinyinFirst": "YCS", + "capital": "伊美区", + "population": 110, + "area": 32825, + "areaCode": "0458", + "zipCode": "153000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116646936645, + "parentId": 653116646932549, + "name": "伊美区", + "shortName": null, + "level": 3, + "code": "230717", + "pinyin": "YiMeiQu", + "pinyinFirst": "YMQ", + "capital": "旭日街道", + "population": 20, + "area": 2719, + "areaCode": "0458", + "zipCode": "153099", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646936646, + "parentId": 653116646932549, + "name": "乌翠区", + "shortName": null, + "level": 3, + "code": "230718", + "pinyin": "WuCuiQu", + "pinyinFirst": "WCQ", + "capital": "曙光街道", + "population": 7, + "area": 2319, + "areaCode": "0458", + "zipCode": "153013", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646936647, + "parentId": 653116646932549, + "name": "友好区", + "shortName": null, + "level": 3, + "code": "230719", + "pinyin": "YouHaoQu", + "pinyinFirst": "YHQ", + "capital": "双子河街道", + "population": 7, + "area": 2991, + "areaCode": "0458", + "zipCode": "153031", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646936648, + "parentId": 653116646932549, + "name": "金林区", + "shortName": null, + "level": 3, + "code": "230751", + "pinyin": "JinLinQu", + "pinyinFirst": "JLQ", + "capital": "金山屯镇", + "population": 8, + "area": 2306, + "areaCode": "0458", + "zipCode": "153026", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646936649, + "parentId": 653116646932549, + "name": "铁力市", + "shortName": null, + "level": 3, + "code": "230781", + "pinyin": "TieLiShi", + "pinyinFirst": "TLS", + "capital": "铁力镇", + "population": 28, + "area": 3776, + "areaCode": "0458", + "zipCode": "152500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646936650, + "parentId": 653116646932549, + "name": "嘉荫县", + "shortName": null, + "level": 3, + "code": "230722", + "pinyin": "JiaYinXian", + "pinyinFirst": "JYX", + "capital": "朝阳镇", + "population": 7, + "area": 6739, + "areaCode": "0458", + "zipCode": "153200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646936651, + "parentId": 653116646932549, + "name": "汤旺县", + "shortName": null, + "level": 3, + "code": "230723", + "pinyin": "TangWangXian", + "pinyinFirst": "TWX", + "capital": "汤旺河镇", + "population": 5, + "area": 2142, + "areaCode": "0458", + "zipCode": "153037", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646936652, + "parentId": 653116646932549, + "name": "丰林县", + "shortName": null, + "level": 3, + "code": "230724", + "pinyin": "FengLinXian", + "pinyinFirst": "FLX", + "capital": "新青镇", + "population": 9, + "area": 2971, + "areaCode": "0458", + "zipCode": "153036", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646936653, + "parentId": 653116646932549, + "name": "大箐山县", + "shortName": null, + "level": 3, + "code": "230725", + "pinyin": "DaQingShanXian", + "pinyinFirst": "DQSX", + "capital": "带岭镇", + "population": 8, + "area": 3706, + "areaCode": "0458", + "zipCode": "153106", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116646936654, + "parentId": 653116646932549, + "name": "南岔县", + "shortName": null, + "level": 3, + "code": "230726", + "pinyin": "NanChaXian", + "pinyinFirst": "NCX", + "capital": "南岔镇", + "population": 11, + "area": 3084, + "areaCode": "0458", + "zipCode": "153199", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647137349, + "parentId": 653116644233285, + "name": "佳木斯市", + "shortName": null, + "level": 2, + "code": "230800", + "pinyin": "JiaMuSiShi", + "pinyinFirst": "JMSS", + "capital": "前进区", + "population": 232, + "area": 32470, + "areaCode": "0454", + "zipCode": "154000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116647137350, + "parentId": 653116647137349, + "name": "前进区", + "shortName": null, + "level": 3, + "code": "230804", + "pinyin": "QianJinQu", + "pinyinFirst": "QJQ", + "capital": "永安街道", + "population": 16, + "area": 16, + "areaCode": "0454", + "zipCode": "154002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647137351, + "parentId": 653116647137349, + "name": "向阳区", + "shortName": null, + "level": 3, + "code": "230803", + "pinyin": "XiangYangQu", + "pinyinFirst": "XYQ", + "capital": "桥南街道", + "population": 22, + "area": 41, + "areaCode": "0454", + "zipCode": "154002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647137352, + "parentId": 653116647137349, + "name": "东风区", + "shortName": null, + "level": 3, + "code": "230805", + "pinyin": "DongFengQu", + "pinyinFirst": "DFQ", + "capital": "建国街道", + "population": 12, + "area": 143, + "areaCode": "0454", + "zipCode": "154005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647137353, + "parentId": 653116647137349, + "name": "郊区", + "shortName": null, + "level": 3, + "code": "230811", + "pinyin": "JiaoQu", + "pinyinFirst": "JQ", + "capital": "红旗街道", + "population": 26, + "area": 1704, + "areaCode": "0454", + "zipCode": "154004", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647137354, + "parentId": 653116647137349, + "name": "同江市", + "shortName": null, + "level": 3, + "code": "230881", + "pinyin": "TongJiangShi", + "pinyinFirst": "TJS", + "capital": "同江镇", + "population": 17, + "area": 6229, + "areaCode": "0454", + "zipCode": "156400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647137355, + "parentId": 653116647137349, + "name": "富锦市", + "shortName": null, + "level": 3, + "code": "230882", + "pinyin": "FuJinShi", + "pinyinFirst": "FJS", + "capital": "城西街道", + "population": 45, + "area": 8224, + "areaCode": "0454", + "zipCode": "156100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647137356, + "parentId": 653116647137349, + "name": "抚远市", + "shortName": null, + "level": 3, + "code": "230883", + "pinyin": "FuYuanShi", + "pinyinFirst": "FYS", + "capital": "抚远镇", + "population": 8, + "area": 6047, + "areaCode": "0454", + "zipCode": "156500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647137357, + "parentId": 653116647137349, + "name": "桦南县", + "shortName": null, + "level": 3, + "code": "230822", + "pinyin": "HuaNanXian", + "pinyinFirst": "HNX", + "capital": "桦南镇", + "population": 41, + "area": 4418, + "areaCode": "0454", + "zipCode": "154400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647137358, + "parentId": 653116647137349, + "name": "桦川县", + "shortName": null, + "level": 3, + "code": "230826", + "pinyin": "HuaChuanXian", + "pinyinFirst": "HCX", + "capital": "悦来镇", + "population": 20, + "area": 2228, + "areaCode": "0454", + "zipCode": "154300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647137359, + "parentId": 653116647137349, + "name": "汤原县", + "shortName": null, + "level": 3, + "code": "230828", + "pinyin": "TangYuanXian", + "pinyinFirst": "TYX", + "capital": "汤原镇", + "population": 24, + "area": 3420, + "areaCode": "0454", + "zipCode": "154700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647338053, + "parentId": 653116644233285, + "name": "七台河市", + "shortName": null, + "level": 2, + "code": "230900", + "pinyin": "QiTaiHeShi", + "pinyinFirst": "QTHS", + "capital": "桃山区", + "population": 77, + "area": 6221, + "areaCode": "0464", + "zipCode": "154600", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116647342149, + "parentId": 653116647338053, + "name": "桃山区", + "shortName": null, + "level": 3, + "code": "230903", + "pinyin": "TaoShanQu", + "pinyinFirst": "TSQ", + "capital": "东进街", + "population": 19, + "area": 74, + "areaCode": "0464", + "zipCode": "154600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647342150, + "parentId": 653116647338053, + "name": "新兴区", + "shortName": null, + "level": 3, + "code": "230902", + "pinyin": "XinXingQu", + "pinyinFirst": "XXQ", + "capital": "环城公路", + "population": 17, + "area": 2003, + "areaCode": "0464", + "zipCode": "154604", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647342151, + "parentId": 653116647338053, + "name": "茄子河区", + "shortName": null, + "level": 3, + "code": "230904", + "pinyin": "QieZiHeQu", + "pinyinFirst": "QZHQ", + "capital": "东安街", + "population": 11, + "area": 1569, + "areaCode": "0464", + "zipCode": "154622", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647342152, + "parentId": 653116647338053, + "name": "勃利县", + "shortName": null, + "level": 3, + "code": "230921", + "pinyin": "BoLiXian", + "pinyinFirst": "BLX", + "capital": "勃利镇", + "population": 30, + "area": 2575, + "areaCode": "0464", + "zipCode": "154500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647534661, + "parentId": 653116644233285, + "name": "牡丹江市", + "shortName": null, + "level": 2, + "code": "231000", + "pinyin": "MuDanJiangShi", + "pinyinFirst": "MDJS", + "capital": "东安区", + "population": 250, + "area": 38827, + "areaCode": "0453", + "zipCode": "157000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116647538757, + "parentId": 653116647534661, + "name": "东安区", + "shortName": null, + "level": 3, + "code": "231002", + "pinyin": "DongAnQu", + "pinyinFirst": "DAQ", + "capital": "新安街道", + "population": 20, + "area": 581, + "areaCode": "0453", + "zipCode": "157000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647538758, + "parentId": 653116647534661, + "name": "阳明区", + "shortName": null, + "level": 3, + "code": "231003", + "pinyin": "YangMingQu", + "pinyinFirst": "YMQ", + "capital": "阳明街道", + "population": 21, + "area": 1096, + "areaCode": "0453", + "zipCode": "157013", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647538759, + "parentId": 653116647534661, + "name": "爱民区", + "shortName": null, + "level": 3, + "code": "231004", + "pinyin": "AiMinQu", + "pinyinFirst": "AMQ", + "capital": "向阳街道", + "population": 21, + "area": 437, + "areaCode": "0453", + "zipCode": "157009", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647538760, + "parentId": 653116647534661, + "name": "西安区", + "shortName": null, + "level": 3, + "code": "231005", + "pinyin": "XiAnQu", + "pinyinFirst": "XAQ", + "capital": "先峰街道", + "population": 24, + "area": 246, + "areaCode": "0453", + "zipCode": "157000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647538761, + "parentId": 653116647534661, + "name": "绥芬河市", + "shortName": null, + "level": 3, + "code": "231081", + "pinyin": "SuiFenHeShi", + "pinyinFirst": "SFHS", + "capital": "绥芬河镇", + "population": 7, + "area": 422, + "areaCode": "0453", + "zipCode": "157300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647538762, + "parentId": 653116647534661, + "name": "海林市", + "shortName": null, + "level": 3, + "code": "231083", + "pinyin": "HaiLinShi", + "pinyinFirst": "HLS", + "capital": "海林镇", + "population": 36, + "area": 8816, + "areaCode": "0453", + "zipCode": "157100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647538763, + "parentId": 653116647534661, + "name": "宁安市", + "shortName": null, + "level": 3, + "code": "231084", + "pinyin": "NingAnShi", + "pinyinFirst": "NAS", + "capital": "宁安镇", + "population": 41, + "area": 7227, + "areaCode": "0453", + "zipCode": "157400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647538764, + "parentId": 653116647534661, + "name": "穆棱市", + "shortName": null, + "level": 3, + "code": "231085", + "pinyin": "MuLingShi", + "pinyinFirst": "MLS", + "capital": "八面通镇", + "population": 27, + "area": 6247, + "areaCode": "0453", + "zipCode": "157500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647538765, + "parentId": 653116647534661, + "name": "东宁市", + "shortName": null, + "level": 3, + "code": "231086", + "pinyin": "DongNingShi", + "pinyinFirst": "DNS", + "capital": "东宁镇", + "population": 20, + "area": 7117, + "areaCode": "0453", + "zipCode": "157200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647538766, + "parentId": 653116647534661, + "name": "林口县", + "shortName": null, + "level": 3, + "code": "231025", + "pinyin": "LinKouXian", + "pinyinFirst": "LKX", + "capital": "林口镇", + "population": 33, + "area": 6638, + "areaCode": "0453", + "zipCode": "157600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647747653, + "parentId": 653116644233285, + "name": "黑河市", + "shortName": null, + "level": 2, + "code": "231100", + "pinyin": "HeiHeShi", + "pinyinFirst": "HHS", + "capital": "爱辉区", + "population": 158, + "area": 68285, + "areaCode": "0456", + "zipCode": "164300", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116647751749, + "parentId": 653116647747653, + "name": "爱辉区", + "shortName": null, + "level": 3, + "code": "231102", + "pinyin": "AiHuiQu", + "pinyinFirst": "AHQ", + "capital": "兴安街道", + "population": 18, + "area": 14446, + "areaCode": "0456", + "zipCode": "164300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647751750, + "parentId": 653116647747653, + "name": "北安市", + "shortName": null, + "level": 3, + "code": "231181", + "pinyin": "BeiAnShi", + "pinyinFirst": "BAS", + "capital": "铁西街道", + "population": 42, + "area": 7194, + "areaCode": "0456", + "zipCode": "164000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647751751, + "parentId": 653116647747653, + "name": "五大连池市", + "shortName": null, + "level": 3, + "code": "231182", + "pinyin": "WuDaLianChiShi", + "pinyinFirst": "WDLCS", + "capital": "青山街道", + "population": 33, + "area": 9874, + "areaCode": "0456", + "zipCode": "164100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647751752, + "parentId": 653116647747653, + "name": "嫩江市", + "shortName": null, + "level": 3, + "code": "231183", + "pinyin": "NenJiangShi", + "pinyinFirst": "NJS", + "capital": "嫩江镇", + "population": 46, + "area": 15109, + "areaCode": "0456", + "zipCode": "161400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647751753, + "parentId": 653116647747653, + "name": "逊克县", + "shortName": null, + "level": 3, + "code": "231123", + "pinyin": "XunKeXian", + "pinyinFirst": "XKX", + "capital": "奇克镇", + "population": 9, + "area": 17344, + "areaCode": "0456", + "zipCode": "164400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647751754, + "parentId": 653116647747653, + "name": "孙吴县", + "shortName": null, + "level": 3, + "code": "231124", + "pinyin": "SunWuXian", + "pinyinFirst": "SWX", + "capital": "孙吴镇", + "population": 9, + "area": 4318, + "areaCode": "0456", + "zipCode": "164200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647960645, + "parentId": 653116644233285, + "name": "绥化市", + "shortName": null, + "level": 2, + "code": "231200", + "pinyin": "SuiHuaShi", + "pinyinFirst": "SHS", + "capital": "北林区", + "population": 521, + "area": 35211, + "areaCode": "0455", + "zipCode": "152000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116647964741, + "parentId": 653116647960645, + "name": "北林区", + "shortName": null, + "level": 3, + "code": "231202", + "pinyin": "BeiLinQu", + "pinyinFirst": "BLQ", + "capital": "大有街道", + "population": 81, + "area": 2723, + "areaCode": "0455", + "zipCode": "152000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647964742, + "parentId": 653116647960645, + "name": "安达市", + "shortName": null, + "level": 3, + "code": "231281", + "pinyin": "AnDaShi", + "pinyinFirst": "ADS", + "capital": "安达镇", + "population": 45, + "area": 3586, + "areaCode": "0455", + "zipCode": "151400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647964743, + "parentId": 653116647960645, + "name": "肇东市", + "shortName": null, + "level": 3, + "code": "231282", + "pinyin": "ZhaoDongShi", + "pinyinFirst": "ZDS", + "capital": "肇东镇", + "population": 85, + "area": 4330, + "areaCode": "0455", + "zipCode": "151100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647964744, + "parentId": 653116647960645, + "name": "海伦市", + "shortName": null, + "level": 3, + "code": "231283", + "pinyin": "HaiLunShi", + "pinyinFirst": "HLS", + "capital": "海伦镇", + "population": 75, + "area": 4667, + "areaCode": "0455", + "zipCode": "152300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647964745, + "parentId": 653116647960645, + "name": "望奎县", + "shortName": null, + "level": 3, + "code": "231221", + "pinyin": "WangKuiXian", + "pinyinFirst": "WKX", + "capital": "望奎镇", + "population": 44, + "area": 2299, + "areaCode": "0455", + "zipCode": "152100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647964746, + "parentId": 653116647960645, + "name": "兰西县", + "shortName": null, + "level": 3, + "code": "231222", + "pinyin": "LanXiXian", + "pinyinFirst": "LXX", + "capital": "兰西镇", + "population": 48, + "area": 2499, + "areaCode": "0455", + "zipCode": "151500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647964747, + "parentId": 653116647960645, + "name": "青冈县", + "shortName": null, + "level": 3, + "code": "231223", + "pinyin": "QingGangXian", + "pinyinFirst": "QGX", + "capital": "青冈镇", + "population": 44, + "area": 2686, + "areaCode": "0455", + "zipCode": "151600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647964748, + "parentId": 653116647960645, + "name": "庆安县", + "shortName": null, + "level": 3, + "code": "231224", + "pinyin": "QingAnXian", + "pinyinFirst": "QAX", + "capital": "庆安镇", + "population": 36, + "area": 5607, + "areaCode": "0455", + "zipCode": "152400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647964749, + "parentId": 653116647960645, + "name": "明水县", + "shortName": null, + "level": 3, + "code": "231225", + "pinyin": "MingShuiXian", + "pinyinFirst": "MSX", + "capital": "明水镇", + "population": 33, + "area": 2308, + "areaCode": "0455", + "zipCode": "151700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116647964750, + "parentId": 653116647960645, + "name": "绥棱县", + "shortName": null, + "level": 3, + "code": "231226", + "pinyin": "SuiLengXian", + "pinyinFirst": "SLX", + "capital": "绥棱镇", + "population": 29, + "area": 4506, + "areaCode": "0455", + "zipCode": "152200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116648210501, + "parentId": 653116644233285, + "name": "大兴安岭地区", + "shortName": null, + "level": 2, + "code": "232700", + "pinyin": "DaXingAnLingDiQu", + "pinyinFirst": "DXALDQ", + "capital": "加格达奇", + "population": 42, + "area": 46755, + "areaCode": "0457", + "zipCode": "165000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116648210502, + "parentId": 653116648210501, + "name": "漠河市", + "shortName": null, + "level": 3, + "code": "232701", + "pinyin": "MoHeShi", + "pinyinFirst": "MHS", + "capital": "西林吉镇", + "population": 7, + "area": 18367, + "areaCode": "0457", + "zipCode": "165300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116648210503, + "parentId": 653116648210501, + "name": "呼玛县", + "shortName": null, + "level": 3, + "code": "232721", + "pinyin": "HuMaXian", + "pinyinFirst": "HMX", + "capital": "呼玛镇", + "population": 23, + "area": 14285, + "areaCode": "0457", + "zipCode": "165100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116648210504, + "parentId": 653116648210501, + "name": "塔河县", + "shortName": null, + "level": 3, + "code": "232722", + "pinyin": "TaHeXian", + "pinyinFirst": "THX", + "capital": "塔河镇", + "population": 7, + "area": 14103, + "areaCode": "0457", + "zipCode": "165200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:28", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:01" + }, + { + "id": 653116648448069, + "parentId": 0, + "name": "上海市", + "shortName": "沪", + "level": 1, + "code": "310000", + "pinyin": "ShangHaiShi", + "pinyinFirst": "SHS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116650135621, + "parentId": 653116648448069, + "name": "上海市", + "shortName": null, + "level": 2, + "code": "310000", + "pinyin": "ShangHaiShi", + "pinyinFirst": "SHS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116650135622, + "parentId": 653116650135621, + "name": "黄浦区", + "shortName": null, + "level": 3, + "code": "310101", + "pinyin": "HuangPuQu", + "pinyinFirst": "HPQ", + "capital": "外滩街道", + "population": 81, + "area": 20, + "areaCode": "021", + "zipCode": "200000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135623, + "parentId": 653116650135621, + "name": "徐汇区", + "shortName": null, + "level": 3, + "code": "310104", + "pinyin": "XuHuiQu", + "pinyinFirst": "XHQ", + "capital": "徐家汇街道", + "population": 92, + "area": 55, + "areaCode": "021", + "zipCode": "200030", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135624, + "parentId": 653116650135621, + "name": "长宁区", + "shortName": null, + "level": 3, + "code": "310105", + "pinyin": "ChangNingQu", + "pinyinFirst": "CNQ", + "capital": "江苏路街道", + "population": 58, + "area": 38, + "areaCode": "021", + "zipCode": "200050", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135625, + "parentId": 653116650135621, + "name": "静安区", + "shortName": null, + "level": 3, + "code": "310106", + "pinyin": "JingAnQu", + "pinyinFirst": "JAQ", + "capital": "江宁路街道", + "population": 92, + "area": 37, + "areaCode": "021", + "zipCode": "200040", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135626, + "parentId": 653116650135621, + "name": "普陀区", + "shortName": null, + "level": 3, + "code": "310107", + "pinyin": "PuTuoQu", + "pinyinFirst": "PTQ", + "capital": "真如镇街道", + "population": 89, + "area": 55, + "areaCode": "021", + "zipCode": "200333", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135627, + "parentId": 653116650135621, + "name": "虹口区", + "shortName": null, + "level": 3, + "code": "310109", + "pinyin": "HongKouQu", + "pinyinFirst": "HKQ", + "capital": "嘉兴路街道", + "population": 71, + "area": 23, + "areaCode": "021", + "zipCode": "200086", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135628, + "parentId": 653116650135621, + "name": "杨浦区", + "shortName": null, + "level": 3, + "code": "310110", + "pinyin": "YangPuQu", + "pinyinFirst": "YPQ", + "capital": "平凉路街道", + "population": 107, + "area": 61, + "areaCode": "021", + "zipCode": "200082", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135629, + "parentId": 653116650135621, + "name": "闵行区", + "shortName": null, + "level": 3, + "code": "310112", + "pinyin": "MinHangQu", + "pinyinFirst": "MHQ", + "capital": "莘庄镇", + "population": 116, + "area": 371, + "areaCode": "021", + "zipCode": "201100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135630, + "parentId": 653116650135621, + "name": "宝山区", + "shortName": null, + "level": 3, + "code": "310113", + "pinyin": "BaoShanQu", + "pinyinFirst": "BSQ", + "capital": "友谊路街道", + "population": 101, + "area": 271, + "areaCode": "021", + "zipCode": "201900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135631, + "parentId": 653116650135621, + "name": "嘉定区", + "shortName": null, + "level": 3, + "code": "310114", + "pinyin": "JiaDingQu", + "pinyinFirst": "JDQ", + "capital": "新成路街道", + "population": 66, + "area": 464, + "areaCode": "021", + "zipCode": "201800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135632, + "parentId": 653116650135621, + "name": "浦东新区", + "shortName": null, + "level": 3, + "code": "310115", + "pinyin": "PuDongXinQu", + "pinyinFirst": "PDXQ", + "capital": "花木街道", + "population": 307, + "area": 1210, + "areaCode": "021", + "zipCode": "200135", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135633, + "parentId": 653116650135621, + "name": "金山区", + "shortName": null, + "level": 3, + "code": "310116", + "pinyin": "JinShanQu", + "pinyinFirst": "JSQ", + "capital": "山阳镇", + "population": 52, + "area": 586, + "areaCode": "021", + "zipCode": "200540", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135634, + "parentId": 653116650135621, + "name": "松江区", + "shortName": null, + "level": 3, + "code": "310117", + "pinyin": "SongJiangQu", + "pinyinFirst": "SJQ", + "capital": "方松街道", + "population": 66, + "area": 606, + "areaCode": "021", + "zipCode": "201600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135635, + "parentId": 653116650135621, + "name": "青浦区", + "shortName": null, + "level": 3, + "code": "310118", + "pinyin": "QingPuQu", + "pinyinFirst": "QPQ", + "capital": "夏阳街道", + "population": 50, + "area": 670, + "areaCode": "021", + "zipCode": "201700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135636, + "parentId": 653116650135621, + "name": "奉贤区", + "shortName": null, + "level": 3, + "code": "310120", + "pinyin": "FengXianQu", + "pinyinFirst": "FXQ", + "capital": "南桥镇", + "population": 54, + "area": 687, + "areaCode": "021", + "zipCode": "201400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650135637, + "parentId": 653116650135621, + "name": "崇明区", + "shortName": null, + "level": 3, + "code": "310151", + "pinyin": "ChongMingQu", + "pinyinFirst": "CMQ", + "capital": "城桥镇", + "population": 68, + "area": 1185, + "areaCode": "021", + "zipCode": "202150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:03" + }, + { + "id": 653116650221637, + "parentId": 0, + "name": "江苏省", + "shortName": "苏", + "level": 1, + "code": "320000", + "pinyin": "JiangSuSheng", + "pinyinFirst": "JSS", + "capital": null, + "population": null, + "area": null, + "areaCode": "", + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116652068933, + "parentId": 653116650221637, + "name": "南京市", + "shortName": null, + "level": 2, + "code": "320100", + "pinyin": "NanJingShi", + "pinyinFirst": "NJS", + "capital": "玄武区", + "population": 710, + "area": 6586, + "areaCode": "025", + "zipCode": "210000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116652068934, + "parentId": 653116652068933, + "name": "玄武区", + "shortName": null, + "level": 3, + "code": "320102", + "pinyin": "XuanWuQu", + "pinyinFirst": "XWQ", + "capital": "梅园新村街道", + "population": 47, + "area": 75, + "areaCode": "025", + "zipCode": "210018", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652068935, + "parentId": 653116652068933, + "name": "秦淮区", + "shortName": null, + "level": 3, + "code": "320104", + "pinyin": "QinHuaiQu", + "pinyinFirst": "QHQ", + "capital": "五老村街道", + "population": 69, + "area": 49, + "areaCode": "025", + "zipCode": "210001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652068936, + "parentId": 653116652068933, + "name": "建邺区", + "shortName": null, + "level": 3, + "code": "320105", + "pinyin": "JianYeQu", + "pinyinFirst": "JYQ", + "capital": "莫愁湖街道", + "population": 41, + "area": 83, + "areaCode": "025", + "zipCode": "210019", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652068937, + "parentId": 653116652068933, + "name": "鼓楼区", + "shortName": null, + "level": 3, + "code": "320106", + "pinyin": "GuLouQu", + "pinyinFirst": "GLQ", + "capital": "宁海路街道", + "population": 92, + "area": 53, + "areaCode": "025", + "zipCode": "210009", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652068938, + "parentId": 653116652068933, + "name": "浦口区", + "shortName": null, + "level": 3, + "code": "320111", + "pinyin": "PuKouQu", + "pinyinFirst": "PKQ", + "capital": "江浦街道", + "population": 76, + "area": 911, + "areaCode": "025", + "zipCode": "211800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652068939, + "parentId": 653116652068933, + "name": "栖霞区", + "shortName": null, + "level": 3, + "code": "320113", + "pinyin": "QiXiaQu", + "pinyinFirst": "QXQ", + "capital": "尧化街道", + "population": 53, + "area": 395, + "areaCode": "025", + "zipCode": "210046", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652068940, + "parentId": 653116652068933, + "name": "雨花台区", + "shortName": null, + "level": 3, + "code": "320114", + "pinyin": "YuHuaTaiQu", + "pinyinFirst": "YHTQ", + "capital": "雨花街道", + "population": 31, + "area": 132, + "areaCode": "025", + "zipCode": "210012", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652068941, + "parentId": 653116652068933, + "name": "江宁区", + "shortName": null, + "level": 3, + "code": "320115", + "pinyin": "JiangNingQu", + "pinyinFirst": "JNQ", + "capital": "东山街道", + "population": 116, + "area": 1563, + "areaCode": "025", + "zipCode": "211100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652068942, + "parentId": 653116652068933, + "name": "六合区", + "shortName": null, + "level": 3, + "code": "320116", + "pinyin": "LiuHeQu", + "pinyinFirst": "LHQ", + "capital": "雄州街道", + "population": 94, + "area": 1471, + "areaCode": "025", + "zipCode": "211500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652068943, + "parentId": 653116652068933, + "name": "溧水区", + "shortName": null, + "level": 3, + "code": "320117", + "pinyin": "LiShuiQu", + "pinyinFirst": "LSQ", + "capital": "永阳街道", + "population": 45, + "area": 1064, + "areaCode": "025", + "zipCode": "211200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652068944, + "parentId": 653116652068933, + "name": "高淳区", + "shortName": null, + "level": 3, + "code": "320118", + "pinyin": "GaoChunQu", + "pinyinFirst": "GCQ", + "capital": "淳溪街道", + "population": 45, + "area": 790, + "areaCode": "025", + "zipCode": "211300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652146757, + "parentId": 653116650221637, + "name": "无锡市", + "shortName": null, + "level": 2, + "code": "320200", + "pinyin": "WuXiShi", + "pinyinFirst": "WXS", + "capital": "梁溪区", + "population": 503, + "area": 4572, + "areaCode": "0510", + "zipCode": "214000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116652150853, + "parentId": 653116652146757, + "name": "梁溪区", + "shortName": null, + "level": 3, + "code": "320213", + "pinyin": "LiangXiQu", + "pinyinFirst": "LXQ", + "capital": "崇安寺街道", + "population": 79, + "area": 72, + "areaCode": "0510", + "zipCode": "214001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652150854, + "parentId": 653116652146757, + "name": "锡山区", + "shortName": null, + "level": 3, + "code": "320205", + "pinyin": "XiShanQu", + "pinyinFirst": "XSQ", + "capital": "东亭街道", + "population": 47, + "area": 399, + "areaCode": "0510", + "zipCode": "214101", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652150855, + "parentId": 653116652146757, + "name": "惠山区", + "shortName": null, + "level": 3, + "code": "320206", + "pinyin": "HuiShanQu", + "pinyinFirst": "HSQ", + "capital": "堰桥街道", + "population": 50, + "area": 325, + "areaCode": "0510", + "zipCode": "214174", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652150856, + "parentId": 653116652146757, + "name": "滨湖区", + "shortName": null, + "level": 3, + "code": "320211", + "pinyin": "BinHuQu", + "pinyinFirst": "BHQ", + "capital": "蠡湖街道", + "population": 54, + "area": 572, + "areaCode": "0510", + "zipCode": "214123", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652150857, + "parentId": 653116652146757, + "name": "新吴区", + "shortName": null, + "level": 3, + "code": "320214", + "pinyin": "XinWuQu", + "pinyinFirst": "XWQ", + "capital": "新安街道", + "population": 38, + "area": 220, + "areaCode": "0510", + "zipCode": "214135", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652150858, + "parentId": 653116652146757, + "name": "江阴市", + "shortName": null, + "level": 3, + "code": "320281", + "pinyin": "JiangYinShi", + "pinyinFirst": "JYS", + "capital": "澄江街道", + "population": 126, + "area": 987, + "areaCode": "0510", + "zipCode": "214400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652150859, + "parentId": 653116652146757, + "name": "宜兴市", + "shortName": null, + "level": 3, + "code": "320282", + "pinyin": "YiXingShi", + "pinyinFirst": "YXS", + "capital": "宜城街道", + "population": 108, + "area": 1997, + "areaCode": "0510", + "zipCode": "214200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652257349, + "parentId": 653116650221637, + "name": "徐州市", + "shortName": null, + "level": 2, + "code": "320300", + "pinyin": "XuZhouShi", + "pinyinFirst": "XZS", + "capital": "云龙区", + "population": 1042, + "area": 11445, + "areaCode": "0516", + "zipCode": "221000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116652261445, + "parentId": 653116652257349, + "name": "云龙区", + "shortName": null, + "level": 3, + "code": "320303", + "pinyin": "YunLongQu", + "pinyinFirst": "YLQ", + "capital": "大郭庄街道", + "population": 38, + "area": 118, + "areaCode": "0516", + "zipCode": "221007", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652261446, + "parentId": 653116652257349, + "name": "鼓楼区", + "shortName": null, + "level": 3, + "code": "320302", + "pinyin": "GuLouQu", + "pinyinFirst": "GLQ", + "capital": "牌楼街道", + "population": 33, + "area": 66, + "areaCode": "0516", + "zipCode": "221005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652261447, + "parentId": 653116652257349, + "name": "贾汪区", + "shortName": null, + "level": 3, + "code": "320305", + "pinyin": "JiaWangQu", + "pinyinFirst": "JWQ", + "capital": "大泉街道", + "population": 52, + "area": 612, + "areaCode": "0516", + "zipCode": "221011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652261448, + "parentId": 653116652257349, + "name": "泉山区", + "shortName": null, + "level": 3, + "code": "320311", + "pinyin": "QuanShanQu", + "pinyinFirst": "QSQ", + "capital": "奎山街道", + "population": 57, + "area": 100, + "areaCode": "0516", + "zipCode": "221006", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652261449, + "parentId": 653116652257349, + "name": "铜山区", + "shortName": null, + "level": 3, + "code": "320312", + "pinyin": "TongShanQu", + "pinyinFirst": "TSQ", + "capital": "铜山街道", + "population": 133, + "area": 1871, + "areaCode": "0516", + "zipCode": "221100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652261450, + "parentId": 653116652257349, + "name": "新沂市", + "shortName": null, + "level": 3, + "code": "320381", + "pinyin": "XinYiShi", + "pinyinFirst": "XYS", + "capital": "新安街道", + "population": 112, + "area": 1571, + "areaCode": "0516", + "zipCode": "221400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652261451, + "parentId": 653116652257349, + "name": "邳州市", + "shortName": null, + "level": 3, + "code": "320382", + "pinyin": "PiZhouShi", + "pinyinFirst": "PZS", + "capital": "东湖街道", + "population": 194, + "area": 2088, + "areaCode": "0516", + "zipCode": "221300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652261452, + "parentId": 653116652257349, + "name": "丰县", + "shortName": null, + "level": 3, + "code": "320321", + "pinyin": "FengXian", + "pinyinFirst": "FX", + "capital": "凤城街道", + "population": 121, + "area": 1446, + "areaCode": "0516", + "zipCode": "221700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652261453, + "parentId": 653116652257349, + "name": "沛县", + "shortName": null, + "level": 3, + "code": "320322", + "pinyin": "PeiXian", + "pinyinFirst": "PX", + "capital": "汉源街道", + "population": 129, + "area": 1806, + "areaCode": "0516", + "zipCode": "221600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652261454, + "parentId": 653116652257349, + "name": "睢宁县", + "shortName": null, + "level": 3, + "code": "320324", + "pinyin": "HuiNingXian", + "pinyinFirst": "HNX", + "capital": "睢河街道", + "population": 142, + "area": 1767, + "areaCode": "0516", + "zipCode": "221200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652458053, + "parentId": 653116650221637, + "name": "常州市", + "shortName": null, + "level": 2, + "code": "320400", + "pinyin": "ChangZhouShi", + "pinyinFirst": "CZS", + "capital": "新北区", + "population": 385, + "area": 4372, + "areaCode": "0519", + "zipCode": "213000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116652462149, + "parentId": 653116652458053, + "name": "新北区", + "shortName": null, + "level": 3, + "code": "320411", + "pinyin": "XinBeiQu", + "pinyinFirst": "XBQ", + "capital": "新桥街道", + "population": 61, + "area": 509, + "areaCode": "0519", + "zipCode": "213022", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652462150, + "parentId": 653116652458053, + "name": "天宁区", + "shortName": null, + "level": 3, + "code": "320402", + "pinyin": "TianNingQu", + "pinyinFirst": "TNQ", + "capital": "兰陵街道", + "population": 48, + "area": 154, + "areaCode": "0519", + "zipCode": "213017", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652462151, + "parentId": 653116652458053, + "name": "钟楼区", + "shortName": null, + "level": 3, + "code": "320404", + "pinyin": "ZhongLouQu", + "pinyinFirst": "ZLQ", + "capital": "北港街道", + "population": 44, + "area": 133, + "areaCode": "0519", + "zipCode": "213023", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652462152, + "parentId": 653116652458053, + "name": "武进区", + "shortName": null, + "level": 3, + "code": "320412", + "pinyin": "WuJinQu", + "pinyinFirst": "WJQ", + "capital": "湖塘镇", + "population": 98, + "area": 1065, + "areaCode": "0519", + "zipCode": "213100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652462153, + "parentId": 653116652458053, + "name": "金坛区", + "shortName": null, + "level": 3, + "code": "320413", + "pinyin": "JinTanQu", + "pinyinFirst": "JTQ", + "capital": "西城街道", + "population": 55, + "area": 976, + "areaCode": "0519", + "zipCode": "213200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652462154, + "parentId": 653116652458053, + "name": "溧阳市", + "shortName": null, + "level": 3, + "code": "320481", + "pinyin": "LiYangShi", + "pinyinFirst": "LYS", + "capital": "溧城街道", + "population": 79, + "area": 1535, + "areaCode": "0519", + "zipCode": "213300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652576837, + "parentId": 653116650221637, + "name": "苏州市", + "shortName": null, + "level": 2, + "code": "320500", + "pinyin": "SuZhouShi", + "pinyinFirst": "SZS", + "capital": "姑苏区", + "population": 723, + "area": 8395, + "areaCode": "0512", + "zipCode": "215000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116652576838, + "parentId": 653116652576837, + "name": "姑苏区", + "shortName": null, + "level": 3, + "code": "320508", + "pinyin": "GuSuQu", + "pinyinFirst": "GSQ", + "capital": "苏锦街道", + "population": 74, + "area": 83, + "areaCode": "0512", + "zipCode": "215031", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652576839, + "parentId": 653116652576837, + "name": "虎丘区", + "shortName": null, + "level": 3, + "code": "320505", + "pinyin": "HuQiuQu", + "pinyinFirst": "HQQ", + "capital": "狮山街道", + "population": 43, + "area": 332, + "areaCode": "0512", + "zipCode": "215004", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652576840, + "parentId": 653116652576837, + "name": "吴中区", + "shortName": null, + "level": 3, + "code": "320506", + "pinyin": "WuZhongQu", + "pinyinFirst": "WZQ", + "capital": "长桥街道", + "population": 70, + "area": 2231, + "areaCode": "0512", + "zipCode": "215100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652576841, + "parentId": 653116652576837, + "name": "相城区", + "shortName": null, + "level": 3, + "code": "320507", + "pinyin": "XiangChengQu", + "pinyinFirst": "XCQ", + "capital": "澄阳街道", + "population": 45, + "area": 490, + "areaCode": "0512", + "zipCode": "215100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652576842, + "parentId": 653116652576837, + "name": "吴江区", + "shortName": null, + "level": 3, + "code": "320509", + "pinyin": "WuJiangQu", + "pinyinFirst": "WJQ", + "capital": "松陵街道", + "population": 86, + "area": 1238, + "areaCode": "0512", + "zipCode": "215200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652576843, + "parentId": 653116652576837, + "name": "常熟市", + "shortName": null, + "level": 3, + "code": "320581", + "pinyin": "ChangShuShi", + "pinyinFirst": "CSS", + "capital": "虞山街道", + "population": 107, + "area": 1276, + "areaCode": "0512", + "zipCode": "215500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652576844, + "parentId": 653116652576837, + "name": "张家港市", + "shortName": null, + "level": 3, + "code": "320582", + "pinyin": "ZhangJiaGangShi", + "pinyinFirst": "ZJGS", + "capital": "杨舍镇", + "population": 93, + "area": 990, + "areaCode": "0512", + "zipCode": "215600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652576845, + "parentId": 653116652576837, + "name": "昆山市", + "shortName": null, + "level": 3, + "code": "320583", + "pinyin": "KunShanShi", + "pinyinFirst": "KSS", + "capital": "玉山镇", + "population": 98, + "area": 932, + "areaCode": "0512", + "zipCode": "215300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652576846, + "parentId": 653116652576837, + "name": "太仓市", + "shortName": null, + "level": 3, + "code": "320585", + "pinyin": "TaiCangShi", + "pinyinFirst": "TCS", + "capital": "娄东街道", + "population": 50, + "area": 823, + "areaCode": "0512", + "zipCode": "215400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652748869, + "parentId": 653116650221637, + "name": "南通市", + "shortName": null, + "level": 2, + "code": "320600", + "pinyin": "NanTongShi", + "pinyinFirst": "NTS", + "capital": "崇川区", + "population": 760, + "area": 8397, + "areaCode": "0513", + "zipCode": "226000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116652748870, + "parentId": 653116652748869, + "name": "崇川区", + "shortName": null, + "level": 3, + "code": "320613", + "pinyin": "ChongChuanQu", + "pinyinFirst": "CCQ", + "capital": "虹桥街道", + "population": 90, + "area": 355, + "areaCode": "0513", + "zipCode": "226001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652748871, + "parentId": 653116652748869, + "name": "通州区", + "shortName": null, + "level": 3, + "code": "320612", + "pinyin": "TongZhouQu", + "pinyinFirst": "TZQ", + "capital": "金新街道", + "population": 125, + "area": 1562, + "areaCode": "0513", + "zipCode": "226300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652748872, + "parentId": 653116652748869, + "name": "海门区", + "shortName": null, + "level": 3, + "code": "320614", + "pinyin": "HaiMenQu", + "pinyinFirst": "HMQ", + "capital": "海门街道", + "population": 99, + "area": 939, + "areaCode": "0513", + "zipCode": "226100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652748873, + "parentId": 653116652748869, + "name": "启东市", + "shortName": null, + "level": 3, + "code": "320681", + "pinyin": "QiDongShi", + "pinyinFirst": "QDS", + "capital": "汇龙镇", + "population": 110, + "area": 1208, + "areaCode": "0513", + "zipCode": "226200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652748874, + "parentId": 653116652748869, + "name": "如皋市", + "shortName": null, + "level": 3, + "code": "320682", + "pinyin": "RuGaoShi", + "pinyinFirst": "RGS", + "capital": "如城街道", + "population": 141, + "area": 1492, + "areaCode": "0513", + "zipCode": "226500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652748875, + "parentId": 653116652748869, + "name": "海安市", + "shortName": null, + "level": 3, + "code": "320685", + "pinyin": "HaiAnShi", + "pinyinFirst": "HAS", + "capital": "海安街道", + "population": 92, + "area": 1108, + "areaCode": "0513", + "zipCode": "226600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652748876, + "parentId": 653116652748869, + "name": "如东县", + "shortName": null, + "level": 3, + "code": "320623", + "pinyin": "RuDongXian", + "pinyinFirst": "RDX", + "capital": "城中街道", + "population": 101, + "area": 1733, + "areaCode": "0513", + "zipCode": "226400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652900421, + "parentId": 653116650221637, + "name": "连云港市", + "shortName": null, + "level": 2, + "code": "320700", + "pinyin": "LianYunGangShi", + "pinyinFirst": "LYGS", + "capital": "海州区", + "population": 534, + "area": 7614, + "areaCode": "0518", + "zipCode": "222000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116652904517, + "parentId": 653116652900421, + "name": "海州区", + "shortName": null, + "level": 3, + "code": "320706", + "pinyin": "HaiZhouQu", + "pinyinFirst": "HZQ", + "capital": "新浦街道", + "population": 80, + "area": 700, + "areaCode": "0518", + "zipCode": "222003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652904518, + "parentId": 653116652900421, + "name": "连云区", + "shortName": null, + "level": 3, + "code": "320703", + "pinyin": "LianYunQu", + "pinyinFirst": "LYQ", + "capital": "海州湾街道", + "population": 25, + "area": 797, + "areaCode": "0518", + "zipCode": "222042", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652904519, + "parentId": 653116652900421, + "name": "赣榆区", + "shortName": null, + "level": 3, + "code": "320707", + "pinyin": "GanYuQu", + "pinyinFirst": "GYQ", + "capital": "青口镇", + "population": 120, + "area": 1514, + "areaCode": "0518", + "zipCode": "222100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652904520, + "parentId": 653116652900421, + "name": "东海县", + "shortName": null, + "level": 3, + "code": "320722", + "pinyin": "DongHaiXian", + "pinyinFirst": "DHX", + "capital": "牛山街道", + "population": 125, + "area": 2037, + "areaCode": "0518", + "zipCode": "222300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652904521, + "parentId": 653116652900421, + "name": "灌云县", + "shortName": null, + "level": 3, + "code": "320723", + "pinyin": "GuanYunXian", + "pinyinFirst": "GYX", + "capital": "伊山镇", + "population": 103, + "area": 1538, + "areaCode": "0518", + "zipCode": "222200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116652904522, + "parentId": 653116652900421, + "name": "灌南县", + "shortName": null, + "level": 3, + "code": "320724", + "pinyin": "GuanNanXian", + "pinyinFirst": "GNX", + "capital": "新安镇", + "population": 82, + "area": 1028, + "areaCode": "0518", + "zipCode": "222500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653051973, + "parentId": 653116650221637, + "name": "淮安市", + "shortName": null, + "level": 2, + "code": "320800", + "pinyin": "HuaiAnShi", + "pinyinFirst": "HAS", + "capital": "清江浦区", + "population": 560, + "area": 9816, + "areaCode": "0517", + "zipCode": "223000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116653051974, + "parentId": 653116653051973, + "name": "淮安区", + "shortName": null, + "level": 3, + "code": "320803", + "pinyin": "HuaiAnQu", + "pinyinFirst": "HAQ", + "capital": "淮城街道", + "population": 114, + "area": 1452, + "areaCode": "0517", + "zipCode": "223200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653051975, + "parentId": 653116653051973, + "name": "淮阴区", + "shortName": null, + "level": 3, + "code": "320804", + "pinyin": "HuaiYinQu", + "pinyinFirst": "HYQ", + "capital": "长江路街道", + "population": 91, + "area": 1264, + "areaCode": "0517", + "zipCode": "223300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653051976, + "parentId": 653116653051973, + "name": "清江浦区", + "shortName": null, + "level": 3, + "code": "320812", + "pinyin": "QingJiangPuQu", + "pinyinFirst": "QJPQ", + "capital": "城南街道", + "population": 57, + "area": 310, + "areaCode": "0517", + "zipCode": "223001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653051977, + "parentId": 653116653051973, + "name": "洪泽区", + "shortName": null, + "level": 3, + "code": "320813", + "pinyin": "HongZeQu", + "pinyinFirst": "HZQ", + "capital": "高良涧街道", + "population": 37, + "area": 1273, + "areaCode": "0517", + "zipCode": "223100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653051978, + "parentId": 653116653051973, + "name": "涟水县", + "shortName": null, + "level": 3, + "code": "320826", + "pinyin": "LianShuiXian", + "pinyinFirst": "LSX", + "capital": "涟城街道", + "population": 112, + "area": 1676, + "areaCode": "0517", + "zipCode": "223400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653051979, + "parentId": 653116653051973, + "name": "盱眙县", + "shortName": null, + "level": 3, + "code": "320830", + "pinyin": "XuYiXian", + "pinyinFirst": "XYX", + "capital": "盱城街道", + "population": 80, + "area": 2497, + "areaCode": "0517", + "zipCode": "211700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653051980, + "parentId": 653116653051973, + "name": "金湖县", + "shortName": null, + "level": 3, + "code": "320831", + "pinyin": "JinHuXian", + "pinyinFirst": "JHX", + "capital": "黎城街道", + "population": 35, + "area": 1344, + "areaCode": "0517", + "zipCode": "211600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653236293, + "parentId": 653116650221637, + "name": "盐城市", + "shortName": null, + "level": 2, + "code": "320900", + "pinyin": "YanChengShi", + "pinyinFirst": "YCS", + "capital": "亭湖区", + "population": 821, + "area": 16723, + "areaCode": "0515", + "zipCode": "224000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116653240389, + "parentId": 653116653236293, + "name": "亭湖区", + "shortName": null, + "level": 3, + "code": "320902", + "pinyin": "TingHuQu", + "pinyinFirst": "THQ", + "capital": "东亭湖街道", + "population": 69, + "area": 815, + "areaCode": "0515", + "zipCode": "224005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653240390, + "parentId": 653116653236293, + "name": "盐都区", + "shortName": null, + "level": 3, + "code": "320903", + "pinyin": "YanDuQu", + "pinyinFirst": "YDQ", + "capital": "盐渎街道", + "population": 71, + "area": 1047, + "areaCode": "0515", + "zipCode": "224055", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653240391, + "parentId": 653116653236293, + "name": "大丰区", + "shortName": null, + "level": 3, + "code": "320904", + "pinyin": "DaFengQu", + "pinyinFirst": "DFQ", + "capital": "丰华街道", + "population": 71, + "area": 3059, + "areaCode": "0515", + "zipCode": "224100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653240392, + "parentId": 653116653236293, + "name": "东台市", + "shortName": null, + "level": 3, + "code": "320981", + "pinyin": "DongTaiShi", + "pinyinFirst": "DTS", + "capital": "东台镇", + "population": 109, + "area": 3221, + "areaCode": "0515", + "zipCode": "224200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653240393, + "parentId": 653116653236293, + "name": "响水县", + "shortName": null, + "level": 3, + "code": "320921", + "pinyin": "XiangShuiXian", + "pinyinFirst": "XSX", + "capital": "响水镇", + "population": 62, + "area": 1461, + "areaCode": "0515", + "zipCode": "224600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653240394, + "parentId": 653116653236293, + "name": "滨海县", + "shortName": null, + "level": 3, + "code": "320922", + "pinyin": "BinHaiXian", + "pinyinFirst": "BHX", + "capital": "东坎街道", + "population": 122, + "area": 1915, + "areaCode": "0515", + "zipCode": "224500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653240395, + "parentId": 653116653236293, + "name": "阜宁县", + "shortName": null, + "level": 3, + "code": "320923", + "pinyin": "FuNingXian", + "pinyinFirst": "FNX", + "capital": "阜城街道", + "population": 112, + "area": 1439, + "areaCode": "0515", + "zipCode": "224400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653240396, + "parentId": 653116653236293, + "name": "射阳县", + "shortName": null, + "level": 3, + "code": "320924", + "pinyin": "SheYangXian", + "pinyinFirst": "SYX", + "capital": "合德镇", + "population": 95, + "area": 2606, + "areaCode": "0515", + "zipCode": "224300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653240397, + "parentId": 653116653236293, + "name": "建湖县", + "shortName": null, + "level": 3, + "code": "320925", + "pinyin": "JianHuXian", + "pinyinFirst": "JHX", + "capital": "塘河街道", + "population": 78, + "area": 1160, + "areaCode": "0515", + "zipCode": "224700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653494341, + "parentId": 653116650221637, + "name": "扬州市", + "shortName": null, + "level": 2, + "code": "321000", + "pinyin": "YangZhouShi", + "pinyinFirst": "YZS", + "capital": "邗江区", + "population": 457, + "area": 6504, + "areaCode": "0514", + "zipCode": "225000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116653494342, + "parentId": 653116653494341, + "name": "邗江区", + "shortName": null, + "level": 3, + "code": "321003", + "pinyin": "HanJiangQu", + "pinyinFirst": "HJQ", + "capital": "邗上街道", + "population": 77, + "area": 553, + "areaCode": "0514", + "zipCode": "225100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653494343, + "parentId": 653116653494341, + "name": "广陵区", + "shortName": null, + "level": 3, + "code": "321002", + "pinyin": "GuangLingQu", + "pinyinFirst": "GLQ", + "capital": "汶河街道", + "population": 49, + "area": 335, + "areaCode": "0514", + "zipCode": "225002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653494344, + "parentId": 653116653494341, + "name": "江都区", + "shortName": null, + "level": 3, + "code": "321012", + "pinyin": "JiangDuQu", + "pinyinFirst": "JDQ", + "capital": "仙女镇", + "population": 104, + "area": 1330, + "areaCode": "0514", + "zipCode": "225200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653494345, + "parentId": 653116653494341, + "name": "仪征市", + "shortName": null, + "level": 3, + "code": "321081", + "pinyin": "YiZhengShi", + "pinyinFirst": "YZS", + "capital": "真州镇", + "population": 59, + "area": 902, + "areaCode": "0514", + "zipCode": "211400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653494346, + "parentId": 653116653494341, + "name": "高邮市", + "shortName": null, + "level": 3, + "code": "321084", + "pinyin": "GaoYouShi", + "pinyinFirst": "GYS", + "capital": "高邮街道", + "population": 80, + "area": 1922, + "areaCode": "0514", + "zipCode": "225600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653494347, + "parentId": 653116653494341, + "name": "宝应县", + "shortName": null, + "level": 3, + "code": "321023", + "pinyin": "BaoYingXian", + "pinyinFirst": "BYX", + "capital": "安宜镇", + "population": 88, + "area": 1462, + "areaCode": "0514", + "zipCode": "225800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653686853, + "parentId": 653116650221637, + "name": "镇江市", + "shortName": null, + "level": 2, + "code": "321100", + "pinyin": "ZhenJiangShi", + "pinyinFirst": "ZJS", + "capital": "京口区", + "population": 270, + "area": 3631, + "areaCode": "0511", + "zipCode": "212000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116653686854, + "parentId": 653116653686853, + "name": "京口区", + "shortName": null, + "level": 3, + "code": "321102", + "pinyin": "JingKouQu", + "pinyinFirst": "JKQ", + "capital": "正东路街道", + "population": 31, + "area": 318, + "areaCode": "0511", + "zipCode": "212001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653690949, + "parentId": 653116653686853, + "name": "润州区", + "shortName": null, + "level": 3, + "code": "321111", + "pinyin": "RunZhouQu", + "pinyinFirst": "RZQ", + "capital": "七里甸街道", + "population": 24, + "area": 152, + "areaCode": "0511", + "zipCode": "212004", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653690950, + "parentId": 653116653686853, + "name": "丹徒区", + "shortName": null, + "level": 3, + "code": "321112", + "pinyin": "DanTuQu", + "pinyinFirst": "DTQ", + "capital": "宜城街道", + "population": 29, + "area": 611, + "areaCode": "0511", + "zipCode": "212100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653690951, + "parentId": 653116653686853, + "name": "丹阳市", + "shortName": null, + "level": 3, + "code": "321181", + "pinyin": "DanYangShi", + "pinyinFirst": "DYS", + "capital": "曲阿街道", + "population": 80, + "area": 1047, + "areaCode": "0511", + "zipCode": "212300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653690952, + "parentId": 653116653686853, + "name": "扬中市", + "shortName": null, + "level": 3, + "code": "321182", + "pinyin": "YangZhongShi", + "pinyinFirst": "YZS", + "capital": "三茅街道", + "population": 28, + "area": 331, + "areaCode": "0511", + "zipCode": "212200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653690953, + "parentId": 653116653686853, + "name": "句容市", + "shortName": null, + "level": 3, + "code": "321183", + "pinyin": "JuRongShi", + "pinyinFirst": "JRS", + "capital": "崇明街道", + "population": 59, + "area": 1387, + "areaCode": "0511", + "zipCode": "212400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653879365, + "parentId": 653116650221637, + "name": "泰州市", + "shortName": null, + "level": 2, + "code": "321200", + "pinyin": "TaiZhouShi", + "pinyinFirst": "TZS", + "capital": "海陵区", + "population": 501, + "area": 5788, + "areaCode": "0523", + "zipCode": "225300", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116653883461, + "parentId": 653116653879365, + "name": "海陵区", + "shortName": null, + "level": 3, + "code": "321202", + "pinyin": "HaiLingQu", + "pinyinFirst": "HLQ", + "capital": "城中街道", + "population": 60, + "area": 357, + "areaCode": "0523", + "zipCode": "225300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653883462, + "parentId": 653116653879365, + "name": "高港区", + "shortName": null, + "level": 3, + "code": "321203", + "pinyin": "GaoGangQu", + "pinyinFirst": "GGQ", + "capital": "口岸街道", + "population": 26, + "area": 334, + "areaCode": "0523", + "zipCode": "225321", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653883463, + "parentId": 653116653879365, + "name": "姜堰区", + "shortName": null, + "level": 3, + "code": "321204", + "pinyin": "JiangYanQu", + "pinyinFirst": "JYQ", + "capital": "三水街道", + "population": 77, + "area": 858, + "areaCode": "0523", + "zipCode": "225500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653883464, + "parentId": 653116653879365, + "name": "兴化市", + "shortName": null, + "level": 3, + "code": "321281", + "pinyin": "XingHuaShi", + "pinyinFirst": "XHS", + "capital": "昭阳街道", + "population": 154, + "area": 2395, + "areaCode": "0523", + "zipCode": "225700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653883465, + "parentId": 653116653879365, + "name": "靖江市", + "shortName": null, + "level": 3, + "code": "321282", + "pinyin": "JingJiangShi", + "pinyinFirst": "JJS", + "capital": "靖城街道", + "population": 66, + "area": 656, + "areaCode": "0523", + "zipCode": "214500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116653883466, + "parentId": 653116653879365, + "name": "泰兴市", + "shortName": null, + "level": 3, + "code": "321283", + "pinyin": "TaiXingShi", + "pinyinFirst": "TXS", + "capital": "延令街道", + "population": 117, + "area": 1170, + "areaCode": "0523", + "zipCode": "225400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116654116933, + "parentId": 653116650221637, + "name": "宿迁市", + "shortName": null, + "level": 2, + "code": "321300", + "pinyin": "SuQianShi", + "pinyinFirst": "SQS", + "capital": "宿城区", + "population": 592, + "area": 8405, + "areaCode": "0527", + "zipCode": "223800", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116654116934, + "parentId": 653116654116933, + "name": "宿城区", + "shortName": null, + "level": 3, + "code": "321302", + "pinyin": "SuChengQu", + "pinyinFirst": "SCQ", + "capital": "双庄街道", + "population": 112, + "area": 926, + "areaCode": "0527", + "zipCode": "223800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116654116935, + "parentId": 653116654116933, + "name": "宿豫区", + "shortName": null, + "level": 3, + "code": "321311", + "pinyin": "SuYuQu", + "pinyinFirst": "SYQ", + "capital": "豫新街道", + "population": 66, + "area": 1108, + "areaCode": "0527", + "zipCode": "223800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116654121029, + "parentId": 653116654116933, + "name": "沭阳县", + "shortName": null, + "level": 3, + "code": "321322", + "pinyin": "ShuYangXian", + "pinyinFirst": "SYX", + "capital": "沭城街道", + "population": 199, + "area": 2299, + "areaCode": "0527", + "zipCode": "223600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116654121030, + "parentId": 653116654116933, + "name": "泗阳县", + "shortName": null, + "level": 3, + "code": "321323", + "pinyin": "SiYangXian", + "pinyinFirst": "SYX", + "capital": "众兴街道", + "population": 106, + "area": 1378, + "areaCode": "0527", + "zipCode": "223700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116654121031, + "parentId": 653116654116933, + "name": "泗洪县", + "shortName": null, + "level": 3, + "code": "321324", + "pinyin": "SiHongXian", + "pinyinFirst": "SHX", + "capital": "大楼街道", + "population": 110, + "area": 2694, + "areaCode": "0527", + "zipCode": "223900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:29", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116654313541, + "parentId": 0, + "name": "浙江省", + "shortName": "浙", + "level": 1, + "code": "330000", + "pinyin": "ZheJiangSheng", + "pinyinFirst": "ZJS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116656349253, + "parentId": 653116654313541, + "name": "杭州市", + "shortName": null, + "level": 2, + "code": "330100", + "pinyin": "HangZhouShi", + "pinyinFirst": "HZS", + "capital": "上城区", + "population": 759, + "area": 16596, + "areaCode": "0571", + "zipCode": "310000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116656349254, + "parentId": 653116656349253, + "name": "上城区", + "shortName": null, + "level": 3, + "code": "330102", + "pinyin": "ShangChengQu", + "pinyinFirst": "SCQ", + "capital": "望江街道", + "population": 132, + "area": 122, + "areaCode": "0571", + "zipCode": "310008", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656349255, + "parentId": 653116656349253, + "name": "拱墅区", + "shortName": null, + "level": 3, + "code": "330105", + "pinyin": "GongShuQu", + "pinyinFirst": "GSQ", + "capital": "拱宸桥街道", + "population": 112, + "area": 119, + "areaCode": "0571", + "zipCode": "310015", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656349256, + "parentId": 653116656349253, + "name": "西湖区", + "shortName": null, + "level": 3, + "code": "330106", + "pinyin": "XiHuQu", + "pinyinFirst": "XHQ", + "capital": "灵隐街道", + "population": 77, + "area": 263, + "areaCode": "0571", + "zipCode": "310013", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656349257, + "parentId": 653116656349253, + "name": "滨江区", + "shortName": null, + "level": 3, + "code": "330108", + "pinyin": "BinJiangQu", + "pinyinFirst": "BJQ", + "capital": "西兴街道", + "population": 28, + "area": 73, + "areaCode": "0571", + "zipCode": "310051", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656349258, + "parentId": 653116656349253, + "name": "萧山区", + "shortName": null, + "level": 3, + "code": "330109", + "pinyin": "XiaoShanQu", + "pinyinFirst": "XSQ", + "capital": "城厢街道", + "population": 201, + "area": 931, + "areaCode": "0571", + "zipCode": "311201", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656349259, + "parentId": 653116656349253, + "name": "余杭区", + "shortName": null, + "level": 3, + "code": "330110", + "pinyin": "YuHangQu", + "pinyinFirst": "YHQ", + "capital": "仓前街道", + "population": 122, + "area": 940, + "areaCode": "0571", + "zipCode": "311121", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656349260, + "parentId": 653116656349253, + "name": "富阳区", + "shortName": null, + "level": 3, + "code": "330111", + "pinyin": "FuYangQu", + "pinyinFirst": "FYQ", + "capital": "富春街道", + "population": 69, + "area": 1808, + "areaCode": "0571", + "zipCode": "311400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656349261, + "parentId": 653116656349253, + "name": "临安区", + "shortName": null, + "level": 3, + "code": "330112", + "pinyin": "LinAnQu", + "pinyinFirst": "LAQ", + "capital": "锦城街道", + "population": 54, + "area": 3124, + "areaCode": "0571", + "zipCode": "311300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656349262, + "parentId": 653116656349253, + "name": "临平区", + "shortName": null, + "level": 3, + "code": "330113", + "pinyin": "LinPingQu", + "pinyinFirst": "LPQ", + "capital": "临平街道", + "population": 117, + "area": 282, + "areaCode": "0571", + "zipCode": "311100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656349263, + "parentId": 653116656349253, + "name": "钱塘区", + "shortName": null, + "level": 3, + "code": "330114", + "pinyin": "QianTangQu", + "pinyinFirst": "QTQ", + "capital": "河庄街道", + "population": 76, + "area": 338, + "areaCode": "0571", + "zipCode": "311222", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656349264, + "parentId": 653116656349253, + "name": "建德市", + "shortName": null, + "level": 3, + "code": "330182", + "pinyin": "JianDeShi", + "pinyinFirst": "JDS", + "capital": "新安江街道", + "population": 51, + "area": 2364, + "areaCode": "0571", + "zipCode": "311600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656349265, + "parentId": 653116656349253, + "name": "桐庐县", + "shortName": null, + "level": 3, + "code": "330122", + "pinyin": "TongLuXian", + "pinyinFirst": "TLX", + "capital": "城南街道", + "population": 42, + "area": 1780, + "areaCode": "0571", + "zipCode": "311500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656349266, + "parentId": 653116656349253, + "name": "淳安县", + "shortName": null, + "level": 3, + "code": "330127", + "pinyin": "ChunAnXian", + "pinyinFirst": "CAX", + "capital": "千岛湖镇", + "population": 46, + "area": 4452, + "areaCode": "0571", + "zipCode": "311700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656455749, + "parentId": 653116654313541, + "name": "宁波市", + "shortName": null, + "level": 2, + "code": "330200", + "pinyin": "NingBoShi", + "pinyinFirst": "NBS", + "capital": "海曙区", + "population": 608, + "area": 9365, + "areaCode": "0574", + "zipCode": "315000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116656459845, + "parentId": 653116656455749, + "name": "海曙区", + "shortName": null, + "level": 3, + "code": "330203", + "pinyin": "HaiShuQu", + "pinyinFirst": "HSQ", + "capital": "江厦街道", + "population": 63, + "area": 595, + "areaCode": "0574", + "zipCode": "315000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656459846, + "parentId": 653116656455749, + "name": "江北区", + "shortName": null, + "level": 3, + "code": "330205", + "pinyin": "JiangBeiQu", + "pinyinFirst": "JBQ", + "capital": "外滩街道", + "population": 26, + "area": 209, + "areaCode": "0574", + "zipCode": "315020", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656459847, + "parentId": 653116656455749, + "name": "北仑区", + "shortName": null, + "level": 3, + "code": "330206", + "pinyin": "BeiLunQu", + "pinyinFirst": "BLQ", + "capital": "新碶街道", + "population": 43, + "area": 585, + "areaCode": "0574", + "zipCode": "315800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656459848, + "parentId": 653116656455749, + "name": "镇海区", + "shortName": null, + "level": 3, + "code": "330211", + "pinyin": "ZhenHaiQu", + "pinyinFirst": "ZHQ", + "capital": "招宝山街道", + "population": 27, + "area": 218, + "areaCode": "0574", + "zipCode": "315200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656459849, + "parentId": 653116656455749, + "name": "鄞州区", + "shortName": null, + "level": 3, + "code": "330212", + "pinyin": "YinZhouQu", + "pinyinFirst": "YZQ", + "capital": "首南街道", + "population": 93, + "area": 814, + "areaCode": "0574", + "zipCode": "315100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656459850, + "parentId": 653116656455749, + "name": "奉化区", + "shortName": null, + "level": 3, + "code": "330213", + "pinyin": "FengHuaQu", + "pinyinFirst": "FHQ", + "capital": "锦屏街道", + "population": 48, + "area": 1268, + "areaCode": "0574", + "zipCode": "315500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656459851, + "parentId": 653116656455749, + "name": "余姚市", + "shortName": null, + "level": 3, + "code": "330281", + "pinyin": "YuYaoShi", + "pinyinFirst": "YYS", + "capital": "兰江街道", + "population": 84, + "area": 1346, + "areaCode": "0574", + "zipCode": "315400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656459852, + "parentId": 653116656455749, + "name": "慈溪市", + "shortName": null, + "level": 3, + "code": "330282", + "pinyin": "CiXiShi", + "pinyinFirst": "CXS", + "capital": "白沙路街道", + "population": 106, + "area": 1154, + "areaCode": "0574", + "zipCode": "315300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656459853, + "parentId": 653116656455749, + "name": "象山县", + "shortName": null, + "level": 3, + "code": "330225", + "pinyin": "XiangShanXian", + "pinyinFirst": "XSX", + "capital": "丹东街道", + "population": 55, + "area": 1172, + "areaCode": "0574", + "zipCode": "315700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656459854, + "parentId": 653116656455749, + "name": "宁海县", + "shortName": null, + "level": 3, + "code": "330226", + "pinyin": "NingHaiXian", + "pinyinFirst": "NHX", + "capital": "跃龙街道", + "population": 63, + "area": 1880, + "areaCode": "0574", + "zipCode": "315600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656582725, + "parentId": 653116654313541, + "name": "温州市", + "shortName": null, + "level": 2, + "code": "330300", + "pinyin": "WenZhouShi", + "pinyinFirst": "WZS", + "capital": "鹿城区", + "population": 832, + "area": 11784, + "areaCode": "0577", + "zipCode": "325000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116656586821, + "parentId": 653116656582725, + "name": "鹿城区", + "shortName": null, + "level": 3, + "code": "330302", + "pinyin": "LuChengQu", + "pinyinFirst": "LCQ", + "capital": "五马街道", + "population": 79, + "area": 294, + "areaCode": "0577", + "zipCode": "325000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656586822, + "parentId": 653116656582725, + "name": "龙湾区", + "shortName": null, + "level": 3, + "code": "330303", + "pinyin": "LongWanQu", + "pinyinFirst": "LWQ", + "capital": "永中街道", + "population": 34, + "area": 228, + "areaCode": "0577", + "zipCode": "325013", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656586823, + "parentId": 653116656582725, + "name": "瓯海区", + "shortName": null, + "level": 3, + "code": "330304", + "pinyin": "OuHaiQu", + "pinyinFirst": "OHQ", + "capital": "娄桥街道", + "population": 46, + "area": 615, + "areaCode": "0577", + "zipCode": "325005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656586824, + "parentId": 653116656582725, + "name": "洞头区", + "shortName": null, + "level": 3, + "code": "330305", + "pinyin": "DongTouQu", + "pinyinFirst": "DTQ", + "capital": "北岙街道", + "population": 15, + "area": 151, + "areaCode": "0577", + "zipCode": "325700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656586825, + "parentId": 653116656582725, + "name": "瑞安市", + "shortName": null, + "level": 3, + "code": "330381", + "pinyin": "RuiAnShi", + "pinyinFirst": "RAS", + "capital": "安阳街道", + "population": 126, + "area": 1278, + "areaCode": "0577", + "zipCode": "325200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656586826, + "parentId": 653116656582725, + "name": "乐清市", + "shortName": null, + "level": 3, + "code": "330382", + "pinyin": "YueQingShi", + "pinyinFirst": "YQS", + "capital": "城东街道", + "population": 131, + "area": 1174, + "areaCode": "0577", + "zipCode": "325600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656586827, + "parentId": 653116656582725, + "name": "龙港市", + "shortName": null, + "level": 3, + "code": "330383", + "pinyin": "LongGangShi", + "pinyinFirst": "LGS", + "capital": "镇前路", + "population": 38, + "area": 122, + "areaCode": "0577", + "zipCode": "325802", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656586828, + "parentId": 653116656582725, + "name": "永嘉县", + "shortName": null, + "level": 3, + "code": "330324", + "pinyin": "YongJiaXian", + "pinyinFirst": "YJX", + "capital": "北城街道", + "population": 99, + "area": 2674, + "areaCode": "0577", + "zipCode": "325100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656586829, + "parentId": 653116656582725, + "name": "平阳县", + "shortName": null, + "level": 3, + "code": "330326", + "pinyin": "PingYangXian", + "pinyinFirst": "PYX", + "capital": "昆阳镇", + "population": 88, + "area": 1042, + "areaCode": "0577", + "zipCode": "325400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656586830, + "parentId": 653116656582725, + "name": "苍南县", + "shortName": null, + "level": 3, + "code": "330327", + "pinyin": "CangNanXian", + "pinyinFirst": "CNX", + "capital": "灵溪镇", + "population": 97, + "area": 1150, + "areaCode": "0577", + "zipCode": "325800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656586831, + "parentId": 653116656582725, + "name": "文成县", + "shortName": null, + "level": 3, + "code": "330328", + "pinyin": "WenChengXian", + "pinyinFirst": "WCX", + "capital": "大峃镇", + "population": 41, + "area": 1294, + "areaCode": "0577", + "zipCode": "325300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656586832, + "parentId": 653116656582725, + "name": "泰顺县", + "shortName": null, + "level": 3, + "code": "330329", + "pinyin": "TaiShunXian", + "pinyinFirst": "TSX", + "capital": "罗阳镇", + "population": 37, + "area": 1762, + "areaCode": "0577", + "zipCode": "325500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656738373, + "parentId": 653116654313541, + "name": "嘉兴市", + "shortName": null, + "level": 2, + "code": "330400", + "pinyin": "JiaXingShi", + "pinyinFirst": "JXS", + "capital": "南湖区", + "population": 364, + "area": 3915, + "areaCode": "0573", + "zipCode": "314000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116656738374, + "parentId": 653116656738373, + "name": "南湖区", + "shortName": null, + "level": 3, + "code": "330402", + "pinyin": "NanHuQu", + "pinyinFirst": "NHQ", + "capital": "东栅街道", + "population": 53, + "area": 426, + "areaCode": "0573", + "zipCode": "314051", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656738375, + "parentId": 653116656738373, + "name": "秀洲区", + "shortName": null, + "level": 3, + "code": "330411", + "pinyin": "XiuZhouQu", + "pinyinFirst": "XZQ", + "capital": "新城街道", + "population": 41, + "area": 542, + "areaCode": "0573", + "zipCode": "314031", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656738376, + "parentId": 653116656738373, + "name": "海宁市", + "shortName": null, + "level": 3, + "code": "330481", + "pinyin": "HaiNingShi", + "pinyinFirst": "HNS", + "capital": "硖石街道", + "population": 70, + "area": 681, + "areaCode": "0573", + "zipCode": "314400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656738377, + "parentId": 653116656738373, + "name": "平湖市", + "shortName": null, + "level": 3, + "code": "330482", + "pinyin": "PingHuShi", + "pinyinFirst": "PHS", + "capital": "当湖街道", + "population": 50, + "area": 536, + "areaCode": "0573", + "zipCode": "314200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656738378, + "parentId": 653116656738373, + "name": "桐乡市", + "shortName": null, + "level": 3, + "code": "330483", + "pinyin": "TongXiangShi", + "pinyinFirst": "TXS", + "capital": "梧桐街道", + "population": 70, + "area": 723, + "areaCode": "0573", + "zipCode": "314500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656738379, + "parentId": 653116656738373, + "name": "嘉善县", + "shortName": null, + "level": 3, + "code": "330421", + "pinyin": "JiaShanXian", + "pinyinFirst": "JSX", + "capital": "罗星街道", + "population": 41, + "area": 504, + "areaCode": "0573", + "zipCode": "314100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656738380, + "parentId": 653116656738373, + "name": "海盐县", + "shortName": null, + "level": 3, + "code": "330424", + "pinyin": "HaiYanXian", + "pinyinFirst": "HYX", + "capital": "武原街道", + "population": 38, + "area": 503, + "areaCode": "0573", + "zipCode": "314300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656894021, + "parentId": 653116654313541, + "name": "湖州市", + "shortName": null, + "level": 2, + "code": "330500", + "pinyin": "HuZhouShi", + "pinyinFirst": "HZS", + "capital": "吴兴区", + "population": 268, + "area": 5794, + "areaCode": "0572", + "zipCode": "313000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116656898117, + "parentId": 653116656894021, + "name": "吴兴区", + "shortName": null, + "level": 3, + "code": "330502", + "pinyin": "WuXingQu", + "pinyinFirst": "WXQ", + "capital": "月河街道", + "population": 63, + "area": 872, + "areaCode": "0572", + "zipCode": "313000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656898118, + "parentId": 653116656894021, + "name": "南浔区", + "shortName": null, + "level": 3, + "code": "330503", + "pinyin": "NanXunQu", + "pinyinFirst": "NXQ", + "capital": "东迁街道", + "population": 49, + "area": 716, + "areaCode": "0572", + "zipCode": "313009", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656898119, + "parentId": 653116656894021, + "name": "德清县", + "shortName": null, + "level": 3, + "code": "330521", + "pinyin": "DeQingXian", + "pinyinFirst": "DQX", + "capital": "武康街道", + "population": 44, + "area": 936, + "areaCode": "0572", + "zipCode": "313200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656898120, + "parentId": 653116656894021, + "name": "长兴县", + "shortName": null, + "level": 3, + "code": "330522", + "pinyin": "ChangXingXian", + "pinyinFirst": "CXX", + "capital": "龙山街道", + "population": 64, + "area": 1388, + "areaCode": "0572", + "zipCode": "313100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116656898121, + "parentId": 653116656894021, + "name": "安吉县", + "shortName": null, + "level": 3, + "code": "330523", + "pinyin": "AnJiXian", + "pinyinFirst": "AJX", + "capital": "昌硕街道", + "population": 47, + "area": 1882, + "areaCode": "0572", + "zipCode": "313300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657053765, + "parentId": 653116654313541, + "name": "绍兴市", + "shortName": null, + "level": 2, + "code": "330600", + "pinyin": "ShaoXingShi", + "pinyinFirst": "SXS", + "capital": "越城区", + "population": 448, + "area": 8256, + "areaCode": "0575", + "zipCode": "312000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116657057861, + "parentId": 653116657053765, + "name": "越城区", + "shortName": null, + "level": 3, + "code": "330602", + "pinyin": "YueChengQu", + "pinyinFirst": "YCQ", + "capital": "塔山街道", + "population": 77, + "area": 498, + "areaCode": "0575", + "zipCode": "312000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657057862, + "parentId": 653116657053765, + "name": "柯桥区", + "shortName": null, + "level": 3, + "code": "330603", + "pinyin": "KeQiaoQu", + "pinyinFirst": "KQQ", + "capital": "柯桥街道", + "population": 69, + "area": 1041, + "areaCode": "0575", + "zipCode": "312030", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657057863, + "parentId": 653116657053765, + "name": "上虞区", + "shortName": null, + "level": 3, + "code": "330604", + "pinyin": "ShangYuQu", + "pinyinFirst": "SYQ", + "capital": "百官街道", + "population": 78, + "area": 1403, + "areaCode": "0575", + "zipCode": "312300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657057864, + "parentId": 653116657053765, + "name": "诸暨市", + "shortName": null, + "level": 3, + "code": "330681", + "pinyin": "ZhuJiShi", + "pinyinFirst": "ZJS", + "capital": "暨阳街道", + "population": 108, + "area": 2311, + "areaCode": "0575", + "zipCode": "311800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657057865, + "parentId": 653116657053765, + "name": "嵊州市", + "shortName": null, + "level": 3, + "code": "330683", + "pinyin": "ShengZhouShi", + "pinyinFirst": "SZS", + "capital": "剡湖街道", + "population": 72, + "area": 1790, + "areaCode": "0575", + "zipCode": "312400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657057866, + "parentId": 653116657053765, + "name": "新昌县", + "shortName": null, + "level": 3, + "code": "330624", + "pinyin": "XinChangXian", + "pinyinFirst": "XCX", + "capital": "南明街道", + "population": 43, + "area": 1213, + "areaCode": "0575", + "zipCode": "312500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657279045, + "parentId": 653116654313541, + "name": "金华市", + "shortName": null, + "level": 2, + "code": "330700", + "pinyin": "JinHuaShi", + "pinyinFirst": "JHS", + "capital": "婺城区", + "population": 492, + "area": 10919, + "areaCode": "0579", + "zipCode": "321000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116657279046, + "parentId": 653116657279045, + "name": "婺城区", + "shortName": null, + "level": 3, + "code": "330702", + "pinyin": "WuChengQu", + "pinyinFirst": "WCQ", + "capital": "城中街道", + "population": 65, + "area": 1388, + "areaCode": "0579", + "zipCode": "321000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657279047, + "parentId": 653116657279045, + "name": "金东区", + "shortName": null, + "level": 3, + "code": "330703", + "pinyin": "JinDongQu", + "pinyinFirst": "JDQ", + "capital": "多湖街道", + "population": 34, + "area": 657, + "areaCode": "0579", + "zipCode": "321000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657279048, + "parentId": 653116657279045, + "name": "兰溪市", + "shortName": null, + "level": 3, + "code": "330781", + "pinyin": "LanXiShi", + "pinyinFirst": "LXS", + "capital": "兰江街道", + "population": 66, + "area": 1310, + "areaCode": "0579", + "zipCode": "321100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657279049, + "parentId": 653116657279045, + "name": "义乌市", + "shortName": null, + "level": 3, + "code": "330782", + "pinyin": "YiWuShi", + "pinyinFirst": "YWS", + "capital": "稠城街道", + "population": 84, + "area": 1103, + "areaCode": "0579", + "zipCode": "322000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657279050, + "parentId": 653116657279045, + "name": "东阳市", + "shortName": null, + "level": 3, + "code": "330783", + "pinyin": "DongYangShi", + "pinyinFirst": "DYS", + "capital": "吴宁街道", + "population": 85, + "area": 1739, + "areaCode": "0579", + "zipCode": "322100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657279051, + "parentId": 653116657279045, + "name": "永康市", + "shortName": null, + "level": 3, + "code": "330784", + "pinyin": "YongKangShi", + "pinyinFirst": "YKS", + "capital": "东城街道", + "population": 62, + "area": 1049, + "areaCode": "0579", + "zipCode": "321300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657279052, + "parentId": 653116657279045, + "name": "武义县", + "shortName": null, + "level": 3, + "code": "330723", + "pinyin": "WuYiXian", + "pinyinFirst": "WYX", + "capital": "壶山街道", + "population": 35, + "area": 1577, + "areaCode": "0579", + "zipCode": "321200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657279053, + "parentId": 653116657279045, + "name": "浦江县", + "shortName": null, + "level": 3, + "code": "330726", + "pinyin": "PuJiangXian", + "pinyinFirst": "PJX", + "capital": "浦阳街道", + "population": 40, + "area": 900, + "areaCode": "0579", + "zipCode": "322200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657279054, + "parentId": 653116657279045, + "name": "磐安县", + "shortName": null, + "level": 3, + "code": "330727", + "pinyin": "PanAnXian", + "pinyinFirst": "PAX", + "capital": "安文街道", + "population": 21, + "area": 1196, + "areaCode": "0579", + "zipCode": "322300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657479749, + "parentId": 653116654313541, + "name": "衢州市", + "shortName": null, + "level": 2, + "code": "330800", + "pinyin": "QuZhouShi", + "pinyinFirst": "QZS", + "capital": "柯城区", + "population": 258, + "area": 8837, + "areaCode": "0570", + "zipCode": "324000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116657479750, + "parentId": 653116657479749, + "name": "柯城区", + "shortName": null, + "level": 3, + "code": "330802", + "pinyin": "KeChengQu", + "pinyinFirst": "KCQ", + "capital": "信安街道", + "population": 44, + "area": 609, + "areaCode": "0570", + "zipCode": "324100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657479751, + "parentId": 653116657479749, + "name": "衢江区", + "shortName": null, + "level": 3, + "code": "330803", + "pinyin": "QuJiangQu", + "pinyinFirst": "QJQ", + "capital": "樟潭街道", + "population": 41, + "area": 1748, + "areaCode": "0570", + "zipCode": "324022", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657479752, + "parentId": 653116657479749, + "name": "江山市", + "shortName": null, + "level": 3, + "code": "330881", + "pinyin": "JiangShanShi", + "pinyinFirst": "JSS", + "capital": "双塔街道", + "population": 62, + "area": 2018, + "areaCode": "0570", + "zipCode": "324100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657479753, + "parentId": 653116657479749, + "name": "常山县", + "shortName": null, + "level": 3, + "code": "330822", + "pinyin": "ChangShanXian", + "pinyinFirst": "CSX", + "capital": "天马街道", + "population": 34, + "area": 1099, + "areaCode": "0570", + "zipCode": "324200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657479754, + "parentId": 653116657479749, + "name": "开化县", + "shortName": null, + "level": 3, + "code": "330824", + "pinyin": "KaiHuaXian", + "pinyinFirst": "KHX", + "capital": "华埠镇", + "population": 36, + "area": 2224, + "areaCode": "0570", + "zipCode": "324300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657479755, + "parentId": 653116657479749, + "name": "龙游县", + "shortName": null, + "level": 3, + "code": "330825", + "pinyin": "LongYouXian", + "pinyinFirst": "LYX", + "capital": "龙洲街道", + "population": 40, + "area": 1139, + "areaCode": "0570", + "zipCode": "324400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657639493, + "parentId": 653116654313541, + "name": "舟山市", + "shortName": null, + "level": 2, + "code": "330900", + "pinyin": "ZhouShanShi", + "pinyinFirst": "ZSS", + "capital": "定海区", + "population": 97, + "area": 1440, + "areaCode": "0580", + "zipCode": "316000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116657639494, + "parentId": 653116657639493, + "name": "定海区", + "shortName": null, + "level": 3, + "code": "330902", + "pinyin": "DingHaiQu", + "pinyinFirst": "DHQ", + "capital": "昌国街道", + "population": 40, + "area": 569, + "areaCode": "0580", + "zipCode": "316000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657639495, + "parentId": 653116657639493, + "name": "普陀区", + "shortName": null, + "level": 3, + "code": "330903", + "pinyin": "PuTuoQu", + "pinyinFirst": "PTQ", + "capital": "沈家门街道", + "population": 32, + "area": 459, + "areaCode": "0580", + "zipCode": "316100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657639496, + "parentId": 653116657639493, + "name": "岱山县", + "shortName": null, + "level": 3, + "code": "330921", + "pinyin": "DaiShanXian", + "pinyinFirst": "DSX", + "capital": "高亭镇", + "population": 18, + "area": 326, + "areaCode": "0580", + "zipCode": "316200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657639497, + "parentId": 653116657639493, + "name": "嵊泗县", + "shortName": null, + "level": 3, + "code": "330922", + "pinyin": "ShengSiXian", + "pinyinFirst": "SSX", + "capital": "菜园镇", + "population": 7, + "area": 86, + "areaCode": "0580", + "zipCode": "202450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657807429, + "parentId": 653116654313541, + "name": "台州市", + "shortName": null, + "level": 2, + "code": "331000", + "pinyin": "TaiZhouShi", + "pinyinFirst": "TZS", + "capital": "椒江区", + "population": 607, + "area": 9413, + "areaCode": "0576", + "zipCode": "318000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116657811525, + "parentId": 653116657807429, + "name": "椒江区", + "shortName": null, + "level": 3, + "code": "331002", + "pinyin": "JiaoJiangQu", + "pinyinFirst": "JJQ", + "capital": "海门街道", + "population": 56, + "area": 276, + "areaCode": "0576", + "zipCode": "318000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657811526, + "parentId": 653116657807429, + "name": "黄岩区", + "shortName": null, + "level": 3, + "code": "331003", + "pinyin": "HuangYanQu", + "pinyinFirst": "HYQ", + "capital": "东城街道", + "population": 62, + "area": 988, + "areaCode": "0576", + "zipCode": "318020", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657811527, + "parentId": 653116657807429, + "name": "路桥区", + "shortName": null, + "level": 3, + "code": "331004", + "pinyin": "LuQiaoQu", + "pinyinFirst": "LQQ", + "capital": "桐屿街道", + "population": 46, + "area": 274, + "areaCode": "0576", + "zipCode": "318050", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657811528, + "parentId": 653116657807429, + "name": "温岭市", + "shortName": null, + "level": 3, + "code": "331081", + "pinyin": "WenLingShi", + "pinyinFirst": "WLS", + "capital": "太平街道", + "population": 122, + "area": 836, + "areaCode": "0576", + "zipCode": "317500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657811529, + "parentId": 653116657807429, + "name": "临海市", + "shortName": null, + "level": 3, + "code": "331082", + "pinyin": "LinHaiShi", + "pinyinFirst": "LHS", + "capital": "古城街道", + "population": 120, + "area": 2171, + "areaCode": "0576", + "zipCode": "317000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657811530, + "parentId": 653116657807429, + "name": "玉环市", + "shortName": null, + "level": 3, + "code": "331083", + "pinyin": "YuHuanShi", + "pinyinFirst": "YHS", + "capital": "玉城街道", + "population": 44, + "area": 378, + "areaCode": "0576", + "zipCode": "317600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657811531, + "parentId": 653116657807429, + "name": "三门县", + "shortName": null, + "level": 3, + "code": "331022", + "pinyin": "SanMenXian", + "pinyinFirst": "SMX", + "capital": "海游街道", + "population": 45, + "area": 1072, + "areaCode": "0576", + "zipCode": "317100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657811532, + "parentId": 653116657807429, + "name": "天台县", + "shortName": null, + "level": 3, + "code": "331023", + "pinyin": "TianTaiXian", + "pinyinFirst": "TTX", + "capital": "赤城街道", + "population": 60, + "area": 1426, + "areaCode": "0576", + "zipCode": "317200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116657811533, + "parentId": 653116657807429, + "name": "仙居县", + "shortName": null, + "level": 3, + "code": "331024", + "pinyin": "XianJuXian", + "pinyinFirst": "XJX", + "capital": "福应街道", + "population": 52, + "area": 1992, + "areaCode": "0576", + "zipCode": "317300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116658016325, + "parentId": 653116654313541, + "name": "丽水市", + "shortName": null, + "level": 2, + "code": "331100", + "pinyin": "LiShuiShi", + "pinyinFirst": "LSS", + "capital": "莲都区", + "population": 271, + "area": 17298, + "areaCode": "0578", + "zipCode": "323000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116658016326, + "parentId": 653116658016325, + "name": "莲都区", + "shortName": null, + "level": 3, + "code": "331102", + "pinyin": "LianDuQu", + "pinyinFirst": "LDQ", + "capital": "万象街道", + "population": 42, + "area": 1502, + "areaCode": "0578", + "zipCode": "323000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116658016327, + "parentId": 653116658016325, + "name": "龙泉市", + "shortName": null, + "level": 3, + "code": "331181", + "pinyin": "LongQuanShi", + "pinyinFirst": "LQS", + "capital": "龙渊街道", + "population": 29, + "area": 3059, + "areaCode": "0578", + "zipCode": "323700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116658020421, + "parentId": 653116658016325, + "name": "青田县", + "shortName": null, + "level": 3, + "code": "331121", + "pinyin": "QingTianXian", + "pinyinFirst": "QTX", + "capital": "鹤城街道", + "population": 57, + "area": 2484, + "areaCode": "0578", + "zipCode": "323900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116658020422, + "parentId": 653116658016325, + "name": "缙云县", + "shortName": null, + "level": 3, + "code": "331122", + "pinyin": "JinYunXian", + "pinyinFirst": "JYX", + "capital": "五云街道", + "population": 47, + "area": 1482, + "areaCode": "0578", + "zipCode": "321400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116658020423, + "parentId": 653116658016325, + "name": "遂昌县", + "shortName": null, + "level": 3, + "code": "331123", + "pinyin": "SuiChangXian", + "pinyinFirst": "SCX", + "capital": "妙高街道", + "population": 23, + "area": 2539, + "areaCode": "0578", + "zipCode": "323300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116658020424, + "parentId": 653116658016325, + "name": "松阳县", + "shortName": null, + "level": 3, + "code": "331124", + "pinyin": "SongYangXian", + "pinyinFirst": "SYX", + "capital": "西屏街道", + "population": 24, + "area": 1406, + "areaCode": "0578", + "zipCode": "323400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116658020425, + "parentId": 653116658016325, + "name": "云和县", + "shortName": null, + "level": 3, + "code": "331125", + "pinyin": "YunHeXian", + "pinyinFirst": "YHX", + "capital": "浮云街道", + "population": 11, + "area": 978, + "areaCode": "0578", + "zipCode": "323600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116658020426, + "parentId": 653116658016325, + "name": "庆元县", + "shortName": null, + "level": 3, + "code": "331126", + "pinyin": "QingYuanXian", + "pinyinFirst": "QYX", + "capital": "松源街道", + "population": 20, + "area": 1898, + "areaCode": "0578", + "zipCode": "323800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116658020427, + "parentId": 653116658016325, + "name": "景宁畲族自治县", + "shortName": null, + "level": 3, + "code": "331127", + "pinyin": "JingNingSheZuZiZhiXian", + "pinyinFirst": "JNSZZZX", + "capital": "红星街道", + "population": 17, + "area": 1950, + "areaCode": "0578", + "zipCode": "323500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:04" + }, + { + "id": 653116658233413, + "parentId": 0, + "name": "安徽省", + "shortName": "皖", + "level": 1, + "code": "340000", + "pinyin": "AnHuiSheng", + "pinyinFirst": "AHS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116659834949, + "parentId": 653116658233413, + "name": "合肥市", + "shortName": null, + "level": 2, + "code": "340100", + "pinyin": "HeFeiShi", + "pinyinFirst": "HFS", + "capital": "蜀山区", + "population": 770, + "area": 11496, + "areaCode": "0551", + "zipCode": "230000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116659839045, + "parentId": 653116659834949, + "name": "蜀山区", + "shortName": null, + "level": 3, + "code": "340104", + "pinyin": "ShuShanQu", + "pinyinFirst": "SSQ", + "capital": "三里庵街道", + "population": 103, + "area": 643, + "areaCode": "0551", + "zipCode": "230031", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659839046, + "parentId": 653116659834949, + "name": "瑶海区", + "shortName": null, + "level": 3, + "code": "340102", + "pinyin": "YaoHaiQu", + "pinyinFirst": "YHQ", + "capital": "明光路街道", + "population": 67, + "area": 247, + "areaCode": "0551", + "zipCode": "230011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659839047, + "parentId": 653116659834949, + "name": "庐阳区", + "shortName": null, + "level": 3, + "code": "340103", + "pinyin": "LuYangQu", + "pinyinFirst": "LYQ", + "capital": "亳州路街道", + "population": 51, + "area": 139, + "areaCode": "0551", + "zipCode": "230041", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659839048, + "parentId": 653116659834949, + "name": "包河区", + "shortName": null, + "level": 3, + "code": "340111", + "pinyin": "BaoHeQu", + "pinyinFirst": "BHQ", + "capital": "望湖街道", + "population": 68, + "area": 316, + "areaCode": "0551", + "zipCode": "230051", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659839049, + "parentId": 653116659834949, + "name": "巢湖市", + "shortName": null, + "level": 3, + "code": "340181", + "pinyin": "ChaoHuShi", + "pinyinFirst": "CHS", + "capital": "凤凰山街道", + "population": 86, + "area": 2082, + "areaCode": "0551", + "zipCode": "238000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659839050, + "parentId": 653116659834949, + "name": "长丰县", + "shortName": null, + "level": 3, + "code": "340121", + "pinyin": "ChangFengXian", + "pinyinFirst": "CFX", + "capital": "水湖镇", + "population": 80, + "area": 1835, + "areaCode": "0551", + "zipCode": "231100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659839051, + "parentId": 653116659834949, + "name": "肥东县", + "shortName": null, + "level": 3, + "code": "340122", + "pinyin": "FeiDongXian", + "pinyinFirst": "FDX", + "capital": "店埠镇", + "population": 108, + "area": 2191, + "areaCode": "0551", + "zipCode": "231600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659839052, + "parentId": 653116659834949, + "name": "肥西县", + "shortName": null, + "level": 3, + "code": "340123", + "pinyin": "FeiXiXian", + "pinyinFirst": "FXX", + "capital": "上派镇", + "population": 85, + "area": 1695, + "areaCode": "0551", + "zipCode": "231200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659839053, + "parentId": 653116659834949, + "name": "庐江县", + "shortName": null, + "level": 3, + "code": "340124", + "pinyin": "LuJiangXian", + "pinyinFirst": "LJX", + "capital": "庐城镇", + "population": 121, + "area": 2348, + "areaCode": "0551", + "zipCode": "231500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659912773, + "parentId": 653116658233413, + "name": "芜湖市", + "shortName": null, + "level": 2, + "code": "340200", + "pinyin": "WuHuShi", + "pinyinFirst": "WHS", + "capital": "鸠江区", + "population": 390, + "area": 6026, + "areaCode": "0553", + "zipCode": "241000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116659916869, + "parentId": 653116659912773, + "name": "鸠江区", + "shortName": null, + "level": 3, + "code": "340207", + "pinyin": "JiuJiangQu", + "pinyinFirst": "JJQ", + "capital": "官陡街道", + "population": 61, + "area": 871, + "areaCode": "0553", + "zipCode": "241007", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659916870, + "parentId": 653116659912773, + "name": "镜湖区", + "shortName": null, + "level": 3, + "code": "340202", + "pinyin": "JingHuQu", + "pinyinFirst": "JHQ", + "capital": "张家山街道", + "population": 46, + "area": 115, + "areaCode": "0553", + "zipCode": "241000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659916871, + "parentId": 653116659912773, + "name": "弋江区", + "shortName": null, + "level": 3, + "code": "340209", + "pinyin": "YiJiangQu", + "pinyinFirst": "YJQ", + "capital": "中南街道", + "population": 44, + "area": 505, + "areaCode": "0553", + "zipCode": "241002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659916872, + "parentId": 653116659912773, + "name": "湾沚区", + "shortName": null, + "level": 3, + "code": "340210", + "pinyin": "WanZhiQu", + "pinyinFirst": "WZQ", + "capital": "湾沚镇", + "population": 35, + "area": 650, + "areaCode": "0553", + "zipCode": "241100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659916873, + "parentId": 653116659912773, + "name": "繁昌区", + "shortName": null, + "level": 3, + "code": "340212", + "pinyin": "FanChangQu", + "pinyinFirst": "FCQ", + "capital": "繁阳镇", + "population": 28, + "area": 584, + "areaCode": "0553", + "zipCode": "241200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659916874, + "parentId": 653116659912773, + "name": "无为市", + "shortName": null, + "level": 3, + "code": "340281", + "pinyin": "WuWeiShi", + "pinyinFirst": "WWS", + "capital": "无城镇", + "population": 121, + "area": 2042, + "areaCode": "0553", + "zipCode": "238300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116659916875, + "parentId": 653116659912773, + "name": "南陵县", + "shortName": null, + "level": 3, + "code": "340223", + "pinyin": "NanLingXian", + "pinyinFirst": "NLX", + "capital": "籍山镇", + "population": 55, + "area": 1259, + "areaCode": "0553", + "zipCode": "241300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660015173, + "parentId": 653116658233413, + "name": "蚌埠市", + "shortName": null, + "level": 2, + "code": "340300", + "pinyin": "BengBuShi", + "pinyinFirst": "BBS", + "capital": "蚌山区", + "population": 386, + "area": 5959, + "areaCode": "0552", + "zipCode": "233000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116660015174, + "parentId": 653116660015173, + "name": "蚌山区", + "shortName": null, + "level": 3, + "code": "340303", + "pinyin": "BengShanQu", + "pinyinFirst": "BSQ", + "capital": "雪华乡", + "population": 35, + "area": 83, + "areaCode": "0552", + "zipCode": "233000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660015175, + "parentId": 653116660015173, + "name": "龙子湖区", + "shortName": null, + "level": 3, + "code": "340302", + "pinyin": "LongZiHuQu", + "pinyinFirst": "LZHQ", + "capital": "东升街道", + "population": 17, + "area": 162, + "areaCode": "0552", + "zipCode": "233000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660015176, + "parentId": 653116660015173, + "name": "禹会区", + "shortName": null, + "level": 3, + "code": "340304", + "pinyin": "YuHuiQu", + "pinyinFirst": "YHQ", + "capital": "张公山街道", + "population": 36, + "area": 313, + "areaCode": "0552", + "zipCode": "233010", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660015177, + "parentId": 653116660015173, + "name": "淮上区", + "shortName": null, + "level": 3, + "code": "340311", + "pinyin": "HuaiShangQu", + "pinyinFirst": "HSQ", + "capital": "小蚌埠镇", + "population": 28, + "area": 398, + "areaCode": "0552", + "zipCode": "233002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660015178, + "parentId": 653116660015173, + "name": "怀远县", + "shortName": null, + "level": 3, + "code": "340321", + "pinyin": "HuaiYuanXian", + "pinyinFirst": "HYX", + "capital": "榴城镇", + "population": 134, + "area": 2212, + "areaCode": "0552", + "zipCode": "233400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660015179, + "parentId": 653116660015173, + "name": "五河县", + "shortName": null, + "level": 3, + "code": "340322", + "pinyin": "WuHeXian", + "pinyinFirst": "WHX", + "capital": "城关镇", + "population": 70, + "area": 1428, + "areaCode": "0552", + "zipCode": "233300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660015180, + "parentId": 653116660015173, + "name": "固镇县", + "shortName": null, + "level": 3, + "code": "340323", + "pinyin": "GuZhenXian", + "pinyinFirst": "GZX", + "capital": "城关镇", + "population": 66, + "area": 1363, + "areaCode": "0552", + "zipCode": "233700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660162629, + "parentId": 653116658233413, + "name": "淮南市", + "shortName": null, + "level": 2, + "code": "340400", + "pinyin": "HuaiNanShi", + "pinyinFirst": "HNS", + "capital": "田家庵区", + "population": 391, + "area": 5650, + "areaCode": "0554", + "zipCode": "232000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116660162630, + "parentId": 653116660162629, + "name": "田家庵区", + "shortName": null, + "level": 3, + "code": "340403", + "pinyin": "TianJiaAnQu", + "pinyinFirst": "TJAQ", + "capital": "公园街道", + "population": 59, + "area": 256, + "areaCode": "0554", + "zipCode": "232007", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660162631, + "parentId": 653116660162629, + "name": "大通区", + "shortName": null, + "level": 3, + "code": "340402", + "pinyin": "DaTongQu", + "pinyinFirst": "DTQ", + "capital": "大通街道", + "population": 19, + "area": 350, + "areaCode": "0554", + "zipCode": "232033", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660162632, + "parentId": 653116660162629, + "name": "谢家集区", + "shortName": null, + "level": 3, + "code": "340404", + "pinyin": "XieJiaJiQu", + "pinyinFirst": "XJJQ", + "capital": "平山街道", + "population": 30, + "area": 276, + "areaCode": "0554", + "zipCode": "232052", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660162633, + "parentId": 653116660162629, + "name": "八公山区", + "shortName": null, + "level": 3, + "code": "340405", + "pinyin": "BaGongShanQu", + "pinyinFirst": "BGSQ", + "capital": "新庄孜街道", + "population": 15, + "area": 148, + "areaCode": "0554", + "zipCode": "232072", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660162634, + "parentId": 653116660162629, + "name": "潘集区", + "shortName": null, + "level": 3, + "code": "340406", + "pinyin": "PanJiQu", + "pinyinFirst": "PJQ", + "capital": "田集街道", + "population": 56, + "area": 590, + "areaCode": "0554", + "zipCode": "232082", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660162635, + "parentId": 653116660162629, + "name": "凤台县", + "shortName": null, + "level": 3, + "code": "340421", + "pinyin": "FengTaiXian", + "pinyinFirst": "FTX", + "capital": "城关镇", + "population": 82, + "area": 1044, + "areaCode": "0554", + "zipCode": "232100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660162636, + "parentId": 653116660162629, + "name": "寿县", + "shortName": null, + "level": 3, + "code": "340422", + "pinyin": "ShouXian", + "pinyinFirst": "SX", + "capital": "寿春镇", + "population": 140, + "area": 2986, + "areaCode": "0554", + "zipCode": "232200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660281413, + "parentId": 653116658233413, + "name": "马鞍山市", + "shortName": null, + "level": 2, + "code": "340500", + "pinyin": "MaAnShanShi", + "pinyinFirst": "MASS", + "capital": "雨山区", + "population": 229, + "area": 4049, + "areaCode": "0555", + "zipCode": "243000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116660285509, + "parentId": 653116660281413, + "name": "雨山区", + "shortName": null, + "level": 3, + "code": "340504", + "pinyin": "YuShanQu", + "pinyinFirst": "YSQ", + "capital": "雨山街道", + "population": 26, + "area": 174, + "areaCode": "0555", + "zipCode": "243071", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660285510, + "parentId": 653116660281413, + "name": "花山区", + "shortName": null, + "level": 3, + "code": "340503", + "pinyin": "HuaShanQu", + "pinyinFirst": "HSQ", + "capital": "霍里街道", + "population": 38, + "area": 179, + "areaCode": "0555", + "zipCode": "243000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660285511, + "parentId": 653116660281413, + "name": "博望区", + "shortName": null, + "level": 3, + "code": "340506", + "pinyin": "BoWangQu", + "pinyinFirst": "BWQ", + "capital": "博望镇", + "population": 19, + "area": 351, + "areaCode": "0555", + "zipCode": "243131", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660285512, + "parentId": 653116660281413, + "name": "当涂县", + "shortName": null, + "level": 3, + "code": "340521", + "pinyin": "DangTuXian", + "pinyinFirst": "DTX", + "capital": "姑孰镇", + "population": 48, + "area": 1002, + "areaCode": "0555", + "zipCode": "243100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660285513, + "parentId": 653116660281413, + "name": "含山县", + "shortName": null, + "level": 3, + "code": "340522", + "pinyin": "HanShanXian", + "pinyinFirst": "HSX", + "capital": "环峰镇", + "population": 45, + "area": 1025, + "areaCode": "0555", + "zipCode": "238100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660285514, + "parentId": 653116660281413, + "name": "和县", + "shortName": null, + "level": 3, + "code": "340523", + "pinyin": "HeXian", + "pinyinFirst": "HX", + "capital": "历阳镇", + "population": 54, + "area": 1318, + "areaCode": "0555", + "zipCode": "238200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660404293, + "parentId": 653116658233413, + "name": "淮北市", + "shortName": null, + "level": 2, + "code": "340600", + "pinyin": "HuaiBeiShi", + "pinyinFirst": "HBS", + "capital": "相山区", + "population": 219, + "area": 2732, + "areaCode": "0561", + "zipCode": "235000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116660408389, + "parentId": 653116660404293, + "name": "相山区", + "shortName": null, + "level": 3, + "code": "340603", + "pinyin": "XiangShanQu", + "pinyinFirst": "XSQ", + "capital": "相南街道", + "population": 43, + "area": 135, + "areaCode": "0561", + "zipCode": "235000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660408390, + "parentId": 653116660404293, + "name": "杜集区", + "shortName": null, + "level": 3, + "code": "340602", + "pinyin": "DuJiQu", + "pinyinFirst": "DJQ", + "capital": "高岳街道", + "population": 30, + "area": 230, + "areaCode": "0561", + "zipCode": "235000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660408391, + "parentId": 653116660404293, + "name": "烈山区", + "shortName": null, + "level": 3, + "code": "340604", + "pinyin": "LieShanQu", + "pinyinFirst": "LSQ", + "capital": "杨庄街道", + "population": 32, + "area": 380, + "areaCode": "0561", + "zipCode": "235025", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660408392, + "parentId": 653116660404293, + "name": "濉溪县", + "shortName": null, + "level": 3, + "code": "340621", + "pinyin": "SuiXiXian", + "pinyinFirst": "SXX", + "capital": "濉溪镇", + "population": 114, + "area": 1987, + "areaCode": "0561", + "zipCode": "235100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660531269, + "parentId": 653116658233413, + "name": "铜陵市", + "shortName": null, + "level": 2, + "code": "340700", + "pinyin": "TongLingShi", + "pinyinFirst": "TLS", + "capital": "铜官区", + "population": 171, + "area": 2992, + "areaCode": "0562", + "zipCode": "244000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116660531270, + "parentId": 653116660531269, + "name": "铜官区", + "shortName": null, + "level": 3, + "code": "340705", + "pinyin": "TongGuanQu", + "pinyinFirst": "TGQ", + "capital": "乌木山社区", + "population": 35, + "area": 145, + "areaCode": "0562", + "zipCode": "244000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660531271, + "parentId": 653116660531269, + "name": "义安区", + "shortName": null, + "level": 3, + "code": "340706", + "pinyin": "YiAnQu", + "pinyinFirst": "YAQ", + "capital": "顺安镇", + "population": 30, + "area": 796, + "areaCode": "0562", + "zipCode": "244100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660531272, + "parentId": 653116660531269, + "name": "郊区", + "shortName": null, + "level": 3, + "code": "340711", + "pinyin": "JiaoQu", + "pinyinFirst": "JQ", + "capital": "大通镇", + "population": 26, + "area": 578, + "areaCode": "0562", + "zipCode": "244000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660531273, + "parentId": 653116660531269, + "name": "枞阳县", + "shortName": null, + "level": 3, + "code": "340722", + "pinyin": "ZongYangXian", + "pinyinFirst": "ZYX", + "capital": "枞阳镇", + "population": 80, + "area": 1473, + "areaCode": "0562", + "zipCode": "246700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660666437, + "parentId": 653116658233413, + "name": "安庆市", + "shortName": null, + "level": 2, + "code": "340800", + "pinyin": "AnQingShi", + "pinyinFirst": "AQS", + "capital": "大观区", + "population": 529, + "area": 13528, + "areaCode": "0556", + "zipCode": "246000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116660670533, + "parentId": 653116660666437, + "name": "大观区", + "shortName": null, + "level": 3, + "code": "340803", + "pinyin": "DaGuanQu", + "pinyinFirst": "DGQ", + "capital": "十里铺乡", + "population": 26, + "area": 204, + "areaCode": "0556", + "zipCode": "246002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660670534, + "parentId": 653116660666437, + "name": "迎江区", + "shortName": null, + "level": 3, + "code": "340802", + "pinyin": "YingJiangQu", + "pinyinFirst": "YJQ", + "capital": "龙狮桥乡", + "population": 21, + "area": 207, + "areaCode": "0556", + "zipCode": "246001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660670535, + "parentId": 653116660666437, + "name": "宜秀区", + "shortName": null, + "level": 3, + "code": "340811", + "pinyin": "YiXiuQu", + "pinyinFirst": "YXQ", + "capital": "大龙山镇", + "population": 27, + "area": 414, + "areaCode": "0556", + "zipCode": "246003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660670536, + "parentId": 653116660666437, + "name": "桐城市", + "shortName": null, + "level": 3, + "code": "340881", + "pinyin": "TongChengShi", + "pinyinFirst": "TCS", + "capital": "文昌街道", + "population": 75, + "area": 1572, + "areaCode": "0556", + "zipCode": "231400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660670537, + "parentId": 653116660666437, + "name": "潜山市", + "shortName": null, + "level": 3, + "code": "340882", + "pinyin": "QianShanShi", + "pinyinFirst": "QSS", + "capital": "梅城镇", + "population": 58, + "area": 1688, + "areaCode": "0556", + "zipCode": "246300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660670538, + "parentId": 653116660666437, + "name": "怀宁县", + "shortName": null, + "level": 3, + "code": "340822", + "pinyin": "HuaiNingXian", + "pinyinFirst": "HNX", + "capital": "高河镇", + "population": 71, + "area": 1276, + "areaCode": "0556", + "zipCode": "246100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660670539, + "parentId": 653116660666437, + "name": "太湖县", + "shortName": null, + "level": 3, + "code": "340825", + "pinyin": "TaiHuXian", + "pinyinFirst": "THX", + "capital": "晋熙镇", + "population": 58, + "area": 2040, + "areaCode": "0556", + "zipCode": "246400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660670540, + "parentId": 653116660666437, + "name": "宿松县", + "shortName": null, + "level": 3, + "code": "340826", + "pinyin": "SuSongXian", + "pinyinFirst": "SSX", + "capital": "孚玉镇", + "population": 87, + "area": 2394, + "areaCode": "0556", + "zipCode": "246500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660670541, + "parentId": 653116660666437, + "name": "望江县", + "shortName": null, + "level": 3, + "code": "340827", + "pinyin": "WangJiangXian", + "pinyinFirst": "WJX", + "capital": "华阳镇", + "population": 64, + "area": 1357, + "areaCode": "0556", + "zipCode": "246200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660670542, + "parentId": 653116660666437, + "name": "岳西县", + "shortName": null, + "level": 3, + "code": "340828", + "pinyin": "YueXiXian", + "pinyinFirst": "YXX", + "capital": "天堂镇", + "population": 41, + "area": 2372, + "areaCode": "0556", + "zipCode": "246600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660813893, + "parentId": 653116658233413, + "name": "黄山市", + "shortName": null, + "level": 2, + "code": "341000", + "pinyin": "HuangShanShi", + "pinyinFirst": "HSS", + "capital": "屯溪区", + "population": 149, + "area": 9678, + "areaCode": "0559", + "zipCode": "245000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116660817989, + "parentId": 653116660813893, + "name": "屯溪区", + "shortName": null, + "level": 3, + "code": "341002", + "pinyin": "TunXiQu", + "pinyinFirst": "TXQ", + "capital": "阳湖镇", + "population": 21, + "area": 191, + "areaCode": "0559", + "zipCode": "245000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660817990, + "parentId": 653116660813893, + "name": "黄山区", + "shortName": null, + "level": 3, + "code": "341003", + "pinyin": "HuangShanQu", + "pinyinFirst": "HSQ", + "capital": "甘棠镇", + "population": 16, + "area": 1747, + "areaCode": "0559", + "zipCode": "242700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660817991, + "parentId": 653116660813893, + "name": "徽州区", + "shortName": null, + "level": 3, + "code": "341004", + "pinyin": "HuiZhouQu", + "pinyinFirst": "HZQ", + "capital": "岩寺镇", + "population": 10, + "area": 419, + "areaCode": "0559", + "zipCode": "245061", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660817992, + "parentId": 653116660813893, + "name": "歙县", + "shortName": null, + "level": 3, + "code": "341021", + "pinyin": "XiXian", + "pinyinFirst": "XX", + "capital": "徽城镇", + "population": 47, + "area": 2212, + "areaCode": "0559", + "zipCode": "245200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660817993, + "parentId": 653116660813893, + "name": "休宁县", + "shortName": null, + "level": 3, + "code": "341022", + "pinyin": "XiuNingXian", + "pinyinFirst": "XNX", + "capital": "海阳镇", + "population": 27, + "area": 2126, + "areaCode": "0559", + "zipCode": "245400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660817994, + "parentId": 653116660813893, + "name": "黟县", + "shortName": null, + "level": 3, + "code": "341023", + "pinyin": "YiXian", + "pinyinFirst": "YX", + "capital": "碧阳镇", + "population": 9, + "area": 857, + "areaCode": "0559", + "zipCode": "245500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660817995, + "parentId": 653116660813893, + "name": "祁门县", + "shortName": null, + "level": 3, + "code": "341024", + "pinyin": "QiMenXian", + "pinyinFirst": "QMX", + "capital": "祁山镇", + "population": 19, + "area": 2215, + "areaCode": "0559", + "zipCode": "245600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660981829, + "parentId": 653116658233413, + "name": "滁州市", + "shortName": null, + "level": 2, + "code": "341100", + "pinyin": "ChuZhouShi", + "pinyinFirst": "CZS", + "capital": "琅琊区", + "population": 455, + "area": 13433, + "areaCode": "0550", + "zipCode": "239000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116660985925, + "parentId": 653116660981829, + "name": "琅琊区", + "shortName": null, + "level": 3, + "code": "341102", + "pinyin": "LangYaQu", + "pinyinFirst": "LYQ", + "capital": "琅琊街道", + "population": 28, + "area": 248, + "areaCode": "0550", + "zipCode": "239000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660985926, + "parentId": 653116660981829, + "name": "南谯区", + "shortName": null, + "level": 3, + "code": "341103", + "pinyin": "NanQiaoQu", + "pinyinFirst": "NQQ", + "capital": "乌衣镇", + "population": 28, + "area": 1177, + "areaCode": "0550", + "zipCode": "239000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660985927, + "parentId": 653116660981829, + "name": "天长市", + "shortName": null, + "level": 3, + "code": "341181", + "pinyin": "TianChangShi", + "pinyinFirst": "TCS", + "capital": "千秋街道", + "population": 63, + "area": 1770, + "areaCode": "0550", + "zipCode": "239300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660985928, + "parentId": 653116660981829, + "name": "明光市", + "shortName": null, + "level": 3, + "code": "341182", + "pinyin": "MingGuangShi", + "pinyinFirst": "MGS", + "capital": "明光街道", + "population": 64, + "area": 2335, + "areaCode": "0550", + "zipCode": "239400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660985929, + "parentId": 653116660981829, + "name": "来安县", + "shortName": null, + "level": 3, + "code": "341122", + "pinyin": "LaiAnXian", + "pinyinFirst": "LAX", + "capital": "新安镇", + "population": 49, + "area": 1494, + "areaCode": "0550", + "zipCode": "239200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660985930, + "parentId": 653116660981829, + "name": "全椒县", + "shortName": null, + "level": 3, + "code": "341124", + "pinyin": "QuanJiaoXian", + "pinyinFirst": "QJX", + "capital": "襄河镇", + "population": 45, + "area": 1568, + "areaCode": "0550", + "zipCode": "239500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660985931, + "parentId": 653116660981829, + "name": "定远县", + "shortName": null, + "level": 3, + "code": "341125", + "pinyin": "DingYuanXian", + "pinyinFirst": "DYX", + "capital": "定城镇", + "population": 98, + "area": 2891, + "areaCode": "0550", + "zipCode": "233200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116660985932, + "parentId": 653116660981829, + "name": "凤阳县", + "shortName": null, + "level": 3, + "code": "341126", + "pinyin": "FengYangXian", + "pinyinFirst": "FYX", + "capital": "府城镇", + "population": 79, + "area": 1950, + "areaCode": "0550", + "zipCode": "233100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661157957, + "parentId": 653116658233413, + "name": "阜阳市", + "shortName": null, + "level": 2, + "code": "341200", + "pinyin": "FuYangShi", + "pinyinFirst": "FYS", + "capital": "颍州区", + "population": 1077, + "area": 10119, + "areaCode": "0558", + "zipCode": "236000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116661162053, + "parentId": 653116661157957, + "name": "颍州区", + "shortName": null, + "level": 3, + "code": "341202", + "pinyin": "YingZhouQu", + "pinyinFirst": "YZQ", + "capital": "鼓楼街道", + "population": 90, + "area": 623, + "areaCode": "0558", + "zipCode": "236001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661162054, + "parentId": 653116661157957, + "name": "颍东区", + "shortName": null, + "level": 3, + "code": "341203", + "pinyin": "YingDongQu", + "pinyinFirst": "YDQ", + "capital": "河东街道", + "population": 67, + "area": 683, + "areaCode": "0558", + "zipCode": "236058", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661162055, + "parentId": 653116661157957, + "name": "颍泉区", + "shortName": null, + "level": 3, + "code": "341204", + "pinyin": "YingQuanQu", + "pinyinFirst": "YQQ", + "capital": "中市街道", + "population": 75, + "area": 651, + "areaCode": "0558", + "zipCode": "236045", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661162056, + "parentId": 653116661157957, + "name": "界首市", + "shortName": null, + "level": 3, + "code": "341282", + "pinyin": "JieShouShi", + "pinyinFirst": "JSS", + "capital": "东城街道", + "population": 83, + "area": 668, + "areaCode": "0558", + "zipCode": "236500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661162057, + "parentId": 653116661157957, + "name": "临泉县", + "shortName": null, + "level": 3, + "code": "341221", + "pinyin": "LinQuanXian", + "pinyinFirst": "LQX", + "capital": "城南街道", + "population": 231, + "area": 1839, + "areaCode": "0558", + "zipCode": "236400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661162058, + "parentId": 653116661157957, + "name": "太和县", + "shortName": null, + "level": 3, + "code": "341222", + "pinyin": "TaiHeXian", + "pinyinFirst": "THX", + "capital": "城关镇", + "population": 178, + "area": 1867, + "areaCode": "0558", + "zipCode": "236600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661162059, + "parentId": 653116661157957, + "name": "阜南县", + "shortName": null, + "level": 3, + "code": "341225", + "pinyin": "FuNanXian", + "pinyinFirst": "FNX", + "capital": "鹿城镇", + "population": 174, + "area": 1801, + "areaCode": "0558", + "zipCode": "236300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661162060, + "parentId": 653116661157957, + "name": "颍上县", + "shortName": null, + "level": 3, + "code": "341226", + "pinyin": "YingShangXian", + "pinyinFirst": "YSX", + "capital": "慎城镇", + "population": 180, + "area": 1987, + "areaCode": "0558", + "zipCode": "236200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661354565, + "parentId": 653116658233413, + "name": "宿州市", + "shortName": null, + "level": 2, + "code": "341300", + "pinyin": "SuZhouShi", + "pinyinFirst": "SZS", + "capital": "埇桥区", + "population": 658, + "area": 9787, + "areaCode": "0557", + "zipCode": "234000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116661358661, + "parentId": 653116661354565, + "name": "埇桥区", + "shortName": null, + "level": 3, + "code": "341302", + "pinyin": "YongQiaoQu", + "pinyinFirst": "YQQ", + "capital": "埇桥街道", + "population": 193, + "area": 2868, + "areaCode": "0557", + "zipCode": "234000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661358662, + "parentId": 653116661354565, + "name": "砀山县", + "shortName": null, + "level": 3, + "code": "341321", + "pinyin": "DangShanXian", + "pinyinFirst": "DSX", + "capital": "砀城镇", + "population": 100, + "area": 1193, + "areaCode": "0557", + "zipCode": "235300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661358663, + "parentId": 653116661354565, + "name": "萧县", + "shortName": null, + "level": 3, + "code": "341322", + "pinyin": "XiaoXian", + "pinyinFirst": "XX", + "capital": "龙城镇", + "population": 140, + "area": 1885, + "areaCode": "0557", + "zipCode": "235200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661358664, + "parentId": 653116661354565, + "name": "灵璧县", + "shortName": null, + "level": 3, + "code": "341323", + "pinyin": "LingBiXian", + "pinyinFirst": "LBX", + "capital": "灵城镇", + "population": 129, + "area": 2054, + "areaCode": "0557", + "zipCode": "234200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661358665, + "parentId": 653116661354565, + "name": "泗县", + "shortName": null, + "level": 3, + "code": "341324", + "pinyin": "SiXian", + "pinyinFirst": "SX", + "capital": "泗城镇", + "population": 96, + "area": 1787, + "areaCode": "0557", + "zipCode": "234300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661567557, + "parentId": 653116658233413, + "name": "六安市", + "shortName": null, + "level": 2, + "code": "341500", + "pinyin": "LuAnShi", + "pinyinFirst": "LAS", + "capital": "金安区", + "population": 591, + "area": 15351, + "areaCode": "0564", + "zipCode": "237000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116661571653, + "parentId": 653116661567557, + "name": "金安区", + "shortName": null, + "level": 3, + "code": "341502", + "pinyin": "JinAnQu", + "pinyinFirst": "JAQ", + "capital": "望城街道", + "population": 89, + "area": 1669, + "areaCode": "0564", + "zipCode": "237005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661571654, + "parentId": 653116661567557, + "name": "裕安区", + "shortName": null, + "level": 3, + "code": "341503", + "pinyin": "YuAnQu", + "pinyinFirst": "YAQ", + "capital": "平桥乡", + "population": 105, + "area": 1908, + "areaCode": "0564", + "zipCode": "237010", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661571655, + "parentId": 653116661567557, + "name": "叶集区", + "shortName": null, + "level": 3, + "code": "341504", + "pinyin": "YeJiQu", + "pinyinFirst": "YJQ", + "capital": "史河街道", + "population": 21, + "area": 568, + "areaCode": "0564", + "zipCode": "237431", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661571656, + "parentId": 653116661567557, + "name": "霍邱县", + "shortName": null, + "level": 3, + "code": "341522", + "pinyin": "HuoQiuXian", + "pinyinFirst": "HQX", + "capital": "城关镇", + "population": 94, + "area": 3239, + "areaCode": "0564", + "zipCode": "237400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661571657, + "parentId": 653116661567557, + "name": "舒城县", + "shortName": null, + "level": 3, + "code": "341523", + "pinyin": "ShuChengXian", + "pinyinFirst": "SCX", + "capital": "城关镇", + "population": 100, + "area": 2110, + "areaCode": "0564", + "zipCode": "231300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661571658, + "parentId": 653116661567557, + "name": "金寨县", + "shortName": null, + "level": 3, + "code": "341524", + "pinyin": "JinZhaiXian", + "pinyinFirst": "JZX", + "capital": "梅山镇", + "population": 68, + "area": 3814, + "areaCode": "0564", + "zipCode": "237300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661571659, + "parentId": 653116661567557, + "name": "霍山县", + "shortName": null, + "level": 3, + "code": "341525", + "pinyin": "HuoShanXian", + "pinyinFirst": "HSX", + "capital": "衡山镇", + "population": 36, + "area": 2043, + "areaCode": "0564", + "zipCode": "237200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661788741, + "parentId": 653116658233413, + "name": "亳州市", + "shortName": null, + "level": 2, + "code": "341600", + "pinyin": "BoZhouShi", + "pinyinFirst": "BZS", + "capital": "谯城区", + "population": 663, + "area": 8429, + "areaCode": "0558", + "zipCode": "236800", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116661788742, + "parentId": 653116661788741, + "name": "谯城区", + "shortName": null, + "level": 3, + "code": "341602", + "pinyin": "QiaoChengQu", + "pinyinFirst": "QCQ", + "capital": "花戏楼街道", + "population": 170, + "area": 2226, + "areaCode": "0558", + "zipCode": "236800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661788743, + "parentId": 653116661788741, + "name": "涡阳县", + "shortName": null, + "level": 3, + "code": "341621", + "pinyin": "WoYangXian", + "pinyinFirst": "WYX", + "capital": "城关街道", + "population": 172, + "area": 2107, + "areaCode": "0558", + "zipCode": "233600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661788744, + "parentId": 653116661788741, + "name": "蒙城县", + "shortName": null, + "level": 3, + "code": "341622", + "pinyin": "MengChengXian", + "pinyinFirst": "MCX", + "capital": "城关街道", + "population": 146, + "area": 2091, + "areaCode": "0558", + "zipCode": "233500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116661788745, + "parentId": 653116661788741, + "name": "利辛县", + "shortName": null, + "level": 3, + "code": "341623", + "pinyin": "LiXinXian", + "pinyinFirst": "LXX", + "capital": "城关镇", + "population": 175, + "area": 2005, + "areaCode": "0558", + "zipCode": "236700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116662001733, + "parentId": 653116658233413, + "name": "池州市", + "shortName": null, + "level": 2, + "code": "341700", + "pinyin": "ChiZhouShi", + "pinyinFirst": "CZS", + "capital": "贵池区", + "population": 162, + "area": 8399, + "areaCode": "0566", + "zipCode": "247100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116662001734, + "parentId": 653116662001733, + "name": "贵池区", + "shortName": null, + "level": 3, + "code": "341702", + "pinyin": "GuiChiQu", + "pinyinFirst": "GCQ", + "capital": "江口街道", + "population": 67, + "area": 2539, + "areaCode": "0566", + "zipCode": "247100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116662001735, + "parentId": 653116662001733, + "name": "东至县", + "shortName": null, + "level": 3, + "code": "341721", + "pinyin": "DongZhiXian", + "pinyinFirst": "DZX", + "capital": "尧渡镇", + "population": 55, + "area": 3250, + "areaCode": "0566", + "zipCode": "247200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116662001736, + "parentId": 653116662001733, + "name": "石台县", + "shortName": null, + "level": 3, + "code": "341722", + "pinyin": "ShiTaiXian", + "pinyinFirst": "STX", + "capital": "仁里镇", + "population": 11, + "area": 1414, + "areaCode": "0566", + "zipCode": "245100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116662001737, + "parentId": 653116662001733, + "name": "青阳县", + "shortName": null, + "level": 3, + "code": "341723", + "pinyin": "QingYangXian", + "pinyinFirst": "QYX", + "capital": "蓉城镇", + "population": 29, + "area": 1196, + "areaCode": "0566", + "zipCode": "242800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116662251589, + "parentId": 653116658233413, + "name": "宣城市", + "shortName": null, + "level": 2, + "code": "341800", + "pinyin": "XuanChengShi", + "pinyinFirst": "XCS", + "capital": "宣州区", + "population": 279, + "area": 12340, + "areaCode": "0563", + "zipCode": "242000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116662255685, + "parentId": 653116662251589, + "name": "宣州区", + "shortName": null, + "level": 3, + "code": "341802", + "pinyin": "XuanZhouQu", + "pinyinFirst": "XZQ", + "capital": "济川街道", + "population": 86, + "area": 2533, + "areaCode": "0563", + "zipCode": "242000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116662255686, + "parentId": 653116662251589, + "name": "宁国市", + "shortName": null, + "level": 3, + "code": "341881", + "pinyin": "NingGuoShi", + "pinyinFirst": "NGS", + "capital": "西津街道", + "population": 38, + "area": 2447, + "areaCode": "0563", + "zipCode": "242300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116662255687, + "parentId": 653116662251589, + "name": "广德市", + "shortName": null, + "level": 3, + "code": "341882", + "pinyin": "GuangDeShi", + "pinyinFirst": "GDS", + "capital": "桃州镇", + "population": 52, + "area": 2165, + "areaCode": "0563", + "zipCode": "242200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116662255688, + "parentId": 653116662251589, + "name": "郎溪县", + "shortName": null, + "level": 3, + "code": "341821", + "pinyin": "LangXiXian", + "pinyinFirst": "LXX", + "capital": "建平镇", + "population": 35, + "area": 1105, + "areaCode": "0563", + "zipCode": "242100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116662255689, + "parentId": 653116662251589, + "name": "泾县", + "shortName": null, + "level": 3, + "code": "341823", + "pinyin": "JingXian", + "pinyinFirst": "JX", + "capital": "泾川镇", + "population": 35, + "area": 2059, + "areaCode": "0563", + "zipCode": "242500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116662255690, + "parentId": 653116662251589, + "name": "绩溪县", + "shortName": null, + "level": 3, + "code": "341824", + "pinyin": "JiXiXian", + "pinyinFirst": "JXX", + "capital": "华阳镇", + "population": 17, + "area": 1126, + "areaCode": "0563", + "zipCode": "245300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116662255691, + "parentId": 653116662251589, + "name": "旌德县", + "shortName": null, + "level": 3, + "code": "341825", + "pinyin": "JingDeXian", + "pinyinFirst": "JDX", + "capital": "旌阳镇", + "population": 15, + "area": 905, + "areaCode": "0563", + "zipCode": "242600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:31", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:05" + }, + { + "id": 653116662517829, + "parentId": 0, + "name": "福建省", + "shortName": "闽", + "level": 1, + "code": "350000", + "pinyin": "FuJianSheng", + "pinyinFirst": "FJS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116663713861, + "parentId": 653116662517829, + "name": "福州市", + "shortName": null, + "level": 2, + "code": "350100", + "pinyin": "FuZhouShi", + "pinyinFirst": "FZS", + "capital": "鼓楼区", + "population": 710, + "area": 11974, + "areaCode": "0591", + "zipCode": "350000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116663713862, + "parentId": 653116663713861, + "name": "鼓楼区", + "shortName": null, + "level": 3, + "code": "350102", + "pinyin": "GuLouQu", + "pinyinFirst": "GLQ", + "capital": "东街街道", + "population": 59, + "area": 35, + "areaCode": "0591", + "zipCode": "350001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663713863, + "parentId": 653116663713861, + "name": "台江区", + "shortName": null, + "level": 3, + "code": "350103", + "pinyin": "TaiJiangQu", + "pinyinFirst": "TJQ", + "capital": "后洲街道", + "population": 32, + "area": 18, + "areaCode": "0591", + "zipCode": "350004", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663713864, + "parentId": 653116663713861, + "name": "仓山区", + "shortName": null, + "level": 3, + "code": "350104", + "pinyin": "CangShanQu", + "pinyinFirst": "CSQ", + "capital": "金山街道", + "population": 62, + "area": 142, + "areaCode": "0591", + "zipCode": "350007", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663713865, + "parentId": 653116663713861, + "name": "马尾区", + "shortName": null, + "level": 3, + "code": "350105", + "pinyin": "MaYiQu", + "pinyinFirst": "MYQ", + "capital": "罗星街道", + "population": 18, + "area": 281, + "areaCode": "0591", + "zipCode": "350015", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663713866, + "parentId": 653116663713861, + "name": "晋安区", + "shortName": null, + "level": 3, + "code": "350111", + "pinyin": "JinAnQu", + "pinyinFirst": "JAQ", + "capital": "岳峰镇", + "population": 42, + "area": 567, + "areaCode": "0591", + "zipCode": "350011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663713867, + "parentId": 653116663713861, + "name": "长乐区", + "shortName": null, + "level": 3, + "code": "350112", + "pinyin": "ChangLeQu", + "pinyinFirst": "CLQ", + "capital": "吴航街道", + "population": 76, + "area": 723, + "areaCode": "0591", + "zipCode": "350200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663713868, + "parentId": 653116663713861, + "name": "福清市", + "shortName": null, + "level": 3, + "code": "350181", + "pinyin": "FuQingShi", + "pinyinFirst": "FQS", + "capital": "玉屏街道", + "population": 139, + "area": 1518, + "areaCode": "0591", + "zipCode": "350300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663713869, + "parentId": 653116663713861, + "name": "闽侯县", + "shortName": null, + "level": 3, + "code": "350121", + "pinyin": "MinHouXian", + "pinyinFirst": "MHX", + "capital": "甘蔗街道", + "population": 70, + "area": 2136, + "areaCode": "0591", + "zipCode": "350100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663713870, + "parentId": 653116663713861, + "name": "连江县", + "shortName": null, + "level": 3, + "code": "350122", + "pinyin": "LianJiangXian", + "pinyinFirst": "LJX", + "capital": "凤城镇", + "population": 68, + "area": 1168, + "areaCode": "0591", + "zipCode": "350500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663713871, + "parentId": 653116663713861, + "name": "罗源县", + "shortName": null, + "level": 3, + "code": "350123", + "pinyin": "LuoYuanXian", + "pinyinFirst": "LYX", + "capital": "凤山镇", + "population": 27, + "area": 1187, + "areaCode": "0591", + "zipCode": "350600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663713872, + "parentId": 653116663713861, + "name": "闽清县", + "shortName": null, + "level": 3, + "code": "350124", + "pinyin": "MinQingXian", + "pinyinFirst": "MQX", + "capital": "梅城镇", + "population": 32, + "area": 1504, + "areaCode": "0591", + "zipCode": "350800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663713873, + "parentId": 653116663713861, + "name": "永泰县", + "shortName": null, + "level": 3, + "code": "350125", + "pinyin": "YongTaiXian", + "pinyinFirst": "YTX", + "capital": "樟城镇", + "population": 39, + "area": 2241, + "areaCode": "0591", + "zipCode": "350700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663713874, + "parentId": 653116663713861, + "name": "平潭县", + "shortName": null, + "level": 3, + "code": "350128", + "pinyin": "PingTanXian", + "pinyinFirst": "PTX", + "capital": "潭城镇", + "population": 45, + "area": 371, + "areaCode": "0591", + "zipCode": "350400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663795781, + "parentId": 653116662517829, + "name": "厦门市", + "shortName": null, + "level": 2, + "code": "350200", + "pinyin": "XiaMenShi", + "pinyinFirst": "XMS", + "capital": "思明区", + "population": 259, + "area": 1701, + "areaCode": "0592", + "zipCode": "361000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116663795782, + "parentId": 653116663795781, + "name": "思明区", + "shortName": null, + "level": 3, + "code": "350203", + "pinyin": "SiMingQu", + "pinyinFirst": "SMQ", + "capital": "厦港街道", + "population": 85, + "area": 84, + "areaCode": "0592", + "zipCode": "361001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663795783, + "parentId": 653116663795781, + "name": "海沧区", + "shortName": null, + "level": 3, + "code": "350205", + "pinyin": "HaiCangQu", + "pinyinFirst": "HCQ", + "capital": "嵩屿街道", + "population": 24, + "area": 187, + "areaCode": "0592", + "zipCode": "361026", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663795784, + "parentId": 653116663795781, + "name": "湖里区", + "shortName": null, + "level": 3, + "code": "350206", + "pinyin": "HuLiQu", + "pinyinFirst": "HLQ", + "capital": "禾山街道", + "population": 36, + "area": 74, + "areaCode": "0592", + "zipCode": "361015", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663795785, + "parentId": 653116663795781, + "name": "集美区", + "shortName": null, + "level": 3, + "code": "350211", + "pinyin": "JiMeiQu", + "pinyinFirst": "JMQ", + "capital": "集美街道", + "population": 36, + "area": 274, + "areaCode": "0592", + "zipCode": "361021", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663795786, + "parentId": 653116663795781, + "name": "同安区", + "shortName": null, + "level": 3, + "code": "350212", + "pinyin": "TongAnQu", + "pinyinFirst": "TAQ", + "capital": "祥平街道", + "population": 40, + "area": 670, + "areaCode": "0592", + "zipCode": "361100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663795787, + "parentId": 653116663795781, + "name": "翔安区", + "shortName": null, + "level": 3, + "code": "350213", + "pinyin": "XiangAnQu", + "pinyinFirst": "XAQ", + "capital": "新店镇", + "population": 38, + "area": 412, + "areaCode": "0592", + "zipCode": "361102", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663898181, + "parentId": 653116662517829, + "name": "莆田市", + "shortName": null, + "level": 2, + "code": "350300", + "pinyin": "PuTianShi", + "pinyinFirst": "PTS", + "capital": "城厢区", + "population": 363, + "area": 4132, + "areaCode": "0594", + "zipCode": "351100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116663902277, + "parentId": 653116663898181, + "name": "城厢区", + "shortName": null, + "level": 3, + "code": "350302", + "pinyin": "ChengXiangQu", + "pinyinFirst": "CXQ", + "capital": "霞林街道", + "population": 44, + "area": 505, + "areaCode": "0594", + "zipCode": "351199", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663902278, + "parentId": 653116663898181, + "name": "涵江区", + "shortName": null, + "level": 3, + "code": "350303", + "pinyin": "HanJiangQu", + "pinyinFirst": "HJQ", + "capital": "涵东街道", + "population": 45, + "area": 800, + "areaCode": "0594", + "zipCode": "351111", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663902279, + "parentId": 653116663898181, + "name": "荔城区", + "shortName": null, + "level": 3, + "code": "350304", + "pinyin": "LiChengQu", + "pinyinFirst": "LCQ", + "capital": "镇海街道", + "population": 61, + "area": 300, + "areaCode": "0594", + "zipCode": "351100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663902280, + "parentId": 653116663898181, + "name": "秀屿区", + "shortName": null, + "level": 3, + "code": "350305", + "pinyin": "XiuYuQu", + "pinyinFirst": "XYQ", + "capital": "笏石镇", + "population": 96, + "area": 686, + "areaCode": "0594", + "zipCode": "351146", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116663902281, + "parentId": 653116663898181, + "name": "仙游县", + "shortName": null, + "level": 3, + "code": "350322", + "pinyin": "XianYouXian", + "pinyinFirst": "XYX", + "capital": "鲤城街道", + "population": 118, + "area": 1841, + "areaCode": "0594", + "zipCode": "351200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664021061, + "parentId": 653116662517829, + "name": "三明市", + "shortName": null, + "level": 2, + "code": "350400", + "pinyin": "SanMingShi", + "pinyinFirst": "SMS", + "capital": "三元区", + "population": 289, + "area": 22965, + "areaCode": "0598", + "zipCode": "365000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116664021062, + "parentId": 653116664021061, + "name": "三元区", + "shortName": null, + "level": 3, + "code": "350404", + "pinyin": "SanYuanQu", + "pinyinFirst": "SYQ", + "capital": "列东街道", + "population": 29, + "area": 1151, + "areaCode": "0598", + "zipCode": "365000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664021063, + "parentId": 653116664021061, + "name": "沙县区", + "shortName": null, + "level": 3, + "code": "350405", + "pinyin": "ShaXianQu", + "pinyinFirst": "SXQ", + "capital": "凤岗街道", + "population": 27, + "area": 1799, + "areaCode": "0598", + "zipCode": "365500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664021064, + "parentId": 653116664021061, + "name": "永安市", + "shortName": null, + "level": 3, + "code": "350481", + "pinyin": "YongAnShi", + "pinyinFirst": "YAS", + "capital": "燕南街道", + "population": 33, + "area": 2931, + "areaCode": "0598", + "zipCode": "366000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664021065, + "parentId": 653116664021061, + "name": "明溪县", + "shortName": null, + "level": 3, + "code": "350421", + "pinyin": "MingXiXian", + "pinyinFirst": "MXX", + "capital": "雪峰镇", + "population": 12, + "area": 1730, + "areaCode": "0598", + "zipCode": "365200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664021066, + "parentId": 653116664021061, + "name": "清流县", + "shortName": null, + "level": 3, + "code": "350423", + "pinyin": "QingLiuXian", + "pinyinFirst": "QLX", + "capital": "龙津镇", + "population": 15, + "area": 1806, + "areaCode": "0598", + "zipCode": "365300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664021067, + "parentId": 653116664021061, + "name": "宁化县", + "shortName": null, + "level": 3, + "code": "350424", + "pinyin": "NingHuaXian", + "pinyinFirst": "NHX", + "capital": "翠江镇", + "population": 38, + "area": 2407, + "areaCode": "0598", + "zipCode": "365400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664021068, + "parentId": 653116664021061, + "name": "大田县", + "shortName": null, + "level": 3, + "code": "350425", + "pinyin": "DaTianXian", + "pinyinFirst": "DTX", + "capital": "均溪镇", + "population": 42, + "area": 2233, + "areaCode": "0598", + "zipCode": "366100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664021069, + "parentId": 653116664021061, + "name": "尤溪县", + "shortName": null, + "level": 3, + "code": "350426", + "pinyin": "YouXiXian", + "pinyinFirst": "YXX", + "capital": "城关镇", + "population": 45, + "area": 3420, + "areaCode": "0598", + "zipCode": "365100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664021070, + "parentId": 653116664021061, + "name": "将乐县", + "shortName": null, + "level": 3, + "code": "350428", + "pinyin": "JiangLeXian", + "pinyinFirst": "JLX", + "capital": "古镛镇", + "population": 19, + "area": 2241, + "areaCode": "0598", + "zipCode": "353300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664021071, + "parentId": 653116664021061, + "name": "泰宁县", + "shortName": null, + "level": 3, + "code": "350429", + "pinyin": "TaiNingXian", + "pinyinFirst": "TNX", + "capital": "杉城镇", + "population": 14, + "area": 1529, + "areaCode": "0598", + "zipCode": "354400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664021072, + "parentId": 653116664021061, + "name": "建宁县", + "shortName": null, + "level": 3, + "code": "350430", + "pinyin": "JianNingXian", + "pinyinFirst": "JNX", + "capital": "濉溪镇", + "population": 16, + "area": 1716, + "areaCode": "0598", + "zipCode": "354500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664168517, + "parentId": 653116662517829, + "name": "泉州市", + "shortName": null, + "level": 2, + "code": "350500", + "pinyin": "QuanZhouShi", + "pinyinFirst": "QZS", + "capital": "丰泽区", + "population": 761, + "area": 11015, + "areaCode": "0595", + "zipCode": "362000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116664172613, + "parentId": 653116664168517, + "name": "丰泽区", + "shortName": null, + "level": 3, + "code": "350503", + "pinyin": "FengZeQu", + "pinyinFirst": "FZQ", + "capital": "丰泽街道", + "population": 28, + "area": 108, + "areaCode": "0595", + "zipCode": "362000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664172614, + "parentId": 653116664168517, + "name": "鲤城区", + "shortName": null, + "level": 3, + "code": "350502", + "pinyin": "LiChengQu", + "pinyinFirst": "LCQ", + "capital": "海滨街道", + "population": 27, + "area": 54, + "areaCode": "0595", + "zipCode": "362000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664172615, + "parentId": 653116664168517, + "name": "洛江区", + "shortName": null, + "level": 3, + "code": "350504", + "pinyin": "LuoJiangQu", + "pinyinFirst": "LJQ", + "capital": "万安街道", + "population": 21, + "area": 382, + "areaCode": "0595", + "zipCode": "362011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664172616, + "parentId": 653116664168517, + "name": "泉港区", + "shortName": null, + "level": 3, + "code": "350505", + "pinyin": "QuanGangQu", + "pinyinFirst": "QGQ", + "capital": "山腰街道", + "population": 42, + "area": 306, + "areaCode": "0595", + "zipCode": "362800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664172617, + "parentId": 653116664168517, + "name": "石狮市", + "shortName": null, + "level": 3, + "code": "350581", + "pinyin": "ShiShiShi", + "pinyinFirst": "SSS", + "capital": "湖滨街道", + "population": 35, + "area": 160, + "areaCode": "0595", + "zipCode": "362700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664172618, + "parentId": 653116664168517, + "name": "晋江市", + "shortName": null, + "level": 3, + "code": "350582", + "pinyin": "JinJiangShi", + "pinyinFirst": "JJS", + "capital": "罗山街道", + "population": 119, + "area": 642, + "areaCode": "0595", + "zipCode": "362200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664172619, + "parentId": 653116664168517, + "name": "南安市", + "shortName": null, + "level": 3, + "code": "350583", + "pinyin": "NanAnShi", + "pinyinFirst": "NAS", + "capital": "溪美街道", + "population": 167, + "area": 1985, + "areaCode": "0595", + "zipCode": "362300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664172620, + "parentId": 653116664168517, + "name": "惠安县", + "shortName": null, + "level": 3, + "code": "350521", + "pinyin": "HuiAnXian", + "pinyinFirst": "HAX", + "capital": "螺城镇", + "population": 105, + "area": 672, + "areaCode": "0595", + "zipCode": "362100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664172621, + "parentId": 653116664168517, + "name": "安溪县", + "shortName": null, + "level": 3, + "code": "350524", + "pinyin": "AnXiXian", + "pinyinFirst": "AXX", + "capital": "凤城镇", + "population": 121, + "area": 3057, + "areaCode": "0595", + "zipCode": "362400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664172622, + "parentId": 653116664168517, + "name": "永春县", + "shortName": null, + "level": 3, + "code": "350525", + "pinyin": "YongChunXian", + "pinyinFirst": "YCX", + "capital": "桃城镇", + "population": 60, + "area": 1457, + "areaCode": "0595", + "zipCode": "362600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664172623, + "parentId": 653116664168517, + "name": "德化县", + "shortName": null, + "level": 3, + "code": "350526", + "pinyin": "DeHuaXian", + "pinyinFirst": "DHX", + "capital": "浔中镇", + "population": 35, + "area": 2232, + "areaCode": "0595", + "zipCode": "362500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664172624, + "parentId": 653116664168517, + "name": "金门县☆", + "shortName": null, + "level": 3, + "code": "350527", + "pinyin": "JinMenXian☆", + "pinyinFirst": "JMX☆", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664340549, + "parentId": 653116662517829, + "name": "漳州市", + "shortName": null, + "level": 2, + "code": "350600", + "pinyin": "ZhangZhouShi", + "pinyinFirst": "ZZS", + "capital": "龙文区", + "population": 522, + "area": 12882, + "areaCode": "0596", + "zipCode": "363000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116664340550, + "parentId": 653116664340549, + "name": "龙文区", + "shortName": null, + "level": 3, + "code": "350603", + "pinyin": "LongWenQu", + "pinyinFirst": "LWQ", + "capital": "步文街道", + "population": 17, + "area": 126, + "areaCode": "0596", + "zipCode": "363005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664340551, + "parentId": 653116664340549, + "name": "芗城区", + "shortName": null, + "level": 3, + "code": "350602", + "pinyin": "XiangChengQu", + "pinyinFirst": "XCQ", + "capital": "东铺头街道", + "population": 47, + "area": 245, + "areaCode": "0596", + "zipCode": "363000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664340552, + "parentId": 653116664340549, + "name": "龙海区", + "shortName": null, + "level": 3, + "code": "350604", + "pinyin": "LongHaiQu", + "pinyinFirst": "LHQ", + "capital": "石码街道", + "population": 90, + "area": 1318, + "areaCode": "0596", + "zipCode": "363100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664340553, + "parentId": 653116664340549, + "name": "长泰区", + "shortName": null, + "level": 3, + "code": "350605", + "pinyin": "ChangTaiQu", + "pinyinFirst": "CTQ", + "capital": "武安镇", + "population": 21, + "area": 900, + "areaCode": "0596", + "zipCode": "363900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664340554, + "parentId": 653116664340549, + "name": "云霄县", + "shortName": null, + "level": 3, + "code": "350622", + "pinyin": "YunXiaoXian", + "pinyinFirst": "YXX", + "capital": "云陵镇", + "population": 47, + "area": 1051, + "areaCode": "0596", + "zipCode": "363300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664340555, + "parentId": 653116664340549, + "name": "漳浦县", + "shortName": null, + "level": 3, + "code": "350623", + "pinyin": "ZhangPuXian", + "pinyinFirst": "ZPX", + "capital": "绥安镇", + "population": 94, + "area": 2149, + "areaCode": "0596", + "zipCode": "363200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664340556, + "parentId": 653116664340549, + "name": "诏安县", + "shortName": null, + "level": 3, + "code": "350624", + "pinyin": "ZhaoAnXian", + "pinyinFirst": "ZAX", + "capital": "南诏镇", + "population": 68, + "area": 2194, + "areaCode": "0596", + "zipCode": "363500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664340557, + "parentId": 653116664340549, + "name": "东山县", + "shortName": null, + "level": 3, + "code": "350626", + "pinyin": "DongShanXian", + "pinyinFirst": "DSX", + "capital": "西埔镇", + "population": 22, + "area": 248, + "areaCode": "0596", + "zipCode": "363400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664340558, + "parentId": 653116664340549, + "name": "南靖县", + "shortName": null, + "level": 3, + "code": "350627", + "pinyin": "NanJingXian", + "pinyinFirst": "NJX", + "capital": "山城镇", + "population": 36, + "area": 1962, + "areaCode": "0596", + "zipCode": "363600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664340559, + "parentId": 653116664340549, + "name": "平和县", + "shortName": null, + "level": 3, + "code": "350628", + "pinyin": "PingHeXian", + "pinyinFirst": "PHX", + "capital": "小溪镇", + "population": 62, + "area": 2310, + "areaCode": "0596", + "zipCode": "363700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664340560, + "parentId": 653116664340549, + "name": "华安县", + "shortName": null, + "level": 3, + "code": "350629", + "pinyin": "HuaAnXian", + "pinyinFirst": "HAX", + "capital": "华丰镇", + "population": 18, + "area": 1278, + "areaCode": "0596", + "zipCode": "363800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664488005, + "parentId": 653116662517829, + "name": "南平市", + "shortName": null, + "level": 2, + "code": "350700", + "pinyin": "NanPingShi", + "pinyinFirst": "NPS", + "capital": "建阳区", + "population": 318, + "area": 26337, + "areaCode": "0599", + "zipCode": "353000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116664492101, + "parentId": 653116664488005, + "name": "建阳区", + "shortName": null, + "level": 3, + "code": "350703", + "pinyin": "JianYangQu", + "pinyinFirst": "JYQ", + "capital": "潭城街道", + "population": 36, + "area": 3387, + "areaCode": "0599", + "zipCode": "354200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664492102, + "parentId": 653116664488005, + "name": "延平区", + "shortName": null, + "level": 3, + "code": "350702", + "pinyin": "YanPingQu", + "pinyinFirst": "YPQ", + "capital": "紫云街道", + "population": 50, + "area": 2660, + "areaCode": "0599", + "zipCode": "353000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664492103, + "parentId": 653116664488005, + "name": "邵武市", + "shortName": null, + "level": 3, + "code": "350781", + "pinyin": "ShaoWuShi", + "pinyinFirst": "SWS", + "capital": "昭阳街道", + "population": 30, + "area": 2859, + "areaCode": "0599", + "zipCode": "354000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664512581, + "parentId": 653116664488005, + "name": "武夷山市", + "shortName": null, + "level": 3, + "code": "350782", + "pinyin": "WuYiShanShi", + "pinyinFirst": "WYSS", + "capital": "崇安街道", + "population": 25, + "area": 2814, + "areaCode": "0599", + "zipCode": "354300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664512582, + "parentId": 653116664488005, + "name": "建瓯市", + "shortName": null, + "level": 3, + "code": "350783", + "pinyin": "JianOuShi", + "pinyinFirst": "JOS", + "capital": "瓯宁街道", + "population": 55, + "area": 4233, + "areaCode": "0599", + "zipCode": "353100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664512583, + "parentId": 653116664488005, + "name": "顺昌县", + "shortName": null, + "level": 3, + "code": "350721", + "pinyin": "ShunChangXian", + "pinyinFirst": "SCX", + "capital": "双溪街道", + "population": 23, + "area": 1980, + "areaCode": "0599", + "zipCode": "353200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664512584, + "parentId": 653116664488005, + "name": "浦城县", + "shortName": null, + "level": 3, + "code": "350722", + "pinyin": "PuChengXian", + "pinyinFirst": "PCX", + "capital": "南浦街道", + "population": 43, + "area": 3383, + "areaCode": "0599", + "zipCode": "353400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664512585, + "parentId": 653116664488005, + "name": "光泽县", + "shortName": null, + "level": 3, + "code": "350723", + "pinyin": "GuangZeXian", + "pinyinFirst": "GZX", + "capital": "杭川镇", + "population": 16, + "area": 2240, + "areaCode": "0599", + "zipCode": "354100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664512586, + "parentId": 653116664488005, + "name": "松溪县", + "shortName": null, + "level": 3, + "code": "350724", + "pinyin": "SongXiXian", + "pinyinFirst": "SXX", + "capital": "松源街道", + "population": 16, + "area": 1043, + "areaCode": "0599", + "zipCode": "353500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664512587, + "parentId": 653116664488005, + "name": "政和县", + "shortName": null, + "level": 3, + "code": "350725", + "pinyin": "ZhengHeXian", + "pinyinFirst": "ZHX", + "capital": "熊山街道", + "population": 24, + "area": 1749, + "areaCode": "0599", + "zipCode": "353600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664692805, + "parentId": 653116662517829, + "name": "龙岩市", + "shortName": null, + "level": 2, + "code": "350800", + "pinyin": "LongYanShi", + "pinyinFirst": "LYS", + "capital": "新罗区", + "population": 318, + "area": 19028, + "areaCode": "0597", + "zipCode": "364000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116664692806, + "parentId": 653116664692805, + "name": "新罗区", + "shortName": null, + "level": 3, + "code": "350802", + "pinyin": "XinLuoQu", + "pinyinFirst": "XLQ", + "capital": "东城街道", + "population": 58, + "area": 2673, + "areaCode": "0597", + "zipCode": "364000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664692807, + "parentId": 653116664692805, + "name": "永定区", + "shortName": null, + "level": 3, + "code": "350803", + "pinyin": "YongDingQu", + "pinyinFirst": "YDQ", + "capital": "凤城街道", + "population": 49, + "area": 2226, + "areaCode": "0597", + "zipCode": "364100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664692808, + "parentId": 653116664692805, + "name": "漳平市", + "shortName": null, + "level": 3, + "code": "350881", + "pinyin": "ZhangPingShi", + "pinyinFirst": "ZPS", + "capital": "菁城街道", + "population": 29, + "area": 2956, + "areaCode": "0597", + "zipCode": "364400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664692809, + "parentId": 653116664692805, + "name": "长汀县", + "shortName": null, + "level": 3, + "code": "350821", + "pinyin": "ChangTingXian", + "pinyinFirst": "CTX", + "capital": "汀州镇", + "population": 55, + "area": 3104, + "areaCode": "0597", + "zipCode": "366300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664692810, + "parentId": 653116664692805, + "name": "上杭县", + "shortName": null, + "level": 3, + "code": "350823", + "pinyin": "ShangHangXian", + "pinyinFirst": "SHX", + "capital": "临江镇", + "population": 52, + "area": 2854, + "areaCode": "0597", + "zipCode": "364200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664692811, + "parentId": 653116664692805, + "name": "武平县", + "shortName": null, + "level": 3, + "code": "350824", + "pinyin": "WuPingXian", + "pinyinFirst": "WPX", + "capital": "平川街道", + "population": 40, + "area": 2635, + "areaCode": "0597", + "zipCode": "364300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664692812, + "parentId": 653116664692805, + "name": "连城县", + "shortName": null, + "level": 3, + "code": "350825", + "pinyin": "LianChengXian", + "pinyinFirst": "LCX", + "capital": "莲峰镇", + "population": 34, + "area": 2579, + "areaCode": "0597", + "zipCode": "366200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664877125, + "parentId": 653116662517829, + "name": "宁德市", + "shortName": null, + "level": 2, + "code": "350900", + "pinyin": "NingDeShi", + "pinyinFirst": "NDS", + "capital": "蕉城区", + "population": 355, + "area": 13433, + "areaCode": "0593", + "zipCode": "352100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116664877126, + "parentId": 653116664877125, + "name": "蕉城区", + "shortName": null, + "level": 3, + "code": "350902", + "pinyin": "JiaoChengQu", + "pinyinFirst": "JCQ", + "capital": "蕉北街道", + "population": 52, + "area": 1505, + "areaCode": "0593", + "zipCode": "352100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664877127, + "parentId": 653116664877125, + "name": "福安市", + "shortName": null, + "level": 3, + "code": "350981", + "pinyin": "FuAnShi", + "pinyinFirst": "FAS", + "capital": "城北街道", + "population": 68, + "area": 1810, + "areaCode": "0593", + "zipCode": "355000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664877128, + "parentId": 653116664877125, + "name": "福鼎市", + "shortName": null, + "level": 3, + "code": "350982", + "pinyin": "FuDingShi", + "pinyinFirst": "FDS", + "capital": "桐山街道", + "population": 60, + "area": 1542, + "areaCode": "0593", + "zipCode": "355200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664877129, + "parentId": 653116664877125, + "name": "霞浦县", + "shortName": null, + "level": 3, + "code": "350921", + "pinyin": "XiaPuXian", + "pinyinFirst": "XPX", + "capital": "松城街道", + "population": 55, + "area": 1708, + "areaCode": "0593", + "zipCode": "355100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664877130, + "parentId": 653116664877125, + "name": "古田县", + "shortName": null, + "level": 3, + "code": "350922", + "pinyin": "GuTianXian", + "pinyinFirst": "GTX", + "capital": "城东街道", + "population": 43, + "area": 2373, + "areaCode": "0593", + "zipCode": "352200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664877131, + "parentId": 653116664877125, + "name": "屏南县", + "shortName": null, + "level": 3, + "code": "350923", + "pinyin": "PingNanXian", + "pinyinFirst": "PNX", + "capital": "古峰镇", + "population": 19, + "area": 1484, + "areaCode": "0593", + "zipCode": "352300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664877132, + "parentId": 653116664877125, + "name": "寿宁县", + "shortName": null, + "level": 3, + "code": "350924", + "pinyin": "ShouNingXian", + "pinyinFirst": "SNX", + "capital": "鳌阳镇", + "population": 27, + "area": 1433, + "areaCode": "0593", + "zipCode": "355500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664877133, + "parentId": 653116664877125, + "name": "周宁县", + "shortName": null, + "level": 3, + "code": "350925", + "pinyin": "ZhouNingXian", + "pinyinFirst": "ZNX", + "capital": "狮城镇", + "population": 21, + "area": 1035, + "areaCode": "0593", + "zipCode": "355400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116664877134, + "parentId": 653116664877125, + "name": "柘荣县", + "shortName": null, + "level": 3, + "code": "350926", + "pinyin": "ZheRongXian", + "pinyinFirst": "ZRX", + "capital": "双城镇", + "population": 11, + "area": 538, + "areaCode": "0593", + "zipCode": "355300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:32", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:06" + }, + { + "id": 653116665073733, + "parentId": 0, + "name": "江西省", + "shortName": "赣", + "level": 1, + "code": "360000", + "pinyin": "JiangXiSheng", + "pinyinFirst": "JXS", + "capital": null, + "population": null, + "area": null, + "areaCode": "", + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116666372165, + "parentId": 653116665073733, + "name": "南昌市", + "shortName": null, + "level": 2, + "code": "360100", + "pinyin": "NanChangShi", + "pinyinFirst": "NCS", + "capital": "红谷滩区", + "population": 536, + "area": 7195, + "areaCode": "0791", + "zipCode": "330008", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116666372166, + "parentId": 653116666372165, + "name": "红谷滩区", + "shortName": null, + "level": 3, + "code": "360113", + "pinyin": "HongGuTanQu", + "pinyinFirst": "HGTQ", + "capital": "沙井街道", + "population": 33, + "area": 190, + "areaCode": "0791", + "zipCode": "330038", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666372167, + "parentId": 653116666372165, + "name": "东湖区", + "shortName": null, + "level": 3, + "code": "360102", + "pinyin": "DongHuQu", + "pinyinFirst": "DHQ", + "capital": "公园街道", + "population": 58, + "area": 57, + "areaCode": "0791", + "zipCode": "330006", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666372168, + "parentId": 653116666372165, + "name": "西湖区", + "shortName": null, + "level": 3, + "code": "360103", + "pinyin": "XiHuQu", + "pinyinFirst": "XHQ", + "capital": "朝阳洲街道", + "population": 46, + "area": 35, + "areaCode": "0791", + "zipCode": "330025", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666372169, + "parentId": 653116666372165, + "name": "青云谱区", + "shortName": null, + "level": 3, + "code": "360104", + "pinyin": "QingYunPuQu", + "pinyinFirst": "QYPQ", + "capital": "三家店街道", + "population": 26, + "area": 37, + "areaCode": "0791", + "zipCode": "330001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666372170, + "parentId": 653116666372165, + "name": "青山湖区", + "shortName": null, + "level": 3, + "code": "360111", + "pinyin": "QingShanHuQu", + "pinyinFirst": "QSHQ", + "capital": "京东镇", + "population": 66, + "area": 241, + "areaCode": "0791", + "zipCode": "330029", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666372171, + "parentId": 653116666372165, + "name": "新建区", + "shortName": null, + "level": 3, + "code": "360112", + "pinyin": "XinJianQu", + "pinyinFirst": "XJQ", + "capital": "长堎镇", + "population": 89, + "area": 2218, + "areaCode": "0791", + "zipCode": "330100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666372172, + "parentId": 653116666372165, + "name": "南昌县", + "shortName": null, + "level": 3, + "code": "360121", + "pinyin": "NanChangXian", + "pinyinFirst": "NCX", + "capital": "莲塘镇", + "population": 126, + "area": 1811, + "areaCode": "0791", + "zipCode": "330200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666372173, + "parentId": 653116666372165, + "name": "安义县", + "shortName": null, + "level": 3, + "code": "360123", + "pinyin": "AnYiXian", + "pinyinFirst": "AYX", + "capital": "龙津镇", + "population": 30, + "area": 660, + "areaCode": "0791", + "zipCode": "330500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666372174, + "parentId": 653116666372165, + "name": "进贤县", + "shortName": null, + "level": 3, + "code": "360124", + "pinyin": "JinXianXian", + "pinyinFirst": "JXX", + "capital": "民和镇", + "population": 84, + "area": 1946, + "areaCode": "0791", + "zipCode": "331700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666449989, + "parentId": 653116665073733, + "name": "景德镇市", + "shortName": null, + "level": 2, + "code": "360200", + "pinyin": "JingDeZhenShi", + "pinyinFirst": "JDZS", + "capital": "昌江区", + "population": 171, + "area": 5262, + "areaCode": "0798", + "zipCode": "333000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116666454085, + "parentId": 653116666449989, + "name": "昌江区", + "shortName": null, + "level": 3, + "code": "360202", + "pinyin": "ChangJiangQu", + "pinyinFirst": "CJQ", + "capital": "西郊街道", + "population": 15, + "area": 315, + "areaCode": "0798", + "zipCode": "333000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666454086, + "parentId": 653116666449989, + "name": "珠山区", + "shortName": null, + "level": 3, + "code": "360203", + "pinyin": "ZhuShanQu", + "pinyinFirst": "ZSQ", + "capital": "石狮埠街道", + "population": 32, + "area": 111, + "areaCode": "0798", + "zipCode": "333000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666454087, + "parentId": 653116666449989, + "name": "乐平市", + "shortName": null, + "level": 3, + "code": "360281", + "pinyin": "LePingShi", + "pinyinFirst": "LPS", + "capital": "洎阳街道", + "population": 95, + "area": 1985, + "areaCode": "0798", + "zipCode": "333300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666454088, + "parentId": 653116666449989, + "name": "浮梁县", + "shortName": null, + "level": 3, + "code": "360222", + "pinyin": "FuLiangXian", + "pinyinFirst": "FLX", + "capital": "浮梁镇", + "population": 28, + "area": 2851, + "areaCode": "0798", + "zipCode": "333400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666544197, + "parentId": 653116665073733, + "name": "萍乡市", + "shortName": null, + "level": 2, + "code": "360300", + "pinyin": "PingXiangShi", + "pinyinFirst": "PXS", + "capital": "安源区", + "population": 200, + "area": 3830, + "areaCode": "0799", + "zipCode": "337000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116666548293, + "parentId": 653116666544197, + "name": "安源区", + "shortName": null, + "level": 3, + "code": "360302", + "pinyin": "AnYuanQu", + "pinyinFirst": "AYQ", + "capital": "安源镇", + "population": 47, + "area": 213, + "areaCode": "0799", + "zipCode": "337035", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666548294, + "parentId": 653116666544197, + "name": "湘东区", + "shortName": null, + "level": 3, + "code": "360313", + "pinyin": "XiangDongQu", + "pinyinFirst": "XDQ", + "capital": "湘东镇", + "population": 41, + "area": 857, + "areaCode": "0799", + "zipCode": "337016", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666548295, + "parentId": 653116666544197, + "name": "莲花县", + "shortName": null, + "level": 3, + "code": "360321", + "pinyin": "LianHuaXian", + "pinyinFirst": "LHX", + "capital": "琴亭镇", + "population": 28, + "area": 1072, + "areaCode": "0799", + "zipCode": "337100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666548296, + "parentId": 653116666544197, + "name": "上栗县", + "shortName": null, + "level": 3, + "code": "360322", + "pinyin": "ShangLiXian", + "pinyinFirst": "SLX", + "capital": "上栗镇", + "population": 52, + "area": 727, + "areaCode": "0799", + "zipCode": "337009", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666548297, + "parentId": 653116666544197, + "name": "芦溪县", + "shortName": null, + "level": 3, + "code": "360323", + "pinyin": "LuXiXian", + "pinyinFirst": "LXX", + "capital": "芦溪镇", + "population": 31, + "area": 961, + "areaCode": "0799", + "zipCode": "337200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666646597, + "parentId": 653116665073733, + "name": "九江市", + "shortName": null, + "level": 2, + "code": "360400", + "pinyin": "JiuJiangShi", + "pinyinFirst": "JJS", + "capital": "浔阳区", + "population": 525, + "area": 19077, + "areaCode": "0792", + "zipCode": "332000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116666650693, + "parentId": 653116666646597, + "name": "浔阳区", + "shortName": null, + "level": 3, + "code": "360403", + "pinyin": "XunYangQu", + "pinyinFirst": "XYQ", + "capital": "甘棠街道", + "population": 32, + "area": 49, + "areaCode": "0792", + "zipCode": "332000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666650694, + "parentId": 653116666646597, + "name": "濂溪区", + "shortName": null, + "level": 3, + "code": "360402", + "pinyin": "LianXiQu", + "pinyinFirst": "LXQ", + "capital": "十里街道", + "population": 37, + "area": 400, + "areaCode": "0792", + "zipCode": "332005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666650695, + "parentId": 653116666646597, + "name": "柴桑区", + "shortName": null, + "level": 3, + "code": "360404", + "pinyin": "ChaiSangQu", + "pinyinFirst": "CSQ", + "capital": "沙河街镇", + "population": 33, + "area": 917, + "areaCode": "0792", + "zipCode": "332100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666650696, + "parentId": 653116666646597, + "name": "瑞昌市", + "shortName": null, + "level": 3, + "code": "360481", + "pinyin": "RuiChangShi", + "pinyinFirst": "RCS", + "capital": "湓城街道", + "population": 46, + "area": 1419, + "areaCode": "0792", + "zipCode": "332200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666650697, + "parentId": 653116666646597, + "name": "共青城市", + "shortName": null, + "level": 3, + "code": "360482", + "pinyin": "GongQingChengShi", + "pinyinFirst": "GQCS", + "capital": "茶山街道", + "population": 12, + "area": 287, + "areaCode": "0792", + "zipCode": "332020", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666650698, + "parentId": 653116666646597, + "name": "庐山市", + "shortName": null, + "level": 3, + "code": "360483", + "pinyin": "LuShanShi", + "pinyinFirst": "LSS", + "capital": "南康镇", + "population": 28, + "area": 765, + "areaCode": "0792", + "zipCode": "332800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666650699, + "parentId": 653116666646597, + "name": "武宁县", + "shortName": null, + "level": 3, + "code": "360423", + "pinyin": "WuNingXian", + "pinyinFirst": "WNX", + "capital": "豫宁街道", + "population": 41, + "area": 3504, + "areaCode": "0792", + "zipCode": "332300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666650700, + "parentId": 653116666646597, + "name": "修水县", + "shortName": null, + "level": 3, + "code": "360424", + "pinyin": "XiuShuiXian", + "pinyinFirst": "XSX", + "capital": "义宁镇", + "population": 89, + "area": 4502, + "areaCode": "0792", + "zipCode": "332400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666650701, + "parentId": 653116666646597, + "name": "永修县", + "shortName": null, + "level": 3, + "code": "360425", + "pinyin": "YongXiuXian", + "pinyinFirst": "YXX", + "capital": "涂埠镇", + "population": 40, + "area": 1943, + "areaCode": "0792", + "zipCode": "330300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666650702, + "parentId": 653116666646597, + "name": "德安县", + "shortName": null, + "level": 3, + "code": "360426", + "pinyin": "DeAnXian", + "pinyinFirst": "DAX", + "capital": "蒲亭镇", + "population": 18, + "area": 858, + "areaCode": "0792", + "zipCode": "330400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666650703, + "parentId": 653116666646597, + "name": "都昌县", + "shortName": null, + "level": 3, + "code": "360428", + "pinyin": "DuChangXian", + "pinyinFirst": "DCX", + "capital": "都昌镇", + "population": 81, + "area": 2227, + "areaCode": "0792", + "zipCode": "332600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666650704, + "parentId": 653116666646597, + "name": "湖口县", + "shortName": null, + "level": 3, + "code": "360429", + "pinyin": "HuKouXian", + "pinyinFirst": "HKX", + "capital": "双钟镇", + "population": 29, + "area": 674, + "areaCode": "0792", + "zipCode": "332500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666650705, + "parentId": 653116666646597, + "name": "彭泽县", + "shortName": null, + "level": 3, + "code": "360430", + "pinyin": "PengZeXian", + "pinyinFirst": "PZX", + "capital": "龙城镇", + "population": 38, + "area": 1532, + "areaCode": "0792", + "zipCode": "332700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666802245, + "parentId": 653116665073733, + "name": "新余市", + "shortName": null, + "level": 2, + "code": "360500", + "pinyin": "XinYuShi", + "pinyinFirst": "XYS", + "capital": "渝水区", + "population": 125, + "area": 3160, + "areaCode": "0790", + "zipCode": "338000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116666802246, + "parentId": 653116666802245, + "name": "渝水区", + "shortName": null, + "level": 3, + "code": "360502", + "pinyin": "YuShuiQu", + "pinyinFirst": "YSQ", + "capital": "城南街道", + "population": 90, + "area": 1781, + "areaCode": "0790", + "zipCode": "338025", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666802247, + "parentId": 653116666802245, + "name": "分宜县", + "shortName": null, + "level": 3, + "code": "360521", + "pinyin": "FenYiXian", + "pinyinFirst": "FYX", + "capital": "钤东街道", + "population": 34, + "area": 1379, + "areaCode": "0790", + "zipCode": "336600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666916933, + "parentId": 653116665073733, + "name": "鹰潭市", + "shortName": null, + "level": 2, + "code": "360600", + "pinyin": "YingTanShi", + "pinyinFirst": "YTS", + "capital": "月湖区", + "population": 129, + "area": 3560, + "areaCode": "0701", + "zipCode": "335000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116666921029, + "parentId": 653116666916933, + "name": "月湖区", + "shortName": null, + "level": 3, + "code": "360602", + "pinyin": "YueHuQu", + "pinyinFirst": "YHQ", + "capital": "江边街道", + "population": 24, + "area": 136, + "areaCode": "0701", + "zipCode": "335000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666921030, + "parentId": 653116666916933, + "name": "余江区", + "shortName": null, + "level": 3, + "code": "360603", + "pinyin": "YuJiangQu", + "pinyinFirst": "YJQ", + "capital": "邓埠镇", + "population": 40, + "area": 931, + "areaCode": "0701", + "zipCode": "335200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116666921031, + "parentId": 653116666916933, + "name": "贵溪市", + "shortName": null, + "level": 3, + "code": "360681", + "pinyin": "GuiXiShi", + "pinyinFirst": "GXS", + "capital": "花园街道", + "population": 65, + "area": 2493, + "areaCode": "0701", + "zipCode": "335400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052101, + "parentId": 653116665073733, + "name": "赣州市", + "shortName": null, + "level": 2, + "code": "360700", + "pinyin": "GanZhouShi", + "pinyinFirst": "GZS", + "capital": "章贡区", + "population": 983, + "area": 39363, + "areaCode": "0797", + "zipCode": "341000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116667052102, + "parentId": 653116667052101, + "name": "章贡区", + "shortName": null, + "level": 3, + "code": "360702", + "pinyin": "ZhangGongQu", + "pinyinFirst": "ZGQ", + "capital": "解放街道", + "population": 79, + "area": 592, + "areaCode": "0797", + "zipCode": "341000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052103, + "parentId": 653116667052101, + "name": "南康区", + "shortName": null, + "level": 3, + "code": "360703", + "pinyin": "NanKangQu", + "pinyinFirst": "NKQ", + "capital": "蓉江街道", + "population": 86, + "area": 1742, + "areaCode": "0797", + "zipCode": "341400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052104, + "parentId": 653116667052101, + "name": "赣县区", + "shortName": null, + "level": 3, + "code": "360704", + "pinyin": "GanXianQu", + "pinyinFirst": "GXQ", + "capital": "梅林镇", + "population": 66, + "area": 2990, + "areaCode": "0797", + "zipCode": "341100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052105, + "parentId": 653116667052101, + "name": "瑞金市", + "shortName": null, + "level": 3, + "code": "360781", + "pinyin": "RuiJinShi", + "pinyinFirst": "RJS", + "capital": "象湖镇", + "population": 71, + "area": 2441, + "areaCode": "0797", + "zipCode": "342500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052106, + "parentId": 653116667052101, + "name": "龙南市", + "shortName": null, + "level": 3, + "code": "360783", + "pinyin": "LongNanShi", + "pinyinFirst": "LNS", + "capital": "龙南镇", + "population": 34, + "area": 1646, + "areaCode": "0797", + "zipCode": "341700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052107, + "parentId": 653116667052101, + "name": "信丰县", + "shortName": null, + "level": 3, + "code": "360722", + "pinyin": "XinFengXian", + "pinyinFirst": "XFX", + "capital": "嘉定镇", + "population": 78, + "area": 2866, + "areaCode": "0797", + "zipCode": "341600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052108, + "parentId": 653116667052101, + "name": "大余县", + "shortName": null, + "level": 3, + "code": "360723", + "pinyin": "DaYuXian", + "pinyinFirst": "DYX", + "capital": "南安镇", + "population": 31, + "area": 1344, + "areaCode": "0797", + "zipCode": "341500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052109, + "parentId": 653116667052101, + "name": "上犹县", + "shortName": null, + "level": 3, + "code": "360724", + "pinyin": "ShangYouXian", + "pinyinFirst": "SYX", + "capital": "东山镇", + "population": 32, + "area": 1542, + "areaCode": "0797", + "zipCode": "341200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052110, + "parentId": 653116667052101, + "name": "崇义县", + "shortName": null, + "level": 3, + "code": "360725", + "pinyin": "ChongYiXian", + "pinyinFirst": "CYX", + "capital": "横水镇", + "population": 22, + "area": 2208, + "areaCode": "0797", + "zipCode": "341300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052111, + "parentId": 653116667052101, + "name": "安远县", + "shortName": null, + "level": 3, + "code": "360726", + "pinyin": "AnYuanXian", + "pinyinFirst": "AYX", + "capital": "欣山镇", + "population": 41, + "area": 2350, + "areaCode": "0797", + "zipCode": "342100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052112, + "parentId": 653116667052101, + "name": "定南县", + "shortName": null, + "level": 3, + "code": "360728", + "pinyin": "DingNanXian", + "pinyinFirst": "DNX", + "capital": "历市镇", + "population": 22, + "area": 1321, + "areaCode": "0797", + "zipCode": "341900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052113, + "parentId": 653116667052101, + "name": "全南县", + "shortName": null, + "level": 3, + "code": "360729", + "pinyin": "QuanNanXian", + "pinyinFirst": "QNX", + "capital": "城厢镇", + "population": 20, + "area": 1534, + "areaCode": "0797", + "zipCode": "341800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052114, + "parentId": 653116667052101, + "name": "宁都县", + "shortName": null, + "level": 3, + "code": "360730", + "pinyin": "NingDuXian", + "pinyinFirst": "NDX", + "capital": "梅江镇", + "population": 85, + "area": 4049, + "areaCode": "0797", + "zipCode": "342800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052115, + "parentId": 653116667052101, + "name": "于都县", + "shortName": null, + "level": 3, + "code": "360731", + "pinyin": "YuDuXian", + "pinyinFirst": "YDX", + "capital": "贡江镇", + "population": 112, + "area": 2892, + "areaCode": "0797", + "zipCode": "342300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052116, + "parentId": 653116667052101, + "name": "兴国县", + "shortName": null, + "level": 3, + "code": "360732", + "pinyin": "XingGuoXian", + "pinyinFirst": "XGX", + "capital": "潋江镇", + "population": 86, + "area": 3215, + "areaCode": "0797", + "zipCode": "342400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052117, + "parentId": 653116667052101, + "name": "会昌县", + "shortName": null, + "level": 3, + "code": "360733", + "pinyin": "HuiChangXian", + "pinyinFirst": "HCX", + "capital": "文武坝镇", + "population": 53, + "area": 2712, + "areaCode": "0797", + "zipCode": "342600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052118, + "parentId": 653116667052101, + "name": "寻乌县", + "shortName": null, + "level": 3, + "code": "360734", + "pinyin": "XunWuXian", + "pinyinFirst": "XWX", + "capital": "长宁镇", + "population": 33, + "area": 2352, + "areaCode": "0797", + "zipCode": "342200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667052119, + "parentId": 653116667052101, + "name": "石城县", + "shortName": null, + "level": 3, + "code": "360735", + "pinyin": "ShiChengXian", + "pinyinFirst": "SCX", + "capital": "琴江镇", + "population": 34, + "area": 1567, + "areaCode": "0797", + "zipCode": "342700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667240517, + "parentId": 653116665073733, + "name": "吉安市", + "shortName": null, + "level": 2, + "code": "360800", + "pinyin": "JiAnShi", + "pinyinFirst": "JAS", + "capital": "吉州区", + "population": 540, + "area": 25285, + "areaCode": "0796", + "zipCode": "343000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116667244613, + "parentId": 653116667240517, + "name": "吉州区", + "shortName": null, + "level": 3, + "code": "360802", + "pinyin": "JiZhouQu", + "pinyinFirst": "JZQ", + "capital": "文山街道", + "population": 37, + "area": 425, + "areaCode": "0796", + "zipCode": "343000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667244614, + "parentId": 653116667240517, + "name": "青原区", + "shortName": null, + "level": 3, + "code": "360803", + "pinyin": "QingYuanQu", + "pinyinFirst": "QYQ", + "capital": "河东街道", + "population": 23, + "area": 916, + "areaCode": "0796", + "zipCode": "343009", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667244615, + "parentId": 653116667240517, + "name": "井冈山市", + "shortName": null, + "level": 3, + "code": "360881", + "pinyin": "JingGangShanShi", + "pinyinFirst": "JGSS", + "capital": "红星街道", + "population": 17, + "area": 1450, + "areaCode": "0796", + "zipCode": "343600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667244616, + "parentId": 653116667240517, + "name": "吉安县", + "shortName": null, + "level": 3, + "code": "360821", + "pinyin": "JiAnXian", + "pinyinFirst": "JAX", + "capital": "敦厚镇", + "population": 53, + "area": 2122, + "areaCode": "0796", + "zipCode": "343100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667244617, + "parentId": 653116667240517, + "name": "吉水县", + "shortName": null, + "level": 3, + "code": "360822", + "pinyin": "JiShuiXian", + "pinyinFirst": "JSX", + "capital": "文峰镇", + "population": 57, + "area": 2507, + "areaCode": "0796", + "zipCode": "331600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667244618, + "parentId": 653116667240517, + "name": "峡江县", + "shortName": null, + "level": 3, + "code": "360823", + "pinyin": "XiaJiangXian", + "pinyinFirst": "XJX", + "capital": "水边镇", + "population": 19, + "area": 1298, + "areaCode": "0796", + "zipCode": "331400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667244619, + "parentId": 653116667240517, + "name": "新干县", + "shortName": null, + "level": 3, + "code": "360824", + "pinyin": "XinGanXian", + "pinyinFirst": "XGX", + "capital": "金川镇", + "population": 36, + "area": 1245, + "areaCode": "0796", + "zipCode": "331300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667244620, + "parentId": 653116667240517, + "name": "永丰县", + "shortName": null, + "level": 3, + "code": "360825", + "pinyin": "YongFengXian", + "pinyinFirst": "YFX", + "capital": "恩江镇", + "population": 50, + "area": 2710, + "areaCode": "0796", + "zipCode": "331500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667244621, + "parentId": 653116667240517, + "name": "泰和县", + "shortName": null, + "level": 3, + "code": "360826", + "pinyin": "TaiHeXian", + "pinyinFirst": "THX", + "capital": "澄江镇", + "population": 60, + "area": 2498, + "areaCode": "0796", + "zipCode": "343700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667244622, + "parentId": 653116667240517, + "name": "遂川县", + "shortName": null, + "level": 3, + "code": "360827", + "pinyin": "SuiChuanXian", + "pinyinFirst": "SCX", + "capital": "泉江镇", + "population": 62, + "area": 3101, + "areaCode": "0796", + "zipCode": "343900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667244623, + "parentId": 653116667240517, + "name": "万安县", + "shortName": null, + "level": 3, + "code": "360828", + "pinyin": "WanAnXian", + "pinyinFirst": "WAX", + "capital": "芙蓉镇", + "population": 32, + "area": 2038, + "areaCode": "0796", + "zipCode": "343800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667244624, + "parentId": 653116667240517, + "name": "安福县", + "shortName": null, + "level": 3, + "code": "360829", + "pinyin": "AnFuXian", + "pinyinFirst": "AFX", + "capital": "平都镇", + "population": 42, + "area": 2794, + "areaCode": "0796", + "zipCode": "343200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667244625, + "parentId": 653116667240517, + "name": "永新县", + "shortName": null, + "level": 3, + "code": "360830", + "pinyin": "YongXinXian", + "pinyinFirst": "YXX", + "capital": "禾川镇", + "population": 53, + "area": 2181, + "areaCode": "0796", + "zipCode": "343400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667408453, + "parentId": 653116665073733, + "name": "宜春市", + "shortName": null, + "level": 2, + "code": "360900", + "pinyin": "YiChunShi", + "pinyinFirst": "YCS", + "capital": "袁州区", + "population": 604, + "area": 19668, + "areaCode": "0795", + "zipCode": "336000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116667408454, + "parentId": 653116667408453, + "name": "袁州区", + "shortName": null, + "level": 3, + "code": "360902", + "pinyin": "YuanZhouQu", + "pinyinFirst": "YZQ", + "capital": "灵泉街道", + "population": 117, + "area": 2537, + "areaCode": "0795", + "zipCode": "336000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667408455, + "parentId": 653116667408453, + "name": "丰城市", + "shortName": null, + "level": 3, + "code": "360981", + "pinyin": "FengChengShi", + "pinyinFirst": "FCS", + "capital": "河洲街道", + "population": 149, + "area": 2837, + "areaCode": "0795", + "zipCode": "331100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667408456, + "parentId": 653116667408453, + "name": "樟树市", + "shortName": null, + "level": 3, + "code": "360982", + "pinyin": "ZhangShuShi", + "pinyinFirst": "ZSS", + "capital": "淦阳街道", + "population": 61, + "area": 1289, + "areaCode": "0795", + "zipCode": "331200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667408457, + "parentId": 653116667408453, + "name": "高安市", + "shortName": null, + "level": 3, + "code": "360983", + "pinyin": "GaoAnShi", + "pinyinFirst": "GAS", + "capital": "瑞州街道", + "population": 88, + "area": 2430, + "areaCode": "0795", + "zipCode": "330800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667408458, + "parentId": 653116667408453, + "name": "奉新县", + "shortName": null, + "level": 3, + "code": "360921", + "pinyin": "FengXinXian", + "pinyinFirst": "FXX", + "capital": "冯川镇", + "population": 34, + "area": 1648, + "areaCode": "0795", + "zipCode": "330700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667408459, + "parentId": 653116667408453, + "name": "万载县", + "shortName": null, + "level": 3, + "code": "360922", + "pinyin": "WanZaiXian", + "pinyinFirst": "WZX", + "capital": "康乐街道", + "population": 58, + "area": 1718, + "areaCode": "0795", + "zipCode": "336100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667408460, + "parentId": 653116667408453, + "name": "上高县", + "shortName": null, + "level": 3, + "code": "360923", + "pinyin": "ShangGaoXian", + "pinyinFirst": "SGX", + "capital": "敖阳街道", + "population": 38, + "area": 1347, + "areaCode": "0795", + "zipCode": "336400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667408461, + "parentId": 653116667408453, + "name": "宜丰县", + "shortName": null, + "level": 3, + "code": "360924", + "pinyin": "YiFengXian", + "pinyinFirst": "YFX", + "capital": "新昌镇", + "population": 30, + "area": 1933, + "areaCode": "0795", + "zipCode": "336300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667408462, + "parentId": 653116667408453, + "name": "靖安县", + "shortName": null, + "level": 3, + "code": "360925", + "pinyin": "JingAnXian", + "pinyinFirst": "JAX", + "capital": "双溪镇", + "population": 15, + "area": 1377, + "areaCode": "0795", + "zipCode": "330600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667408463, + "parentId": 653116667408453, + "name": "铜鼓县", + "shortName": null, + "level": 3, + "code": "360926", + "pinyin": "TongGuXian", + "pinyinFirst": "TGX", + "capital": "永宁镇", + "population": 14, + "area": 1552, + "areaCode": "0795", + "zipCode": "336200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667596869, + "parentId": 653116665073733, + "name": "抚州市", + "shortName": null, + "level": 2, + "code": "361000", + "pinyin": "FuZhouShi", + "pinyinFirst": "FZS", + "capital": "临川区", + "population": 433, + "area": 18798, + "areaCode": "0794", + "zipCode": "344000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116667596870, + "parentId": 653116667596869, + "name": "临川区", + "shortName": null, + "level": 3, + "code": "361002", + "pinyin": "LinChuanQu", + "pinyinFirst": "LCQ", + "capital": "青云街道", + "population": 123, + "area": 2125, + "areaCode": "0794", + "zipCode": "344000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667596871, + "parentId": 653116667596869, + "name": "东乡区", + "shortName": null, + "level": 3, + "code": "361003", + "pinyin": "DongXiangQu", + "pinyinFirst": "DXQ", + "capital": "孝岗镇", + "population": 48, + "area": 1268, + "areaCode": "0794", + "zipCode": "331800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667596872, + "parentId": 653116667596869, + "name": "南城县", + "shortName": null, + "level": 3, + "code": "361021", + "pinyin": "NanChengXian", + "pinyinFirst": "NCX", + "capital": "建昌镇", + "population": 34, + "area": 1713, + "areaCode": "0794", + "zipCode": "344700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667596873, + "parentId": 653116667596869, + "name": "黎川县", + "shortName": null, + "level": 3, + "code": "361022", + "pinyin": "LiChuanXian", + "pinyinFirst": "LCX", + "capital": "日峰镇", + "population": 25, + "area": 1709, + "areaCode": "0794", + "zipCode": "344600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667596874, + "parentId": 653116667596869, + "name": "南丰县", + "shortName": null, + "level": 3, + "code": "361023", + "pinyin": "NanFengXian", + "pinyinFirst": "NFX", + "capital": "琴城镇", + "population": 32, + "area": 1913, + "areaCode": "0794", + "zipCode": "344500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667596875, + "parentId": 653116667596869, + "name": "崇仁县", + "shortName": null, + "level": 3, + "code": "361024", + "pinyin": "ChongRenXian", + "pinyinFirst": "CRX", + "capital": "巴山镇", + "population": 39, + "area": 1520, + "areaCode": "0794", + "zipCode": "344200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667596876, + "parentId": 653116667596869, + "name": "乐安县", + "shortName": null, + "level": 3, + "code": "361025", + "pinyin": "LeAnXian", + "pinyinFirst": "LAX", + "capital": "鳌溪镇", + "population": 39, + "area": 2410, + "areaCode": "0794", + "zipCode": "344300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667596877, + "parentId": 653116667596869, + "name": "宜黄县", + "shortName": null, + "level": 3, + "code": "361026", + "pinyin": "YiHuangXian", + "pinyinFirst": "YHX", + "capital": "凤冈镇", + "population": 24, + "area": 1937, + "areaCode": "0794", + "zipCode": "344400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667596878, + "parentId": 653116667596869, + "name": "金溪县", + "shortName": null, + "level": 3, + "code": "361027", + "pinyin": "JinXiXian", + "pinyinFirst": "JXX", + "capital": "秀谷镇", + "population": 32, + "area": 1352, + "areaCode": "0794", + "zipCode": "344800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667596879, + "parentId": 653116667596869, + "name": "资溪县", + "shortName": null, + "level": 3, + "code": "361028", + "pinyin": "ZiXiXian", + "pinyinFirst": "ZXX", + "capital": "鹤城镇", + "population": 12, + "area": 1248, + "areaCode": "0794", + "zipCode": "335300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667596880, + "parentId": 653116667596869, + "name": "广昌县", + "shortName": null, + "level": 3, + "code": "361030", + "pinyin": "GuangChangXian", + "pinyinFirst": "GCX", + "capital": "旴江镇", + "population": 25, + "area": 1603, + "areaCode": "0794", + "zipCode": "344900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667805765, + "parentId": 653116665073733, + "name": "上饶市", + "shortName": null, + "level": 2, + "code": "361100", + "pinyin": "ShangRaoShi", + "pinyinFirst": "SRS", + "capital": "信州区", + "population": 793, + "area": 22737, + "areaCode": "0793", + "zipCode": "334000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116667805766, + "parentId": 653116667805765, + "name": "信州区", + "shortName": null, + "level": 3, + "code": "361102", + "pinyin": "XinZhouQu", + "pinyinFirst": "XZQ", + "capital": "茅家岭街道", + "population": 44, + "area": 316, + "areaCode": "0793", + "zipCode": "334000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667805767, + "parentId": 653116667805765, + "name": "广丰区", + "shortName": null, + "level": 3, + "code": "361103", + "pinyin": "GuangFengQu", + "pinyinFirst": "GFQ", + "capital": "永丰街道", + "population": 98, + "area": 1377, + "areaCode": "0793", + "zipCode": "334600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667805768, + "parentId": 653116667805765, + "name": "广信区", + "shortName": null, + "level": 3, + "code": "361104", + "pinyin": "GuangXinQu", + "pinyinFirst": "GXQ", + "capital": "旭日街道", + "population": 73, + "area": 2232, + "areaCode": "0793", + "zipCode": "334100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667805769, + "parentId": 653116667805765, + "name": "德兴市", + "shortName": null, + "level": 3, + "code": "361181", + "pinyin": "DeXingShi", + "pinyinFirst": "DXS", + "capital": "银城街道", + "population": 34, + "area": 2020, + "areaCode": "0793", + "zipCode": "334200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667805770, + "parentId": 653116667805765, + "name": "玉山县", + "shortName": null, + "level": 3, + "code": "361123", + "pinyin": "YuShanXian", + "pinyinFirst": "YSX", + "capital": "冰溪街道", + "population": 65, + "area": 1732, + "areaCode": "0793", + "zipCode": "334700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667805771, + "parentId": 653116667805765, + "name": "铅山县", + "shortName": null, + "level": 3, + "code": "361124", + "pinyin": "YanShanXian", + "pinyinFirst": "YSX", + "capital": "河口镇", + "population": 48, + "area": 2178, + "areaCode": "0793", + "zipCode": "334500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667805772, + "parentId": 653116667805765, + "name": "横峰县", + "shortName": null, + "level": 3, + "code": "361125", + "pinyin": "HengFengXian", + "pinyinFirst": "HFX", + "capital": "兴安街道", + "population": 23, + "area": 654, + "areaCode": "0793", + "zipCode": "334300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667805773, + "parentId": 653116667805765, + "name": "弋阳县", + "shortName": null, + "level": 3, + "code": "361126", + "pinyin": "YiYangXian", + "pinyinFirst": "YYX", + "capital": "弋江镇", + "population": 43, + "area": 1574, + "areaCode": "0793", + "zipCode": "334400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667805774, + "parentId": 653116667805765, + "name": "余干县", + "shortName": null, + "level": 3, + "code": "361127", + "pinyin": "YuGanXian", + "pinyinFirst": "YGX", + "capital": "玉亭镇", + "population": 110, + "area": 2350, + "areaCode": "0793", + "zipCode": "335100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667805775, + "parentId": 653116667805765, + "name": "鄱阳县", + "shortName": null, + "level": 3, + "code": "361128", + "pinyin": "PoYangXian", + "pinyinFirst": "PYX", + "capital": "鄱阳镇", + "population": 159, + "area": 4126, + "areaCode": "0793", + "zipCode": "333100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667805776, + "parentId": 653116667805765, + "name": "万年县", + "shortName": null, + "level": 3, + "code": "361129", + "pinyin": "WanNianXian", + "pinyinFirst": "WNX", + "capital": "陈营镇", + "population": 44, + "area": 1150, + "areaCode": "0793", + "zipCode": "335500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116667805777, + "parentId": 653116667805765, + "name": "婺源县", + "shortName": null, + "level": 3, + "code": "361130", + "pinyin": "WuYuanXian", + "pinyinFirst": "WYX", + "capital": "蚺城街道", + "population": 38, + "area": 2968, + "areaCode": "0793", + "zipCode": "333200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:33", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:07" + }, + { + "id": 653116668022853, + "parentId": 0, + "name": "山东省", + "shortName": "鲁", + "level": 1, + "code": "370000", + "pinyin": "ShanDongSheng", + "pinyinFirst": "SDS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116671258693, + "parentId": 653116668022853, + "name": "济南市", + "shortName": null, + "level": 2, + "code": "370100", + "pinyin": "JiNanShi", + "pinyinFirst": "JNS", + "capital": "市中区", + "population": 795, + "area": 10244, + "areaCode": "0531", + "zipCode": "250000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116671258694, + "parentId": 653116671258693, + "name": "市中区", + "shortName": null, + "level": 3, + "code": "370103", + "pinyin": "ShiZhongQu", + "pinyinFirst": "SZQ", + "capital": "杆石桥街道", + "population": 66, + "area": 281, + "areaCode": "0531", + "zipCode": "250001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671258695, + "parentId": 653116671258693, + "name": "历下区", + "shortName": null, + "level": 3, + "code": "370102", + "pinyin": "LiXiaQu", + "pinyinFirst": "LXQ", + "capital": "姚家街道", + "population": 71, + "area": 101, + "areaCode": "0531", + "zipCode": "250014", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671258696, + "parentId": 653116671258693, + "name": "槐荫区", + "shortName": null, + "level": 3, + "code": "370104", + "pinyin": "HuaiYinQu", + "pinyinFirst": "HYQ", + "capital": "兴福街道", + "population": 45, + "area": 152, + "areaCode": "0531", + "zipCode": "250117", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671258697, + "parentId": 653116671258693, + "name": "天桥区", + "shortName": null, + "level": 3, + "code": "370105", + "pinyin": "TianQiaoQu", + "pinyinFirst": "TQQ", + "capital": "无影山街道", + "population": 53, + "area": 259, + "areaCode": "0531", + "zipCode": "250031", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671258698, + "parentId": 653116671258693, + "name": "历城区", + "shortName": null, + "level": 3, + "code": "370112", + "pinyin": "LiChengQu", + "pinyinFirst": "LCQ", + "capital": "山大路街道", + "population": 107, + "area": 1301, + "areaCode": "0531", + "zipCode": "250100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671258699, + "parentId": 653116671258693, + "name": "长清区", + "shortName": null, + "level": 3, + "code": "370113", + "pinyin": "ChangQingQu", + "pinyinFirst": "CQQ", + "capital": "文昌街道", + "population": 57, + "area": 1209, + "areaCode": "0531", + "zipCode": "250300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671258700, + "parentId": 653116671258693, + "name": "章丘区", + "shortName": null, + "level": 3, + "code": "370114", + "pinyin": "ZhangQiuQu", + "pinyinFirst": "ZQQ", + "capital": "双山街道", + "population": 105, + "area": 1719, + "areaCode": "0531", + "zipCode": "250200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671258701, + "parentId": 653116671258693, + "name": "济阳区", + "shortName": null, + "level": 3, + "code": "370115", + "pinyin": "JiYangQu", + "pinyinFirst": "JYQ", + "capital": "济北街道", + "population": 60, + "area": 1099, + "areaCode": "0531", + "zipCode": "251400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671258702, + "parentId": 653116671258693, + "name": "莱芜区", + "shortName": null, + "level": 3, + "code": "370116", + "pinyin": "LaiWuQu", + "pinyinFirst": "LWQ", + "capital": "凤城街道", + "population": 99, + "area": 1740, + "areaCode": "0634", + "zipCode": "271100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671258703, + "parentId": 653116671258693, + "name": "钢城区", + "shortName": null, + "level": 3, + "code": "370117", + "pinyin": "GangChengQu", + "pinyinFirst": "GCQ", + "capital": "艾山街道", + "population": 30, + "area": 506, + "areaCode": "0634", + "zipCode": "271104", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671258704, + "parentId": 653116671258693, + "name": "平阴县", + "shortName": null, + "level": 3, + "code": "370124", + "pinyin": "PingYinXian", + "pinyinFirst": "PYX", + "capital": "榆山街道", + "population": 37, + "area": 715, + "areaCode": "0531", + "zipCode": "250400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671258705, + "parentId": 653116671258693, + "name": "商河县", + "shortName": null, + "level": 3, + "code": "370126", + "pinyin": "ShangHeXian", + "pinyinFirst": "SHX", + "capital": "许商街道", + "population": 64, + "area": 1162, + "areaCode": "0531", + "zipCode": "251600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671361093, + "parentId": 653116668022853, + "name": "青岛市", + "shortName": null, + "level": 2, + "code": "370200", + "pinyin": "QingDaoShi", + "pinyinFirst": "QDS", + "capital": "市南区", + "population": 829, + "area": 11290, + "areaCode": "0532", + "zipCode": "266000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116671365189, + "parentId": 653116671361093, + "name": "市南区", + "shortName": null, + "level": 3, + "code": "370202", + "pinyin": "ShiNanQu", + "pinyinFirst": "SNQ", + "capital": "香港中路街道", + "population": 55, + "area": 32, + "areaCode": "0532", + "zipCode": "266001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671365190, + "parentId": 653116671361093, + "name": "市北区", + "shortName": null, + "level": 3, + "code": "370203", + "pinyin": "ShiBeiQu", + "pinyinFirst": "SBQ", + "capital": "敦化路街道", + "population": 91, + "area": 65, + "areaCode": "0532", + "zipCode": "266033", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671365191, + "parentId": 653116671361093, + "name": "黄岛区", + "shortName": null, + "level": 3, + "code": "370211", + "pinyin": "HuangDaoQu", + "pinyinFirst": "HDQ", + "capital": "隐珠街道", + "population": 133, + "area": 2128, + "areaCode": "0532", + "zipCode": "266400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671365192, + "parentId": 653116671361093, + "name": "崂山区", + "shortName": null, + "level": 3, + "code": "370212", + "pinyin": "LaoShanQu", + "pinyinFirst": "LSQ", + "capital": "金家岭街道", + "population": 32, + "area": 396, + "areaCode": "0532", + "zipCode": "266100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671365193, + "parentId": 653116671361093, + "name": "李沧区", + "shortName": null, + "level": 3, + "code": "370213", + "pinyin": "LiCangQu", + "pinyinFirst": "LCQ", + "capital": "浮山路街道", + "population": 42, + "area": 99, + "areaCode": "0532", + "zipCode": "266100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671365194, + "parentId": 653116671361093, + "name": "城阳区", + "shortName": null, + "level": 3, + "code": "370214", + "pinyin": "ChengYangQu", + "pinyinFirst": "CYQ", + "capital": "城阳街道", + "population": 58, + "area": 583, + "areaCode": "0532", + "zipCode": "266109", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671365195, + "parentId": 653116671361093, + "name": "即墨区", + "shortName": null, + "level": 3, + "code": "370215", + "pinyin": "JiMoQu", + "pinyinFirst": "JMQ", + "capital": "通济街道", + "population": 118, + "area": 1920, + "areaCode": "0532", + "zipCode": "266200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671365196, + "parentId": 653116671361093, + "name": "胶州市", + "shortName": null, + "level": 3, + "code": "370281", + "pinyin": "JiaoZhouShi", + "pinyinFirst": "JZS", + "capital": "三里河街道", + "population": 87, + "area": 1324, + "areaCode": "0532", + "zipCode": "266300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671365197, + "parentId": 653116671361093, + "name": "平度市", + "shortName": null, + "level": 3, + "code": "370283", + "pinyin": "PingDuShi", + "pinyinFirst": "PDS", + "capital": "东阁街道", + "population": 139, + "area": 3176, + "areaCode": "0532", + "zipCode": "266700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671365198, + "parentId": 653116671361093, + "name": "莱西市", + "shortName": null, + "level": 3, + "code": "370285", + "pinyin": "LaiXiShi", + "pinyinFirst": "LXS", + "capital": "水集街道", + "population": 74, + "area": 1568, + "areaCode": "0532", + "zipCode": "266600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671479877, + "parentId": 653116668022853, + "name": "淄博市", + "shortName": null, + "level": 2, + "code": "370300", + "pinyin": "ZiBoShi", + "pinyinFirst": "ZBS", + "capital": "张店区", + "population": 434, + "area": 5964, + "areaCode": "0533", + "zipCode": "255000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116671479878, + "parentId": 653116671479877, + "name": "张店区", + "shortName": null, + "level": 3, + "code": "370303", + "pinyin": "ZhangDianQu", + "pinyinFirst": "ZDQ", + "capital": "马尚街道", + "population": 87, + "area": 360, + "areaCode": "0533", + "zipCode": "255022", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671479879, + "parentId": 653116671479877, + "name": "淄川区", + "shortName": null, + "level": 3, + "code": "370302", + "pinyin": "ZiChuanQu", + "pinyinFirst": "ZCQ", + "capital": "般阳路街道", + "population": 66, + "area": 960, + "areaCode": "0533", + "zipCode": "255100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671479880, + "parentId": 653116671479877, + "name": "博山区", + "shortName": null, + "level": 3, + "code": "370304", + "pinyin": "BoShanQu", + "pinyinFirst": "BSQ", + "capital": "城东街道", + "population": 44, + "area": 698, + "areaCode": "0533", + "zipCode": "255200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671479881, + "parentId": 653116671479877, + "name": "临淄区", + "shortName": null, + "level": 3, + "code": "370305", + "pinyin": "LinZiQu", + "pinyinFirst": "LZQ", + "capital": "稷下街道", + "population": 61, + "area": 664, + "areaCode": "0533", + "zipCode": "255400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671479882, + "parentId": 653116671479877, + "name": "周村区", + "shortName": null, + "level": 3, + "code": "370306", + "pinyin": "ZhouCunQu", + "pinyinFirst": "ZCQ", + "capital": "青年路街道", + "population": 32, + "area": 306, + "areaCode": "0533", + "zipCode": "255300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671516741, + "parentId": 653116671479877, + "name": "桓台县", + "shortName": null, + "level": 3, + "code": "370321", + "pinyin": "HuanTaiXian", + "pinyinFirst": "HTX", + "capital": "索镇街道", + "population": 50, + "area": 509, + "areaCode": "0533", + "zipCode": "256400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671516742, + "parentId": 653116671479877, + "name": "高青县", + "shortName": null, + "level": 3, + "code": "370322", + "pinyin": "GaoQingXian", + "pinyinFirst": "GQX", + "capital": "田镇街道", + "population": 37, + "area": 831, + "areaCode": "0533", + "zipCode": "256300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671516743, + "parentId": 653116671479877, + "name": "沂源县", + "shortName": null, + "level": 3, + "code": "370323", + "pinyin": "YiYuanXian", + "pinyinFirst": "YYX", + "capital": "历山街道", + "population": 57, + "area": 1636, + "areaCode": "0533", + "zipCode": "256100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671684677, + "parentId": 653116668022853, + "name": "枣庄市", + "shortName": null, + "level": 2, + "code": "370400", + "pinyin": "ZaoZhuangShi", + "pinyinFirst": "ZZS", + "capital": "薛城区", + "population": 424, + "area": 4564, + "areaCode": "0632", + "zipCode": "270000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116671692869, + "parentId": 653116671684677, + "name": "薛城区", + "shortName": null, + "level": 3, + "code": "370403", + "pinyin": "XueChengQu", + "pinyinFirst": "XCQ", + "capital": "临城街道", + "population": 59, + "area": 508, + "areaCode": "0632", + "zipCode": "277000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671692870, + "parentId": 653116671684677, + "name": "市中区", + "shortName": null, + "level": 3, + "code": "370402", + "pinyin": "ShiZhongQu", + "pinyinFirst": "SZQ", + "capital": "龙山路街道", + "population": 59, + "area": 374, + "areaCode": "0632", + "zipCode": "277101", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671692871, + "parentId": 653116671684677, + "name": "峄城区", + "shortName": null, + "level": 3, + "code": "370404", + "pinyin": "YiChengQu", + "pinyinFirst": "YCQ", + "capital": "坛山街道", + "population": 43, + "area": 635, + "areaCode": "0632", + "zipCode": "277300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671692872, + "parentId": 653116671684677, + "name": "台儿庄区", + "shortName": null, + "level": 3, + "code": "370405", + "pinyin": "TaiErZhuangQu", + "pinyinFirst": "TEZQ", + "capital": "运河街道", + "population": 34, + "area": 533, + "areaCode": "0632", + "zipCode": "277400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671692873, + "parentId": 653116671684677, + "name": "山亭区", + "shortName": null, + "level": 3, + "code": "370406", + "pinyin": "ShanTingQu", + "pinyinFirst": "STQ", + "capital": "山城街道", + "population": 54, + "area": 1019, + "areaCode": "0632", + "zipCode": "277200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671692874, + "parentId": 653116671684677, + "name": "滕州市", + "shortName": null, + "level": 3, + "code": "370481", + "pinyin": "TengZhouShi", + "pinyinFirst": "TZS", + "capital": "北辛街道", + "population": 176, + "area": 1495, + "areaCode": "0632", + "zipCode": "277500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671868997, + "parentId": 653116668022853, + "name": "东营市", + "shortName": null, + "level": 2, + "code": "370500", + "pinyin": "DongYingShi", + "pinyinFirst": "DYS", + "capital": "东营区", + "population": 198, + "area": 8617, + "areaCode": "0546", + "zipCode": "257000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116671873093, + "parentId": 653116671868997, + "name": "东营区", + "shortName": null, + "level": 3, + "code": "370502", + "pinyin": "DongYingQu", + "pinyinFirst": "DYQ", + "capital": "胜利街道", + "population": 68, + "area": 1187, + "areaCode": "0546", + "zipCode": "257100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671873094, + "parentId": 653116671868997, + "name": "河口区", + "shortName": null, + "level": 3, + "code": "370503", + "pinyin": "HeKouQu", + "pinyinFirst": "HKQ", + "capital": "河口街道", + "population": 22, + "area": 2267, + "areaCode": "0546", + "zipCode": "257200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671873095, + "parentId": 653116671868997, + "name": "垦利区", + "shortName": null, + "level": 3, + "code": "370505", + "pinyin": "KenLiQu", + "pinyinFirst": "KLQ", + "capital": "垦利街道", + "population": 24, + "area": 2331, + "areaCode": "0546", + "zipCode": "257500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671873096, + "parentId": 653116671868997, + "name": "利津县", + "shortName": null, + "level": 3, + "code": "370522", + "pinyin": "LiJinXian", + "pinyinFirst": "LJX", + "capital": "利津街道", + "population": 31, + "area": 1666, + "areaCode": "0546", + "zipCode": "257400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116671873097, + "parentId": 653116671868997, + "name": "广饶县", + "shortName": null, + "level": 3, + "code": "370523", + "pinyin": "GuangRaoXian", + "pinyinFirst": "GRX", + "capital": "广饶街道", + "population": 53, + "area": 1166, + "areaCode": "0546", + "zipCode": "257300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672041029, + "parentId": 653116668022853, + "name": "烟台市", + "shortName": null, + "level": 2, + "code": "370600", + "pinyin": "YanTaiShi", + "pinyinFirst": "YTS", + "capital": "莱山区", + "population": 653, + "area": 13865, + "areaCode": "0535", + "zipCode": "264000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116672041030, + "parentId": 653116672041029, + "name": "莱山区", + "shortName": null, + "level": 3, + "code": "370613", + "pinyin": "LaiShanQu", + "pinyinFirst": "LSQ", + "capital": "黄海路街道", + "population": 27, + "area": 334, + "areaCode": "0535", + "zipCode": "264003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672041031, + "parentId": 653116672041029, + "name": "芝罘区", + "shortName": null, + "level": 3, + "code": "370602", + "pinyin": "ZhiFuQu", + "pinyinFirst": "ZFQ", + "capital": "向阳街道", + "population": 71, + "area": 180, + "areaCode": "0535", + "zipCode": "264000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672041032, + "parentId": 653116672041029, + "name": "福山区", + "shortName": null, + "level": 3, + "code": "370611", + "pinyin": "FuShanQu", + "pinyinFirst": "FSQ", + "capital": "清洋街道", + "population": 51, + "area": 934, + "areaCode": "0535", + "zipCode": "265500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672041033, + "parentId": 653116672041029, + "name": "牟平区", + "shortName": null, + "level": 3, + "code": "370612", + "pinyin": "MuPingQu", + "pinyinFirst": "MPQ", + "capital": "宁海街道", + "population": 45, + "area": 1515, + "areaCode": "0535", + "zipCode": "264100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672045125, + "parentId": 653116672041029, + "name": "蓬莱区", + "shortName": null, + "level": 3, + "code": "370614", + "pinyin": "PengLaiQu", + "pinyinFirst": "PLQ", + "capital": "登州街道", + "population": 49, + "area": 1197, + "areaCode": "0535", + "zipCode": "265600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672045126, + "parentId": 653116672041029, + "name": "龙口市", + "shortName": null, + "level": 3, + "code": "370681", + "pinyin": "LongKouShi", + "pinyinFirst": "LKS", + "capital": "新嘉街道", + "population": 64, + "area": 906, + "areaCode": "0535", + "zipCode": "265700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672045127, + "parentId": 653116672041029, + "name": "莱阳市", + "shortName": null, + "level": 3, + "code": "370682", + "pinyin": "LaiYangShi", + "pinyinFirst": "LYS", + "capital": "城厢街道", + "population": 85, + "area": 1732, + "areaCode": "0535", + "zipCode": "265200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672045128, + "parentId": 653116672041029, + "name": "莱州市", + "shortName": null, + "level": 3, + "code": "370683", + "pinyin": "LaiZhouShi", + "pinyinFirst": "LZS", + "capital": "文昌路街道", + "population": 84, + "area": 1931, + "areaCode": "0535", + "zipCode": "261400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672045129, + "parentId": 653116672041029, + "name": "招远市", + "shortName": null, + "level": 3, + "code": "370685", + "pinyin": "ZhaoYuanShi", + "pinyinFirst": "ZYS", + "capital": "罗峰街道", + "population": 56, + "area": 1433, + "areaCode": "0535", + "zipCode": "265400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672045130, + "parentId": 653116672041029, + "name": "栖霞市", + "shortName": null, + "level": 3, + "code": "370686", + "pinyin": "QiXiaShi", + "pinyinFirst": "QXS", + "capital": "庄园街道", + "population": 59, + "area": 1794, + "areaCode": "0535", + "zipCode": "265300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672045131, + "parentId": 653116672041029, + "name": "海阳市", + "shortName": null, + "level": 3, + "code": "370687", + "pinyin": "HaiYangShi", + "pinyinFirst": "HYS", + "capital": "东村街道", + "population": 64, + "area": 1909, + "areaCode": "0535", + "zipCode": "265100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672204869, + "parentId": 653116668022853, + "name": "潍坊市", + "shortName": null, + "level": 2, + "code": "370700", + "pinyin": "WeiFangShi", + "pinyinFirst": "WFS", + "capital": "奎文区", + "population": 917, + "area": 16142, + "areaCode": "0536", + "zipCode": "261000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116672204870, + "parentId": 653116672204869, + "name": "奎文区", + "shortName": null, + "level": 3, + "code": "370705", + "pinyin": "KuiWenQu", + "pinyinFirst": "KWQ", + "capital": "广文街道", + "population": 58, + "area": 163, + "areaCode": "0536", + "zipCode": "261000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672204871, + "parentId": 653116672204869, + "name": "潍城区", + "shortName": null, + "level": 3, + "code": "370702", + "pinyin": "WeiChengQu", + "pinyinFirst": "WCQ", + "capital": "于河街道", + "population": 37, + "area": 270, + "areaCode": "0536", + "zipCode": "261021", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672204872, + "parentId": 653116672204869, + "name": "寒亭区", + "shortName": null, + "level": 3, + "code": "370703", + "pinyin": "HanTingQu", + "pinyinFirst": "HTQ", + "capital": "寒亭街道", + "population": 45, + "area": 1306, + "areaCode": "0536", + "zipCode": "261100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672204873, + "parentId": 653116672204869, + "name": "坊子区", + "shortName": null, + "level": 3, + "code": "370704", + "pinyin": "FangZiQu", + "pinyinFirst": "FZQ", + "capital": "凤凰街道", + "population": 56, + "area": 895, + "areaCode": "0536", + "zipCode": "261200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672204874, + "parentId": 653116672204869, + "name": "青州市", + "shortName": null, + "level": 3, + "code": "370781", + "pinyin": "QingZhouShi", + "pinyinFirst": "QZS", + "capital": "王府街道", + "population": 96, + "area": 1569, + "areaCode": "0536", + "zipCode": "262500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672208965, + "parentId": 653116672204869, + "name": "诸城市", + "shortName": null, + "level": 3, + "code": "370782", + "pinyin": "ZhuChengShi", + "pinyinFirst": "ZCS", + "capital": "密州街道", + "population": 112, + "area": 2151, + "areaCode": "0536", + "zipCode": "262200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672208966, + "parentId": 653116672204869, + "name": "寿光市", + "shortName": null, + "level": 3, + "code": "370783", + "pinyin": "ShouGuangShi", + "pinyinFirst": "SGS", + "capital": "圣城街道", + "population": 111, + "area": 1990, + "areaCode": "0536", + "zipCode": "262700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672208967, + "parentId": 653116672204869, + "name": "安丘市", + "shortName": null, + "level": 3, + "code": "370784", + "pinyin": "AnQiuShi", + "pinyinFirst": "AQS", + "capital": "新安街道", + "population": 98, + "area": 1712, + "areaCode": "0536", + "zipCode": "262100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672208968, + "parentId": 653116672204869, + "name": "高密市", + "shortName": null, + "level": 3, + "code": "370785", + "pinyin": "GaoMiShi", + "pinyinFirst": "GMS", + "capital": "醴泉街道", + "population": 90, + "area": 1523, + "areaCode": "0536", + "zipCode": "261500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672208969, + "parentId": 653116672204869, + "name": "昌邑市", + "shortName": null, + "level": 3, + "code": "370786", + "pinyin": "ChangYiShi", + "pinyinFirst": "CYS", + "capital": "奎聚街道", + "population": 59, + "area": 1631, + "areaCode": "0536", + "zipCode": "261300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672208970, + "parentId": 653116672204869, + "name": "临朐县", + "shortName": null, + "level": 3, + "code": "370724", + "pinyin": "LinQuXian", + "pinyinFirst": "LQX", + "capital": "城关街道", + "population": 93, + "area": 1831, + "areaCode": "0536", + "zipCode": "262600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672208971, + "parentId": 653116672204869, + "name": "昌乐县", + "shortName": null, + "level": 3, + "code": "370725", + "pinyin": "ChangLeXian", + "pinyinFirst": "CLX", + "capital": "宝都街道", + "population": 64, + "area": 1101, + "areaCode": "0536", + "zipCode": "262400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672376901, + "parentId": 653116668022853, + "name": "济宁市", + "shortName": null, + "level": 2, + "code": "370800", + "pinyin": "JiNingShi", + "pinyinFirst": "JNS", + "capital": "任城区", + "population": 893, + "area": 11187, + "areaCode": "0537", + "zipCode": "272000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116672380997, + "parentId": 653116672376901, + "name": "任城区", + "shortName": null, + "level": 3, + "code": "370811", + "pinyin": "RenChengQu", + "pinyinFirst": "RCQ", + "capital": "阜桥街道", + "population": 125, + "area": 884, + "areaCode": "0537", + "zipCode": "272000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672380998, + "parentId": 653116672376901, + "name": "兖州区", + "shortName": null, + "level": 3, + "code": "370812", + "pinyin": "YanZhouQu", + "pinyinFirst": "YZQ", + "capital": "龙桥街道", + "population": 65, + "area": 650, + "areaCode": "0537", + "zipCode": "272100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672380999, + "parentId": 653116672376901, + "name": "曲阜市", + "shortName": null, + "level": 3, + "code": "370881", + "pinyin": "QuFuShi", + "pinyinFirst": "QFS", + "capital": "鲁城街道", + "population": 66, + "area": 815, + "areaCode": "0537", + "zipCode": "273100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672381000, + "parentId": 653116672376901, + "name": "邹城市", + "shortName": null, + "level": 3, + "code": "370883", + "pinyin": "ZouChengShi", + "pinyinFirst": "ZCS", + "capital": "钢山街道", + "population": 122, + "area": 1616, + "areaCode": "0537", + "zipCode": "273500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672381001, + "parentId": 653116672376901, + "name": "微山县", + "shortName": null, + "level": 3, + "code": "370826", + "pinyin": "WeiShanXian", + "pinyinFirst": "WSX", + "capital": "夏镇街道", + "population": 73, + "area": 1738, + "areaCode": "0537", + "zipCode": "277600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672381002, + "parentId": 653116672376901, + "name": "鱼台县", + "shortName": null, + "level": 3, + "code": "370827", + "pinyin": "YuTaiXian", + "pinyinFirst": "YTX", + "capital": "谷亭街道", + "population": 48, + "area": 653, + "areaCode": "0537", + "zipCode": "272300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672381003, + "parentId": 653116672376901, + "name": "金乡县", + "shortName": null, + "level": 3, + "code": "370828", + "pinyin": "JinXiangXian", + "pinyinFirst": "JXX", + "capital": "金乡街道", + "population": 68, + "area": 888, + "areaCode": "0537", + "zipCode": "272200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672381004, + "parentId": 653116672376901, + "name": "嘉祥县", + "shortName": null, + "level": 3, + "code": "370829", + "pinyin": "JiaXiangXian", + "pinyinFirst": "JXX", + "capital": "嘉祥街道", + "population": 93, + "area": 975, + "areaCode": "0537", + "zipCode": "272400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672381005, + "parentId": 653116672376901, + "name": "汶上县", + "shortName": null, + "level": 3, + "code": "370830", + "pinyin": "WenShangXian", + "pinyinFirst": "WSX", + "capital": "中都街道", + "population": 82, + "area": 889, + "areaCode": "0537", + "zipCode": "272500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672381006, + "parentId": 653116672376901, + "name": "泗水县", + "shortName": null, + "level": 3, + "code": "370831", + "pinyin": "SiShuiXian", + "pinyinFirst": "SSX", + "capital": "泗河街道", + "population": 65, + "area": 1118, + "areaCode": "0537", + "zipCode": "273200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672381007, + "parentId": 653116672376901, + "name": "梁山县", + "shortName": null, + "level": 3, + "code": "370832", + "pinyin": "LiangShanXian", + "pinyinFirst": "LSX", + "capital": "水泊街道", + "population": 85, + "area": 961, + "areaCode": "0537", + "zipCode": "272600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672630853, + "parentId": 653116668022853, + "name": "泰安市", + "shortName": null, + "level": 2, + "code": "370900", + "pinyin": "TaiAnShi", + "pinyinFirst": "TAS", + "capital": "泰山区", + "population": 573, + "area": 7762, + "areaCode": "0538", + "zipCode": "271000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116672634949, + "parentId": 653116672630853, + "name": "泰山区", + "shortName": null, + "level": 3, + "code": "370902", + "pinyin": "TaiShanQu", + "pinyinFirst": "TSQ", + "capital": "岱庙街道", + "population": 64, + "area": 337, + "areaCode": "0538", + "zipCode": "271000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672634950, + "parentId": 653116672630853, + "name": "岱岳区", + "shortName": null, + "level": 3, + "code": "370911", + "pinyin": "DaiYueQu", + "pinyinFirst": "DYQ", + "capital": "粥店街道", + "population": 101, + "area": 1750, + "areaCode": "0538", + "zipCode": "271000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672634951, + "parentId": 653116672630853, + "name": "新泰市", + "shortName": null, + "level": 3, + "code": "370982", + "pinyin": "XinTaiShi", + "pinyinFirst": "XTS", + "capital": "青云街道", + "population": 145, + "area": 1934, + "areaCode": "0538", + "zipCode": "271200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672634952, + "parentId": 653116672630853, + "name": "肥城市", + "shortName": null, + "level": 3, + "code": "370983", + "pinyin": "FeiChengShi", + "pinyinFirst": "FCS", + "capital": "新城街道", + "population": 98, + "area": 1277, + "areaCode": "0538", + "zipCode": "271600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672634953, + "parentId": 653116672630853, + "name": "宁阳县", + "shortName": null, + "level": 3, + "code": "370921", + "pinyin": "NingYangXian", + "pinyinFirst": "NYX", + "capital": "文庙街道", + "population": 84, + "area": 1125, + "areaCode": "0538", + "zipCode": "271400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672634954, + "parentId": 653116672630853, + "name": "东平县", + "shortName": null, + "level": 3, + "code": "370923", + "pinyin": "DongPingXian", + "pinyinFirst": "DPX", + "capital": "东平街道", + "population": 81, + "area": 1339, + "areaCode": "0538", + "zipCode": "271500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672831557, + "parentId": 653116668022853, + "name": "威海市", + "shortName": null, + "level": 2, + "code": "371000", + "pinyin": "WeiHaiShi", + "pinyinFirst": "WHS", + "capital": "环翠区", + "population": 257, + "area": 5799, + "areaCode": "0631", + "zipCode": "264200", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116672835653, + "parentId": 653116672831557, + "name": "环翠区", + "shortName": null, + "level": 3, + "code": "371002", + "pinyin": "HuanCuiQu", + "pinyinFirst": "HCQ", + "capital": "环翠楼街道", + "population": 80, + "area": 991, + "areaCode": "0631", + "zipCode": "264200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672835654, + "parentId": 653116672831557, + "name": "文登区", + "shortName": null, + "level": 3, + "code": "371003", + "pinyin": "WenDengQu", + "pinyinFirst": "WDQ", + "capital": "天福街道", + "population": 57, + "area": 1615, + "areaCode": "0631", + "zipCode": "264400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672835655, + "parentId": 653116672831557, + "name": "荣成市", + "shortName": null, + "level": 3, + "code": "371082", + "pinyin": "RongChengShi", + "pinyinFirst": "RCS", + "capital": "崖头街道", + "population": 66, + "area": 1527, + "areaCode": "0631", + "zipCode": "264300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116672835656, + "parentId": 653116672831557, + "name": "乳山市", + "shortName": null, + "level": 3, + "code": "371083", + "pinyin": "RuShanShi", + "pinyinFirst": "RSS", + "capital": "城区街道", + "population": 54, + "area": 1665, + "areaCode": "0631", + "zipCode": "264500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673032261, + "parentId": 653116668022853, + "name": "日照市", + "shortName": null, + "level": 2, + "code": "371100", + "pinyin": "RiZhaoShi", + "pinyinFirst": "RZS", + "capital": "东港区", + "population": 308, + "area": 5359, + "areaCode": "0633", + "zipCode": "276800", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116673036357, + "parentId": 653116673032261, + "name": "东港区", + "shortName": null, + "level": 3, + "code": "371102", + "pinyin": "DongGangQu", + "pinyinFirst": "DGQ", + "capital": "日照街道", + "population": 97, + "area": 1266, + "areaCode": "0633", + "zipCode": "276800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673036358, + "parentId": 653116673032261, + "name": "岚山区", + "shortName": null, + "level": 3, + "code": "371103", + "pinyin": "LanShanQu", + "pinyinFirst": "LSQ", + "capital": "安东卫街道", + "population": 44, + "area": 778, + "areaCode": "0633", + "zipCode": "276800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673036359, + "parentId": 653116673032261, + "name": "五莲县", + "shortName": null, + "level": 3, + "code": "371121", + "pinyin": "WuLianXian", + "pinyinFirst": "WLX", + "capital": "洪凝街道", + "population": 51, + "area": 1497, + "areaCode": "0633", + "zipCode": "262300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673036360, + "parentId": 653116673032261, + "name": "莒县", + "shortName": null, + "level": 3, + "code": "371122", + "pinyin": "JuXian", + "pinyinFirst": "JX", + "capital": "城阳街道", + "population": 117, + "area": 1818, + "areaCode": "0633", + "zipCode": "276500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673261637, + "parentId": 653116668022853, + "name": "临沂市", + "shortName": null, + "level": 2, + "code": "371300", + "pinyin": "LinYiShi", + "pinyinFirst": "LYS", + "capital": "兰山区", + "population": 1189, + "area": 17191, + "areaCode": "0539", + "zipCode": "276000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116673261638, + "parentId": 653116673261637, + "name": "兰山区", + "shortName": null, + "level": 3, + "code": "371302", + "pinyin": "LanShanQu", + "pinyinFirst": "LSQ", + "capital": "金雀山街道", + "population": 133, + "area": 891, + "areaCode": "0539", + "zipCode": "276002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673261639, + "parentId": 653116673261637, + "name": "罗庄区", + "shortName": null, + "level": 3, + "code": "371311", + "pinyin": "LuoZhuangQu", + "pinyinFirst": "LZQ", + "capital": "盛庄街道", + "population": 68, + "area": 568, + "areaCode": "0539", + "zipCode": "276017", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673261640, + "parentId": 653116673261637, + "name": "河东区", + "shortName": null, + "level": 3, + "code": "371312", + "pinyin": "HeDongQu", + "pinyinFirst": "HDQ", + "capital": "九曲街道", + "population": 86, + "area": 834, + "areaCode": "0539", + "zipCode": "276034", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673261641, + "parentId": 653116673261637, + "name": "沂南县", + "shortName": null, + "level": 3, + "code": "371321", + "pinyin": "YiNanXian", + "pinyinFirst": "YNX", + "capital": "界湖街道", + "population": 98, + "area": 1719, + "areaCode": "0539", + "zipCode": "276300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673261642, + "parentId": 653116673261637, + "name": "郯城县", + "shortName": null, + "level": 3, + "code": "371322", + "pinyin": "TanChengXian", + "pinyinFirst": "TCX", + "capital": "郯城街道", + "population": 104, + "area": 1195, + "areaCode": "0539", + "zipCode": "276100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673261643, + "parentId": 653116673261637, + "name": "沂水县", + "shortName": null, + "level": 3, + "code": "371323", + "pinyin": "YiShuiXian", + "pinyinFirst": "YSX", + "capital": "沂城街道", + "population": 119, + "area": 2414, + "areaCode": "0539", + "zipCode": "276400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673261644, + "parentId": 653116673261637, + "name": "兰陵县", + "shortName": null, + "level": 3, + "code": "371324", + "pinyin": "LanLingXian", + "pinyinFirst": "LLX", + "capital": "卞庄街道", + "population": 145, + "area": 1724, + "areaCode": "0539", + "zipCode": "277700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673261645, + "parentId": 653116673261637, + "name": "费县", + "shortName": null, + "level": 3, + "code": "371325", + "pinyin": "FeiXian", + "pinyinFirst": "FX", + "capital": "费城街道", + "population": 92, + "area": 1660, + "areaCode": "0539", + "zipCode": "273400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673261646, + "parentId": 653116673261637, + "name": "平邑县", + "shortName": null, + "level": 3, + "code": "371326", + "pinyin": "PingYiXian", + "pinyinFirst": "PYX", + "capital": "平邑街道", + "population": 112, + "area": 1823, + "areaCode": "0539", + "zipCode": "273300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673261647, + "parentId": 653116673261637, + "name": "莒南县", + "shortName": null, + "level": 3, + "code": "371327", + "pinyin": "JuNanXian", + "pinyinFirst": "JNX", + "capital": "十字路街道", + "population": 107, + "area": 1751, + "areaCode": "0539", + "zipCode": "276600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673261648, + "parentId": 653116673261637, + "name": "蒙阴县", + "shortName": null, + "level": 3, + "code": "371328", + "pinyin": "MengYinXian", + "pinyinFirst": "MYX", + "capital": "蒙阴街道", + "population": 58, + "area": 1602, + "areaCode": "0539", + "zipCode": "276200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673261649, + "parentId": 653116673261637, + "name": "临沭县", + "shortName": null, + "level": 3, + "code": "371329", + "pinyin": "LinShuXian", + "pinyinFirst": "LSX", + "capital": "临沭街道", + "population": 68, + "area": 1010, + "areaCode": "0539", + "zipCode": "276700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673499205, + "parentId": 653116668022853, + "name": "德州市", + "shortName": null, + "level": 2, + "code": "371400", + "pinyin": "DeZhouShi", + "pinyinFirst": "DZS", + "capital": "德城区", + "population": 598, + "area": 10361, + "areaCode": "0534", + "zipCode": "253000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116673499206, + "parentId": 653116673499205, + "name": "德城区", + "shortName": null, + "level": 3, + "code": "371402", + "pinyin": "DeChengQu", + "pinyinFirst": "DCQ", + "capital": "新湖街道", + "population": 67, + "area": 544, + "areaCode": "0534", + "zipCode": "253012", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673499207, + "parentId": 653116673499205, + "name": "陵城区", + "shortName": null, + "level": 3, + "code": "371403", + "pinyin": "LingChengQu", + "pinyinFirst": "LCQ", + "capital": "临齐街道", + "population": 59, + "area": 1213, + "areaCode": "0534", + "zipCode": "253500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673499208, + "parentId": 653116673499205, + "name": "乐陵市", + "shortName": null, + "level": 3, + "code": "371481", + "pinyin": "LeLingShi", + "pinyinFirst": "LLS", + "capital": "市中街道", + "population": 72, + "area": 1173, + "areaCode": "0534", + "zipCode": "253600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673499209, + "parentId": 653116673499205, + "name": "禹城市", + "shortName": null, + "level": 3, + "code": "371482", + "pinyin": "YuChengShi", + "pinyinFirst": "YCS", + "capital": "市中街道", + "population": 54, + "area": 992, + "areaCode": "0534", + "zipCode": "251200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673503301, + "parentId": 653116673499205, + "name": "宁津县", + "shortName": null, + "level": 3, + "code": "371422", + "pinyin": "NingJinXian", + "pinyinFirst": "NJX", + "capital": "津城街道", + "population": 49, + "area": 833, + "areaCode": "0534", + "zipCode": "253400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673503302, + "parentId": 653116673499205, + "name": "庆云县", + "shortName": null, + "level": 3, + "code": "371423", + "pinyin": "QingYunXian", + "pinyinFirst": "QYX", + "capital": "渤海路街道", + "population": 35, + "area": 502, + "areaCode": "0534", + "zipCode": "253700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673503303, + "parentId": 653116673499205, + "name": "临邑县", + "shortName": null, + "level": 3, + "code": "371424", + "pinyin": "LinYiXian", + "pinyinFirst": "LYX", + "capital": "邢侗街道", + "population": 55, + "area": 1016, + "areaCode": "0534", + "zipCode": "251500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673503304, + "parentId": 653116673499205, + "name": "齐河县", + "shortName": null, + "level": 3, + "code": "371425", + "pinyin": "QiHeXian", + "pinyinFirst": "QHX", + "capital": "晏城街道", + "population": 64, + "area": 1411, + "areaCode": "0534", + "zipCode": "251100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673503305, + "parentId": 653116673499205, + "name": "平原县", + "shortName": null, + "level": 3, + "code": "371426", + "pinyin": "PingYuanXian", + "pinyinFirst": "PYX", + "capital": "龙门街道", + "population": 48, + "area": 1047, + "areaCode": "0534", + "zipCode": "253100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673503306, + "parentId": 653116673499205, + "name": "夏津县", + "shortName": null, + "level": 3, + "code": "371427", + "pinyin": "XiaJinXian", + "pinyinFirst": "XJX", + "capital": "银城街道", + "population": 55, + "area": 882, + "areaCode": "0534", + "zipCode": "253200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673503307, + "parentId": 653116673499205, + "name": "武城县", + "shortName": null, + "level": 3, + "code": "371428", + "pinyin": "WuChengXian", + "pinyinFirst": "WCX", + "capital": "广运街道", + "population": 40, + "area": 748, + "areaCode": "0534", + "zipCode": "253300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673769541, + "parentId": 653116668022853, + "name": "聊城市", + "shortName": null, + "level": 2, + "code": "371500", + "pinyin": "LiaoChengShi", + "pinyinFirst": "LCS", + "capital": "东昌府区", + "population": 646, + "area": 8720, + "areaCode": "0635", + "zipCode": "252000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116673773637, + "parentId": 653116673769541, + "name": "东昌府区", + "shortName": null, + "level": 3, + "code": "371502", + "pinyin": "DongChangFuQu", + "pinyinFirst": "DCFQ", + "capital": "柳园街道", + "population": 130, + "area": 1443, + "areaCode": "0635", + "zipCode": "252000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673773638, + "parentId": 653116673769541, + "name": "茌平区", + "shortName": null, + "level": 3, + "code": "371503", + "pinyin": "ChiPingQu", + "pinyinFirst": "CPQ", + "capital": "振兴街道", + "population": 57, + "area": 1003, + "areaCode": "0635", + "zipCode": "252100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673773639, + "parentId": 653116673769541, + "name": "临清市", + "shortName": null, + "level": 3, + "code": "371581", + "pinyin": "LinQingShi", + "pinyinFirst": "LQS", + "capital": "青年路街道", + "population": 84, + "area": 950, + "areaCode": "0635", + "zipCode": "252600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673773640, + "parentId": 653116673769541, + "name": "阳谷县", + "shortName": null, + "level": 3, + "code": "371521", + "pinyin": "YangGuXian", + "pinyinFirst": "YGX", + "capital": "侨润街道", + "population": 83, + "area": 1065, + "areaCode": "0635", + "zipCode": "252300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673773641, + "parentId": 653116673769541, + "name": "莘县", + "shortName": null, + "level": 3, + "code": "371522", + "pinyin": "ShenXian", + "pinyinFirst": "SX", + "capital": "燕塔街道", + "population": 112, + "area": 1420, + "areaCode": "0635", + "zipCode": "252400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673773642, + "parentId": 653116673769541, + "name": "东阿县", + "shortName": null, + "level": 3, + "code": "371524", + "pinyin": "DongEXian", + "pinyinFirst": "DEX", + "capital": "铜城街道", + "population": 41, + "area": 729, + "areaCode": "0635", + "zipCode": "252200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673773643, + "parentId": 653116673769541, + "name": "冠县", + "shortName": null, + "level": 3, + "code": "371525", + "pinyin": "GuanXian", + "pinyinFirst": "GX", + "capital": "清泉街道", + "population": 87, + "area": 1161, + "areaCode": "0635", + "zipCode": "252500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116673773644, + "parentId": 653116673769541, + "name": "高唐县", + "shortName": null, + "level": 3, + "code": "371526", + "pinyin": "GaoTangXian", + "pinyinFirst": "GTX", + "capital": "鱼邱湖街道", + "population": 51, + "area": 949, + "areaCode": "0635", + "zipCode": "252800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674027589, + "parentId": 653116668022853, + "name": "滨州市", + "shortName": null, + "level": 2, + "code": "371600", + "pinyin": "BinZhouShi", + "pinyinFirst": "BZS", + "capital": "滨城区", + "population": 398, + "area": 9664, + "areaCode": "0543", + "zipCode": "256600", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116674031685, + "parentId": 653116674027589, + "name": "滨城区", + "shortName": null, + "level": 3, + "code": "371602", + "pinyin": "BinChengQu", + "pinyinFirst": "BCQ", + "capital": "市中街道", + "population": 71, + "area": 1043, + "areaCode": "0543", + "zipCode": "256601", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674031686, + "parentId": 653116674027589, + "name": "沾化区", + "shortName": null, + "level": 3, + "code": "371603", + "pinyin": "ZhanHuaQu", + "pinyinFirst": "ZHQ", + "capital": "富国街道", + "population": 40, + "area": 2218, + "areaCode": "0543", + "zipCode": "256800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674031687, + "parentId": 653116674027589, + "name": "邹平市", + "shortName": null, + "level": 3, + "code": "371681", + "pinyin": "ZouPingShi", + "pinyinFirst": "ZPS", + "capital": "黄山街道", + "population": 75, + "area": 1252, + "areaCode": "0543", + "zipCode": "256200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674031688, + "parentId": 653116674027589, + "name": "惠民县", + "shortName": null, + "level": 3, + "code": "371621", + "pinyin": "HuiMinXian", + "pinyinFirst": "HMX", + "capital": "孙武街道", + "population": 65, + "area": 1363, + "areaCode": "0543", + "zipCode": "251700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674031689, + "parentId": 653116674027589, + "name": "阳信县", + "shortName": null, + "level": 3, + "code": "371622", + "pinyin": "YangXinXian", + "pinyinFirst": "YXX", + "capital": "信城街道", + "population": 47, + "area": 798, + "areaCode": "0543", + "zipCode": "251800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674031690, + "parentId": 653116674027589, + "name": "无棣县", + "shortName": null, + "level": 3, + "code": "371623", + "pinyin": "WuDiXian", + "pinyinFirst": "WDX", + "capital": "棣丰街道", + "population": 49, + "area": 2090, + "areaCode": "0543", + "zipCode": "251900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674031691, + "parentId": 653116674027589, + "name": "博兴县", + "shortName": null, + "level": 3, + "code": "371625", + "pinyin": "BoXingXian", + "pinyinFirst": "BXX", + "capital": "博昌街道", + "population": 51, + "area": 900, + "areaCode": "0543", + "zipCode": "256500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674310213, + "parentId": 653116668022853, + "name": "菏泽市", + "shortName": null, + "level": 2, + "code": "371700", + "pinyin": "HeZeShi", + "pinyinFirst": "HZS", + "capital": "牡丹区", + "population": 1026, + "area": 12159, + "areaCode": "0530", + "zipCode": "274000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116674310214, + "parentId": 653116674310213, + "name": "牡丹区", + "shortName": null, + "level": 3, + "code": "371702", + "pinyin": "MuDanQu", + "pinyinFirst": "MDQ", + "capital": "西城街道", + "population": 165, + "area": 1428, + "areaCode": "0530", + "zipCode": "274000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674310215, + "parentId": 653116674310213, + "name": "定陶区", + "shortName": null, + "level": 3, + "code": "371703", + "pinyin": "DingTaoQu", + "pinyinFirst": "DTQ", + "capital": "天中街道", + "population": 71, + "area": 846, + "areaCode": "0530", + "zipCode": "274100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674310216, + "parentId": 653116674310213, + "name": "曹县", + "shortName": null, + "level": 3, + "code": "371721", + "pinyin": "CaoXian", + "pinyinFirst": "CX", + "capital": "曹城街道", + "population": 170, + "area": 1968, + "areaCode": "0530", + "zipCode": "274400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674310217, + "parentId": 653116674310213, + "name": "单县", + "shortName": null, + "level": 3, + "code": "371722", + "pinyin": "ShanXian", + "pinyinFirst": "SX", + "capital": "北城街道", + "population": 127, + "area": 1647, + "areaCode": "0530", + "zipCode": "273700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674310218, + "parentId": 653116674310213, + "name": "成武县", + "shortName": null, + "level": 3, + "code": "371723", + "pinyin": "ChengWuXian", + "pinyinFirst": "CWX", + "capital": "文亭街道", + "population": 72, + "area": 989, + "areaCode": "0530", + "zipCode": "274200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674314309, + "parentId": 653116674310213, + "name": "巨野县", + "shortName": null, + "level": 3, + "code": "371724", + "pinyin": "JuYeXian", + "pinyinFirst": "JYX", + "capital": "凤凰街道", + "population": 110, + "area": 1302, + "areaCode": "0530", + "zipCode": "274900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674314310, + "parentId": 653116674310213, + "name": "郓城县", + "shortName": null, + "level": 3, + "code": "371725", + "pinyin": "YunChengXian", + "pinyinFirst": "YCX", + "capital": "唐塔街道", + "population": 128, + "area": 1634, + "areaCode": "0530", + "zipCode": "274700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674314311, + "parentId": 653116674310213, + "name": "鄄城县", + "shortName": null, + "level": 3, + "code": "371726", + "pinyin": "JuanChengXian", + "pinyinFirst": "JCX", + "capital": "古泉街道", + "population": 93, + "area": 1038, + "areaCode": "0530", + "zipCode": "274600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674314312, + "parentId": 653116674310213, + "name": "东明县", + "shortName": null, + "level": 3, + "code": "371728", + "pinyin": "DongMingXian", + "pinyinFirst": "DMX", + "capital": "城关街道", + "population": 88, + "area": 1307, + "areaCode": "0530", + "zipCode": "274500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:34", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:08" + }, + { + "id": 653116674637893, + "parentId": 0, + "name": "河南省", + "shortName": "豫", + "level": 1, + "code": "410000", + "pinyin": "HeNanSheng", + "pinyinFirst": "HNS", + "capital": null, + "population": null, + "area": null, + "areaCode": "", + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116676468805, + "parentId": 653116674637893, + "name": "郑州市", + "shortName": null, + "level": 2, + "code": "410100", + "pinyin": "ZhengZhouShi", + "pinyinFirst": "ZZS", + "capital": "中原区", + "population": 882, + "area": 7568, + "areaCode": "0371", + "zipCode": "450000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116676472901, + "parentId": 653116676468805, + "name": "中原区", + "shortName": null, + "level": 3, + "code": "410102", + "pinyin": "ZhongYuanQu", + "pinyinFirst": "ZYQ", + "capital": "建设路街道", + "population": 88, + "area": 198, + "areaCode": "0371", + "zipCode": "450007", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676472902, + "parentId": 653116676468805, + "name": "二七区", + "shortName": null, + "level": 3, + "code": "410103", + "pinyin": "ErQiQu", + "pinyinFirst": "EQQ", + "capital": "淮河路街道", + "population": 66, + "area": 155, + "areaCode": "0371", + "zipCode": "450052", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676472903, + "parentId": 653116676468805, + "name": "管城回族区", + "shortName": null, + "level": 3, + "code": "410104", + "pinyin": "GuanChengHuiZuQu", + "pinyinFirst": "GCHZQ", + "capital": "北下街街道", + "population": 57, + "area": 199, + "areaCode": "0371", + "zipCode": "450004", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676472904, + "parentId": 653116676468805, + "name": "金水区", + "shortName": null, + "level": 3, + "code": "410105", + "pinyin": "JinShuiQu", + "pinyinFirst": "JSQ", + "capital": "东风路街道", + "population": 137, + "area": 243, + "areaCode": "0371", + "zipCode": "450003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676472905, + "parentId": 653116676468805, + "name": "上街区", + "shortName": null, + "level": 3, + "code": "410106", + "pinyin": "ShangJieQu", + "pinyinFirst": "SJQ", + "capital": "济源路街道", + "population": 12, + "area": 61, + "areaCode": "0371", + "zipCode": "450041", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676472906, + "parentId": 653116676468805, + "name": "惠济区", + "shortName": null, + "level": 3, + "code": "410108", + "pinyin": "HuiJiQu", + "pinyinFirst": "HJQ", + "capital": "新城街道", + "population": 28, + "area": 222, + "areaCode": "0371", + "zipCode": "450053", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676472907, + "parentId": 653116676468805, + "name": "巩义市", + "shortName": null, + "level": 3, + "code": "410181", + "pinyin": "GongYiShi", + "pinyinFirst": "GYS", + "capital": "紫荆路街道", + "population": 85, + "area": 1043, + "areaCode": "0371", + "zipCode": "451200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676472908, + "parentId": 653116676468805, + "name": "荥阳市", + "shortName": null, + "level": 3, + "code": "410182", + "pinyin": "XingYangShi", + "pinyinFirst": "XYS", + "capital": "索河街道", + "population": 71, + "area": 943, + "areaCode": "0371", + "zipCode": "450100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676472909, + "parentId": 653116676468805, + "name": "新密市", + "shortName": null, + "level": 3, + "code": "410183", + "pinyin": "XinMiShi", + "pinyinFirst": "XMS", + "capital": "青屏街街道", + "population": 90, + "area": 996, + "areaCode": "0371", + "zipCode": "452300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676472910, + "parentId": 653116676468805, + "name": "新郑市", + "shortName": null, + "level": 3, + "code": "410184", + "pinyin": "XinZhengShi", + "pinyinFirst": "XZS", + "capital": "新华路街道", + "population": 84, + "area": 885, + "areaCode": "0371", + "zipCode": "451100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676472911, + "parentId": 653116676468805, + "name": "登封市", + "shortName": null, + "level": 3, + "code": "410185", + "pinyin": "DengFengShi", + "pinyinFirst": "DFS", + "capital": "嵩阳街道", + "population": 73, + "area": 1217, + "areaCode": "0371", + "zipCode": "452470", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676472912, + "parentId": 653116676468805, + "name": "中牟县", + "shortName": null, + "level": 3, + "code": "410122", + "pinyin": "ZhongMuXian", + "pinyinFirst": "ZMX", + "capital": "广惠街街道", + "population": 91, + "area": 1406, + "areaCode": "0371", + "zipCode": "451450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676575301, + "parentId": 653116674637893, + "name": "开封市", + "shortName": null, + "level": 2, + "code": "410200", + "pinyin": "KaiFengShi", + "pinyinFirst": "KFS", + "capital": "鼓楼区", + "population": 561, + "area": 6239, + "areaCode": "0371", + "zipCode": "475000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116676579397, + "parentId": 653116676575301, + "name": "鼓楼区", + "shortName": null, + "level": 3, + "code": "410204", + "pinyin": "GuLouQu", + "pinyinFirst": "GLQ", + "capital": "州桥街道", + "population": 15, + "area": 62, + "areaCode": "0371", + "zipCode": "475000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676579398, + "parentId": 653116676575301, + "name": "龙亭区", + "shortName": null, + "level": 3, + "code": "410202", + "pinyin": "LongTingQu", + "pinyinFirst": "LTQ", + "capital": "北道门街道", + "population": 38, + "area": 370, + "areaCode": "0371", + "zipCode": "475100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676579399, + "parentId": 653116676575301, + "name": "顺河回族区", + "shortName": null, + "level": 3, + "code": "410203", + "pinyin": "ShunHeHuiZuQu", + "pinyinFirst": "SHHZQ", + "capital": "清平街道", + "population": 24, + "area": 72, + "areaCode": "0371", + "zipCode": "475000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676583493, + "parentId": 653116676575301, + "name": "禹王台区", + "shortName": null, + "level": 3, + "code": "410205", + "pinyin": "YuWangTaiQu", + "pinyinFirst": "YWTQ", + "capital": "三里堡街道", + "population": 13, + "area": 60, + "areaCode": "0371", + "zipCode": "475003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676583494, + "parentId": 653116676575301, + "name": "祥符区", + "shortName": null, + "level": 3, + "code": "410212", + "pinyin": "XiangFuQu", + "pinyinFirst": "XFQ", + "capital": "城东街道", + "population": 82, + "area": 1251, + "areaCode": "0371", + "zipCode": "475100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676583495, + "parentId": 653116676575301, + "name": "杞县", + "shortName": null, + "level": 3, + "code": "410221", + "pinyin": "QiXian", + "pinyinFirst": "QX", + "capital": "金城街道", + "population": 123, + "area": 1257, + "areaCode": "0371", + "zipCode": "475200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676583496, + "parentId": 653116676575301, + "name": "通许县", + "shortName": null, + "level": 3, + "code": "410222", + "pinyin": "TongXuXian", + "pinyinFirst": "TXX", + "capital": "咸平街道", + "population": 69, + "area": 767, + "areaCode": "0371", + "zipCode": "475400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676583497, + "parentId": 653116676575301, + "name": "尉氏县", + "shortName": null, + "level": 3, + "code": "410223", + "pinyin": "WeiShiXian", + "pinyinFirst": "WSX", + "capital": "两湖街道", + "population": 103, + "area": 1297, + "areaCode": "0371", + "zipCode": "475500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676583498, + "parentId": 653116676575301, + "name": "兰考县", + "shortName": null, + "level": 3, + "code": "410225", + "pinyin": "LanKaoXian", + "pinyinFirst": "LKX", + "capital": "桐乡街道", + "population": 95, + "area": 1103, + "areaCode": "0371", + "zipCode": "475300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676730949, + "parentId": 653116674637893, + "name": "洛阳市", + "shortName": null, + "level": 2, + "code": "410300", + "pinyin": "LuoYangShi", + "pinyinFirst": "LYS", + "capital": "洛龙区", + "population": 745, + "area": 15236, + "areaCode": "0379", + "zipCode": "471000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116676735045, + "parentId": 653116676730949, + "name": "西工区", + "shortName": null, + "level": 3, + "code": "410303", + "pinyin": "XiGongQu", + "pinyinFirst": "XGQ", + "capital": "王城路街道", + "population": 32, + "area": 48, + "areaCode": "0379", + "zipCode": "471000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676735046, + "parentId": 653116676730949, + "name": "老城区", + "shortName": null, + "level": 3, + "code": "410302", + "pinyin": "LaoChengQu", + "pinyinFirst": "LCQ", + "capital": "西关街道", + "population": 17, + "area": 58, + "areaCode": "0379", + "zipCode": "471002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676735047, + "parentId": 653116676730949, + "name": "瀍河回族区", + "shortName": null, + "level": 3, + "code": "410304", + "pinyin": "ChanHeHuiZuQu", + "pinyinFirst": "CHHZQ", + "capital": "东关街道", + "population": 17, + "area": 25, + "areaCode": "0379", + "zipCode": "471002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676735048, + "parentId": 653116676730949, + "name": "涧西区", + "shortName": null, + "level": 3, + "code": "410305", + "pinyin": "JianXiQu", + "pinyinFirst": "JXQ", + "capital": "湖北路街道", + "population": 61, + "area": 82, + "areaCode": "0379", + "zipCode": "471003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676735049, + "parentId": 653116676730949, + "name": "偃师区", + "shortName": null, + "level": 3, + "code": "410307", + "pinyin": "YanShiQu", + "pinyinFirst": "YSQ", + "capital": "槐新街道", + "population": 64, + "area": 666, + "areaCode": "0379", + "zipCode": "471900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676735050, + "parentId": 653116676730949, + "name": "孟津区", + "shortName": null, + "level": 3, + "code": "410308", + "pinyin": "MengJinQu", + "pinyinFirst": "MJQ", + "capital": "城关镇", + "population": 55, + "area": 811, + "areaCode": "0379", + "zipCode": "471100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676735051, + "parentId": 653116676730949, + "name": "洛龙区", + "shortName": null, + "level": 3, + "code": "410311", + "pinyin": "LuoLongQu", + "pinyinFirst": "LLQ", + "capital": "开元路街道", + "population": 75, + "area": 590, + "areaCode": "0379", + "zipCode": "471000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676735052, + "parentId": 653116676730949, + "name": "新安县", + "shortName": null, + "level": 3, + "code": "410323", + "pinyin": "XinAnXian", + "pinyinFirst": "XAX", + "capital": "城关镇", + "population": 54, + "area": 1164, + "areaCode": "0379", + "zipCode": "471800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676735053, + "parentId": 653116676730949, + "name": "栾川县", + "shortName": null, + "level": 3, + "code": "410324", + "pinyin": "LuanChuanXian", + "pinyinFirst": "LCX", + "capital": "城关镇", + "population": 36, + "area": 2477, + "areaCode": "0379", + "zipCode": "471500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676735054, + "parentId": 653116676730949, + "name": "嵩县", + "shortName": null, + "level": 3, + "code": "410325", + "pinyin": "SongXian", + "pinyinFirst": "SX", + "capital": "城关镇", + "population": 64, + "area": 3007, + "areaCode": "0379", + "zipCode": "471400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676735055, + "parentId": 653116676730949, + "name": "汝阳县", + "shortName": null, + "level": 3, + "code": "410326", + "pinyin": "RuYangXian", + "pinyinFirst": "RYX", + "capital": "城关镇", + "population": 53, + "area": 1328, + "areaCode": "0379", + "zipCode": "471200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676735056, + "parentId": 653116676730949, + "name": "宜阳县", + "shortName": null, + "level": 3, + "code": "410327", + "pinyin": "YiYangXian", + "pinyinFirst": "YYX", + "capital": "城关镇", + "population": 72, + "area": 1617, + "areaCode": "0379", + "zipCode": "471600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676735057, + "parentId": 653116676730949, + "name": "洛宁县", + "shortName": null, + "level": 3, + "code": "410328", + "pinyin": "LuoNingXian", + "pinyinFirst": "LNX", + "capital": "城关镇", + "population": 51, + "area": 2304, + "areaCode": "0379", + "zipCode": "471700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676735058, + "parentId": 653116676730949, + "name": "伊川县", + "shortName": null, + "level": 3, + "code": "410329", + "pinyin": "YiChuanXian", + "pinyinFirst": "YCX", + "capital": "城关街道", + "population": 93, + "area": 1059, + "areaCode": "0379", + "zipCode": "471300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676890693, + "parentId": 653116674637893, + "name": "平顶山市", + "shortName": null, + "level": 2, + "code": "410400", + "pinyin": "PingDingShanShi", + "pinyinFirst": "PDSS", + "capital": "新华区", + "population": 570, + "area": 7910, + "areaCode": "0375", + "zipCode": "467000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116676894789, + "parentId": 653116676890693, + "name": "新华区", + "shortName": null, + "level": 3, + "code": "410402", + "pinyin": "XinHuaQu", + "pinyinFirst": "XHQ", + "capital": "曙光街街道", + "population": 42, + "area": 125, + "areaCode": "0375", + "zipCode": "467002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676894790, + "parentId": 653116676890693, + "name": "卫东区", + "shortName": null, + "level": 3, + "code": "410403", + "pinyin": "WeiDongQu", + "pinyinFirst": "WDQ", + "capital": "东安路街道", + "population": 36, + "area": 117, + "areaCode": "0375", + "zipCode": "467021", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676894791, + "parentId": 653116676890693, + "name": "石龙区", + "shortName": null, + "level": 3, + "code": "410404", + "pinyin": "ShiLongQu", + "pinyinFirst": "SLQ", + "capital": "人民路街道", + "population": 6, + "area": 57, + "areaCode": "0375", + "zipCode": "467483", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676894792, + "parentId": 653116676890693, + "name": "湛河区", + "shortName": null, + "level": 3, + "code": "410411", + "pinyin": "ZhanHeQu", + "pinyinFirst": "ZHQ", + "capital": "新华区曙光街街道", + "population": 27, + "area": 179, + "areaCode": "0375", + "zipCode": "467000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676894793, + "parentId": 653116676890693, + "name": "舞钢市", + "shortName": null, + "level": 3, + "code": "410481", + "pinyin": "WuGangShi", + "pinyinFirst": "WGS", + "capital": "垭口街道", + "population": 34, + "area": 629, + "areaCode": "0375", + "zipCode": "462500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676894794, + "parentId": 653116676890693, + "name": "汝州市", + "shortName": null, + "level": 3, + "code": "410482", + "pinyin": "RuZhouShi", + "pinyinFirst": "RZS", + "capital": "煤山街道", + "population": 118, + "area": 1572, + "areaCode": "0375", + "zipCode": "467500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676894795, + "parentId": 653116676890693, + "name": "宝丰县", + "shortName": null, + "level": 3, + "code": "410421", + "pinyin": "BaoFengXian", + "pinyinFirst": "BFX", + "capital": "城关镇", + "population": 56, + "area": 713, + "areaCode": "0375", + "zipCode": "467400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676894796, + "parentId": 653116676890693, + "name": "叶县", + "shortName": null, + "level": 3, + "code": "410422", + "pinyin": "YeXian", + "pinyinFirst": "YX", + "capital": "九龙街道", + "population": 88, + "area": 1389, + "areaCode": "0375", + "zipCode": "467200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676894797, + "parentId": 653116676890693, + "name": "鲁山县", + "shortName": null, + "level": 3, + "code": "410423", + "pinyin": "LuShanXian", + "pinyinFirst": "LSX", + "capital": "鲁阳街道", + "population": 98, + "area": 2403, + "areaCode": "0375", + "zipCode": "467300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116676894798, + "parentId": 653116676890693, + "name": "郏县", + "shortName": null, + "level": 3, + "code": "410425", + "pinyin": "JiaXian", + "pinyinFirst": "JX", + "capital": "龙山街道", + "population": 65, + "area": 726, + "areaCode": "0375", + "zipCode": "467100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677050437, + "parentId": 653116674637893, + "name": "安阳市", + "shortName": null, + "level": 2, + "code": "410500", + "pinyin": "AnYangShi", + "pinyinFirst": "AYS", + "capital": "北关区", + "population": 629, + "area": 7352, + "areaCode": "0372", + "zipCode": "455000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116677054533, + "parentId": 653116677050437, + "name": "北关区", + "shortName": null, + "level": 3, + "code": "410503", + "pinyin": "BeiGuanQu", + "pinyinFirst": "BGQ", + "capital": "红旗路街道", + "population": 25, + "area": 93, + "areaCode": "0372", + "zipCode": "455001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677054534, + "parentId": 653116677050437, + "name": "文峰区", + "shortName": null, + "level": 3, + "code": "410502", + "pinyin": "WenFengQu", + "pinyinFirst": "WFQ", + "capital": "东大街街道", + "population": 49, + "area": 111, + "areaCode": "0372", + "zipCode": "455000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677054535, + "parentId": 653116677050437, + "name": "殷都区", + "shortName": null, + "level": 3, + "code": "410505", + "pinyin": "YinDuQu", + "pinyinFirst": "YDQ", + "capital": "梅园庄街道", + "population": 23, + "area": 68, + "areaCode": "0372", + "zipCode": "455004", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677054536, + "parentId": 653116677050437, + "name": "龙安区", + "shortName": null, + "level": 3, + "code": "410506", + "pinyin": "LongAnQu", + "pinyinFirst": "LAQ", + "capital": "文明大道街道", + "population": 22, + "area": 366, + "areaCode": "0372", + "zipCode": "455001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677054537, + "parentId": 653116677050437, + "name": "林州市", + "shortName": null, + "level": 3, + "code": "410581", + "pinyin": "LinZhouShi", + "pinyinFirst": "LZS", + "capital": "开元街道", + "population": 114, + "area": 2062, + "areaCode": "0372", + "zipCode": "456500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677054538, + "parentId": 653116677050437, + "name": "安阳县", + "shortName": null, + "level": 3, + "code": "410522", + "pinyin": "AnYangXian", + "pinyinFirst": "AYX", + "capital": "白璧镇", + "population": 108, + "area": 1089, + "areaCode": "0372", + "zipCode": "455000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677054539, + "parentId": 653116677050437, + "name": "汤阴县", + "shortName": null, + "level": 3, + "code": "410523", + "pinyin": "TangYinXian", + "pinyinFirst": "TYX", + "capital": "城关镇", + "population": 52, + "area": 637, + "areaCode": "0372", + "zipCode": "456150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677054540, + "parentId": 653116677050437, + "name": "滑县", + "shortName": null, + "level": 3, + "code": "410526", + "pinyin": "HuaXian", + "pinyinFirst": "HX", + "capital": "道口镇街道", + "population": 150, + "area": 1781, + "areaCode": "0372", + "zipCode": "456400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677054541, + "parentId": 653116677050437, + "name": "内黄县", + "shortName": null, + "level": 3, + "code": "410527", + "pinyin": "NeiHuangXian", + "pinyinFirst": "NHX", + "capital": "城关镇", + "population": 86, + "area": 1145, + "areaCode": "0372", + "zipCode": "456350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677247045, + "parentId": 653116674637893, + "name": "鹤壁市", + "shortName": null, + "level": 2, + "code": "410600", + "pinyin": "HeBiShi", + "pinyinFirst": "HBS", + "capital": "淇滨区", + "population": 171, + "area": 2140, + "areaCode": "0392", + "zipCode": "458000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116677247046, + "parentId": 653116677247045, + "name": "淇滨区", + "shortName": null, + "level": 3, + "code": "410611", + "pinyin": "QiBinQu", + "pinyinFirst": "QBQ", + "capital": "泰山路街道", + "population": 40, + "area": 343, + "areaCode": "0392", + "zipCode": "458030", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677247047, + "parentId": 653116677247045, + "name": "鹤山区", + "shortName": null, + "level": 3, + "code": "410602", + "pinyin": "HeShanQu", + "pinyinFirst": "HSQ", + "capital": "鹤壁集镇", + "population": 8, + "area": 130, + "areaCode": "0392", + "zipCode": "458010", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677247048, + "parentId": 653116677247045, + "name": "山城区", + "shortName": null, + "level": 3, + "code": "410603", + "pinyin": "ShanChengQu", + "pinyinFirst": "SCQ", + "capital": "红旗街道", + "population": 17, + "area": 136, + "areaCode": "0392", + "zipCode": "458000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677247049, + "parentId": 653116677247045, + "name": "浚县", + "shortName": null, + "level": 3, + "code": "410621", + "pinyin": "JunXian", + "pinyinFirst": "JX", + "capital": "卫溪街道", + "population": 75, + "area": 955, + "areaCode": "0392", + "zipCode": "456250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677247050, + "parentId": 653116677247045, + "name": "淇县", + "shortName": null, + "level": 3, + "code": "410622", + "pinyin": "QiXian", + "pinyinFirst": "QX", + "capital": "朝歌街道", + "population": 30, + "area": 576, + "areaCode": "0392", + "zipCode": "456750", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677406789, + "parentId": 653116674637893, + "name": "新乡市", + "shortName": null, + "level": 2, + "code": "410700", + "pinyin": "XinXiangShi", + "pinyinFirst": "XXS", + "capital": "卫滨区", + "population": 664, + "area": 8291, + "areaCode": "0373", + "zipCode": "453000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116677410885, + "parentId": 653116677406789, + "name": "卫滨区", + "shortName": null, + "level": 3, + "code": "410703", + "pinyin": "WeiBinQu", + "pinyinFirst": "WBQ", + "capital": "健康路街道", + "population": 23, + "area": 64, + "areaCode": "0373", + "zipCode": "453000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677410886, + "parentId": 653116677406789, + "name": "红旗区", + "shortName": null, + "level": 3, + "code": "410702", + "pinyin": "HongQiQu", + "pinyinFirst": "HQQ", + "capital": "西街街道", + "population": 39, + "area": 154, + "areaCode": "0373", + "zipCode": "453000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677410887, + "parentId": 653116677406789, + "name": "凤泉区", + "shortName": null, + "level": 3, + "code": "410704", + "pinyin": "FengQuanQu", + "pinyinFirst": "FQQ", + "capital": "宝山西路街道", + "population": 15, + "area": 115, + "areaCode": "0373", + "zipCode": "453011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677410888, + "parentId": 653116677406789, + "name": "牧野区", + "shortName": null, + "level": 3, + "code": "410711", + "pinyin": "MuYeQu", + "pinyinFirst": "MYQ", + "capital": "荣校路街道", + "population": 33, + "area": 99, + "areaCode": "0373", + "zipCode": "453002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677410889, + "parentId": 653116677406789, + "name": "卫辉市", + "shortName": null, + "level": 3, + "code": "410781", + "pinyin": "WeiHuiShi", + "pinyinFirst": "WHS", + "capital": "城郊乡", + "population": 54, + "area": 859, + "areaCode": "0373", + "zipCode": "453100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677410890, + "parentId": 653116677406789, + "name": "辉县市", + "shortName": null, + "level": 3, + "code": "410782", + "pinyin": "HuiXianShi", + "pinyinFirst": "HXS", + "capital": "城关街道", + "population": 93, + "area": 1681, + "areaCode": "0373", + "zipCode": "453600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677410891, + "parentId": 653116677406789, + "name": "长垣市", + "shortName": null, + "level": 3, + "code": "410783", + "pinyin": "ChangYuanShi", + "pinyinFirst": "CYS", + "capital": "蒲西街道", + "population": 102, + "area": 1038, + "areaCode": "0373", + "zipCode": "453400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677410892, + "parentId": 653116677406789, + "name": "新乡县", + "shortName": null, + "level": 3, + "code": "410721", + "pinyin": "XinXiangXian", + "pinyinFirst": "XXX", + "capital": "小冀镇", + "population": 38, + "area": 393, + "areaCode": "0373", + "zipCode": "453700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677410893, + "parentId": 653116677406789, + "name": "获嘉县", + "shortName": null, + "level": 3, + "code": "410724", + "pinyin": "HuoJiaXian", + "pinyinFirst": "HJX", + "capital": "城关镇", + "population": 45, + "area": 470, + "areaCode": "0373", + "zipCode": "453800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677410894, + "parentId": 653116677406789, + "name": "原阳县", + "shortName": null, + "level": 3, + "code": "410725", + "pinyin": "YuanYangXian", + "pinyinFirst": "YYX", + "capital": "原兴街道", + "population": 82, + "area": 1304, + "areaCode": "0373", + "zipCode": "453500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677410895, + "parentId": 653116677406789, + "name": "延津县", + "shortName": null, + "level": 3, + "code": "410726", + "pinyin": "YanJinXian", + "pinyinFirst": "YJX", + "capital": "文岩街道", + "population": 51, + "area": 888, + "areaCode": "0373", + "zipCode": "453200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677410896, + "parentId": 653116677406789, + "name": "封丘县", + "shortName": null, + "level": 3, + "code": "410727", + "pinyin": "FengQiuXian", + "pinyinFirst": "FQX", + "capital": "城关镇", + "population": 89, + "area": 1226, + "areaCode": "0373", + "zipCode": "453300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677587013, + "parentId": 653116674637893, + "name": "焦作市", + "shortName": null, + "level": 2, + "code": "410800", + "pinyin": "JiaoZuoShi", + "pinyinFirst": "JZS", + "capital": "解放区", + "population": 373, + "area": 3972, + "areaCode": "0391", + "zipCode": "454000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116677591109, + "parentId": 653116677587013, + "name": "解放区", + "shortName": null, + "level": 3, + "code": "410802", + "pinyin": "JieFangQu", + "pinyinFirst": "JFQ", + "capital": "民生街道", + "population": 30, + "area": 68, + "areaCode": "0391", + "zipCode": "454000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677591110, + "parentId": 653116677587013, + "name": "中站区", + "shortName": null, + "level": 3, + "code": "410803", + "pinyin": "ZhongZhanQu", + "pinyinFirst": "ZZQ", + "capital": "李封街道", + "population": 11, + "area": 125, + "areaCode": "0391", + "zipCode": "454191", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677591111, + "parentId": 653116677587013, + "name": "马村区", + "shortName": null, + "level": 3, + "code": "410804", + "pinyin": "MaCunQu", + "pinyinFirst": "MCQ", + "capital": "马村街道", + "population": 14, + "area": 118, + "areaCode": "0391", + "zipCode": "454171", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677591112, + "parentId": 653116677587013, + "name": "山阳区", + "shortName": null, + "level": 3, + "code": "410811", + "pinyin": "ShanYangQu", + "pinyinFirst": "SYQ", + "capital": "新城街道", + "population": 43, + "area": 234, + "areaCode": "0391", + "zipCode": "454002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677591113, + "parentId": 653116677587013, + "name": "沁阳市", + "shortName": null, + "level": 3, + "code": "410882", + "pinyin": "QinYangShi", + "pinyinFirst": "QYS", + "capital": "覃怀街道", + "population": 49, + "area": 595, + "areaCode": "0391", + "zipCode": "454550", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677591114, + "parentId": 653116677587013, + "name": "孟州市", + "shortName": null, + "level": 3, + "code": "410883", + "pinyin": "MengZhouShi", + "pinyinFirst": "MZS", + "capital": "会昌街道", + "population": 38, + "area": 503, + "areaCode": "0391", + "zipCode": "454750", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677591115, + "parentId": 653116677587013, + "name": "修武县", + "shortName": null, + "level": 3, + "code": "410821", + "pinyin": "XiuWuXian", + "pinyinFirst": "XWX", + "capital": "城关镇", + "population": 27, + "area": 622, + "areaCode": "0391", + "zipCode": "454350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677591116, + "parentId": 653116677587013, + "name": "博爱县", + "shortName": null, + "level": 3, + "code": "410822", + "pinyin": "BoAiXian", + "pinyinFirst": "BAX", + "capital": "鸿昌街道", + "population": 40, + "area": 428, + "areaCode": "0391", + "zipCode": "454450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677591117, + "parentId": 653116677587013, + "name": "武陟县", + "shortName": null, + "level": 3, + "code": "410823", + "pinyin": "WuZhiXian", + "pinyinFirst": "WZX", + "capital": "木城街道", + "population": 74, + "area": 798, + "areaCode": "0391", + "zipCode": "454950", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677591118, + "parentId": 653116677587013, + "name": "温县", + "shortName": null, + "level": 3, + "code": "410825", + "pinyin": "WenXian", + "pinyinFirst": "WX", + "capital": "温泉街道", + "population": 46, + "area": 481, + "areaCode": "0391", + "zipCode": "454850", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677779525, + "parentId": 653116674637893, + "name": "濮阳市", + "shortName": null, + "level": 2, + "code": "410900", + "pinyin": "PuYangShi", + "pinyinFirst": "PYS", + "capital": "华龙区", + "population": 434, + "area": 4271, + "areaCode": "0393", + "zipCode": "457000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116677779526, + "parentId": 653116677779525, + "name": "华龙区", + "shortName": null, + "level": 3, + "code": "410902", + "pinyin": "HuaLongQu", + "pinyinFirst": "HLQ", + "capital": "中原路街道", + "population": 75, + "area": 330, + "areaCode": "0393", + "zipCode": "457001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677779527, + "parentId": 653116677779525, + "name": "清丰县", + "shortName": null, + "level": 3, + "code": "410922", + "pinyin": "QingFengXian", + "pinyinFirst": "QFX", + "capital": "城关镇", + "population": 75, + "area": 834, + "areaCode": "0393", + "zipCode": "457300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677779528, + "parentId": 653116677779525, + "name": "南乐县", + "shortName": null, + "level": 3, + "code": "410923", + "pinyin": "NanLeXian", + "pinyinFirst": "NLX", + "capital": "城关镇", + "population": 58, + "area": 622, + "areaCode": "0393", + "zipCode": "457400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677779529, + "parentId": 653116677779525, + "name": "范县", + "shortName": null, + "level": 3, + "code": "410926", + "pinyin": "FanXian", + "pinyinFirst": "FX", + "capital": "城关镇", + "population": 60, + "area": 617, + "areaCode": "0393", + "zipCode": "457500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677779530, + "parentId": 653116677779525, + "name": "台前县", + "shortName": null, + "level": 3, + "code": "410927", + "pinyin": "TaiQianXian", + "pinyinFirst": "TQX", + "capital": "孙口镇", + "population": 42, + "area": 448, + "areaCode": "0393", + "zipCode": "457600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677779531, + "parentId": 653116677779525, + "name": "濮阳县", + "shortName": null, + "level": 3, + "code": "410928", + "pinyin": "PuYangXian", + "pinyinFirst": "PYX", + "capital": "城关镇", + "population": 123, + "area": 1420, + "areaCode": "0393", + "zipCode": "457100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677980229, + "parentId": 653116674637893, + "name": "许昌市", + "shortName": null, + "level": 2, + "code": "411000", + "pinyin": "XuChangShi", + "pinyinFirst": "XCS", + "capital": "魏都区", + "population": 511, + "area": 4979, + "areaCode": "0374", + "zipCode": "461000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116677980230, + "parentId": 653116677980229, + "name": "魏都区", + "shortName": null, + "level": 3, + "code": "411002", + "pinyin": "WeiDuQu", + "pinyinFirst": "WDQ", + "capital": "丁庄街道", + "population": 41, + "area": 89, + "areaCode": "0374", + "zipCode": "461000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677984325, + "parentId": 653116677980229, + "name": "建安区", + "shortName": null, + "level": 3, + "code": "411003", + "pinyin": "JianAnQu", + "pinyinFirst": "JAQ", + "capital": "新元街道", + "population": 93, + "area": 1001, + "areaCode": "0374", + "zipCode": "461100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677984326, + "parentId": 653116677980229, + "name": "禹州市", + "shortName": null, + "level": 3, + "code": "411081", + "pinyin": "YuZhouShi", + "pinyinFirst": "YZS", + "capital": "颍川街道", + "population": 134, + "area": 1469, + "areaCode": "0374", + "zipCode": "461670", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677984327, + "parentId": 653116677980229, + "name": "长葛市", + "shortName": null, + "level": 3, + "code": "411082", + "pinyin": "ChangGeShi", + "pinyinFirst": "CGS", + "capital": "和尚桥镇", + "population": 78, + "area": 636, + "areaCode": "0374", + "zipCode": "461500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677984328, + "parentId": 653116677980229, + "name": "鄢陵县", + "shortName": null, + "level": 3, + "code": "411024", + "pinyin": "YanLingXian", + "pinyinFirst": "YLX", + "capital": "安陵镇", + "population": 73, + "area": 870, + "areaCode": "0374", + "zipCode": "461200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116677984329, + "parentId": 653116677980229, + "name": "襄城县", + "shortName": null, + "level": 3, + "code": "411025", + "pinyin": "XiangChengXian", + "pinyinFirst": "XCX", + "capital": "城关镇", + "population": 91, + "area": 914, + "areaCode": "0374", + "zipCode": "461700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678176837, + "parentId": 653116674637893, + "name": "漯河市", + "shortName": null, + "level": 2, + "code": "411100", + "pinyin": "LuoHeShi", + "pinyinFirst": "LHS", + "capital": "郾城区", + "population": 268, + "area": 2692, + "areaCode": "0395", + "zipCode": "462000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116678180933, + "parentId": 653116678176837, + "name": "郾城区", + "shortName": null, + "level": 3, + "code": "411103", + "pinyin": "YanChengQu", + "pinyinFirst": "YCQ", + "capital": "龙塔街道", + "population": 51, + "area": 452, + "areaCode": "0395", + "zipCode": "462300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678180934, + "parentId": 653116678176837, + "name": "源汇区", + "shortName": null, + "level": 3, + "code": "411102", + "pinyin": "YuanHuiQu", + "pinyinFirst": "YHQ", + "capital": "干河陈街道", + "population": 31, + "area": 230, + "areaCode": "0395", + "zipCode": "462000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678180935, + "parentId": 653116678176837, + "name": "召陵区", + "shortName": null, + "level": 3, + "code": "411104", + "pinyin": "ZhaoLingQu", + "pinyinFirst": "ZLQ", + "capital": "翟庄街道", + "population": 53, + "area": 434, + "areaCode": "0395", + "zipCode": "462300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678180936, + "parentId": 653116678176837, + "name": "舞阳县", + "shortName": null, + "level": 3, + "code": "411121", + "pinyin": "WuYangXian", + "pinyinFirst": "WYX", + "capital": "舞泉镇", + "population": 60, + "area": 773, + "areaCode": "0395", + "zipCode": "462400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678180937, + "parentId": 653116678176837, + "name": "临颍县", + "shortName": null, + "level": 3, + "code": "411122", + "pinyin": "LinYingXian", + "pinyinFirst": "LYX", + "capital": "新城街道", + "population": 73, + "area": 803, + "areaCode": "0395", + "zipCode": "462600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678414405, + "parentId": 653116674637893, + "name": "三门峡市", + "shortName": null, + "level": 2, + "code": "411200", + "pinyin": "SanMenXiaShi", + "pinyinFirst": "SMXS", + "capital": "湖滨区", + "population": 227, + "area": 9936, + "areaCode": "0398", + "zipCode": "472000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116678414406, + "parentId": 653116678414405, + "name": "湖滨区", + "shortName": null, + "level": 3, + "code": "411202", + "pinyin": "HuBinQu", + "pinyinFirst": "HBQ", + "capital": "涧河街道", + "population": 29, + "area": 205, + "areaCode": "0398", + "zipCode": "472000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678418501, + "parentId": 653116678414405, + "name": "陕州区", + "shortName": null, + "level": 3, + "code": "411203", + "pinyin": "ShanZhouQu", + "pinyinFirst": "SZQ", + "capital": "大营镇", + "population": 34, + "area": 1611, + "areaCode": "0398", + "zipCode": "472100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678418502, + "parentId": 653116678414405, + "name": "义马市", + "shortName": null, + "level": 3, + "code": "411281", + "pinyin": "YiMaShi", + "pinyinFirst": "YMS", + "capital": "千秋路街道", + "population": 15, + "area": 99, + "areaCode": "0398", + "zipCode": "472300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678418503, + "parentId": 653116678414405, + "name": "灵宝市", + "shortName": null, + "level": 3, + "code": "411282", + "pinyin": "LingBaoShi", + "pinyinFirst": "LBS", + "capital": "城关镇", + "population": 75, + "area": 2999, + "areaCode": "0398", + "zipCode": "472500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678418504, + "parentId": 653116678414405, + "name": "渑池县", + "shortName": null, + "level": 3, + "code": "411221", + "pinyin": "MianChiXian", + "pinyinFirst": "MCX", + "capital": "城关镇", + "population": 36, + "area": 1358, + "areaCode": "0398", + "zipCode": "472400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678418505, + "parentId": 653116678414405, + "name": "卢氏县", + "shortName": null, + "level": 3, + "code": "411224", + "pinyin": "LuShiXian", + "pinyinFirst": "LSX", + "capital": "城关镇", + "population": 38, + "area": 3664, + "areaCode": "0398", + "zipCode": "472200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678664261, + "parentId": 653116674637893, + "name": "南阳市", + "shortName": null, + "level": 2, + "code": "411300", + "pinyin": "NanYangShi", + "pinyinFirst": "NYS", + "capital": "卧龙区", + "population": 1239, + "area": 26511, + "areaCode": "0377", + "zipCode": "473000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116678672453, + "parentId": 653116678664261, + "name": "卧龙区", + "shortName": null, + "level": 3, + "code": "411303", + "pinyin": "WoLongQu", + "pinyinFirst": "WLQ", + "capital": "七一街道", + "population": 108, + "area": 1016, + "areaCode": "0377", + "zipCode": "473003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678672454, + "parentId": 653116678664261, + "name": "宛城区", + "shortName": null, + "level": 3, + "code": "411302", + "pinyin": "WanChengQu", + "pinyinFirst": "WCQ", + "capital": "东关街道", + "population": 96, + "area": 971, + "areaCode": "0377", + "zipCode": "473001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678672455, + "parentId": 653116678664261, + "name": "邓州市", + "shortName": null, + "level": 3, + "code": "411381", + "pinyin": "DengZhouShi", + "pinyinFirst": "DZS", + "capital": "古城街道", + "population": 186, + "area": 2360, + "areaCode": "0377", + "zipCode": "474150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678672456, + "parentId": 653116678664261, + "name": "南召县", + "shortName": null, + "level": 3, + "code": "411321", + "pinyin": "NanZhaoXian", + "pinyinFirst": "NZX", + "capital": "城关镇", + "population": 69, + "area": 2932, + "areaCode": "0377", + "zipCode": "474650", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678672457, + "parentId": 653116678664261, + "name": "方城县", + "shortName": null, + "level": 3, + "code": "411322", + "pinyin": "FangChengXian", + "pinyinFirst": "FCX", + "capital": "凤瑞街道", + "population": 118, + "area": 2543, + "areaCode": "0377", + "zipCode": "473200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678672458, + "parentId": 653116678664261, + "name": "西峡县", + "shortName": null, + "level": 3, + "code": "411323", + "pinyin": "XiXiaXian", + "pinyinFirst": "XXX", + "capital": "紫金街道", + "population": 49, + "area": 3445, + "areaCode": "0377", + "zipCode": "474550", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678672459, + "parentId": 653116678664261, + "name": "镇平县", + "shortName": null, + "level": 3, + "code": "411324", + "pinyin": "ZhenPingXian", + "pinyinFirst": "ZPX", + "capital": "涅阳街道", + "population": 109, + "area": 1494, + "areaCode": "0377", + "zipCode": "474250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678672460, + "parentId": 653116678664261, + "name": "内乡县", + "shortName": null, + "level": 3, + "code": "411325", + "pinyin": "NeiXiangXian", + "pinyinFirst": "NXX", + "capital": "城关镇", + "population": 72, + "area": 2305, + "areaCode": "0377", + "zipCode": "474350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678672461, + "parentId": 653116678664261, + "name": "淅川县", + "shortName": null, + "level": 3, + "code": "411326", + "pinyin": "XiChuanXian", + "pinyinFirst": "XCX", + "capital": "龙城街道", + "population": 72, + "area": 2820, + "areaCode": "0377", + "zipCode": "474450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678672462, + "parentId": 653116678664261, + "name": "社旗县", + "shortName": null, + "level": 3, + "code": "411327", + "pinyin": "SheQiXian", + "pinyinFirst": "SQX", + "capital": "赊店镇", + "population": 77, + "area": 1153, + "areaCode": "0377", + "zipCode": "473300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678672463, + "parentId": 653116678664261, + "name": "唐河县", + "shortName": null, + "level": 3, + "code": "411328", + "pinyin": "TangHeXian", + "pinyinFirst": "THX", + "capital": "滨河街道", + "population": 148, + "area": 2497, + "areaCode": "0377", + "zipCode": "473400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678672464, + "parentId": 653116678664261, + "name": "新野县", + "shortName": null, + "level": 3, + "code": "411329", + "pinyin": "XinYeXian", + "pinyinFirst": "XYX", + "capital": "汉城街道", + "population": 86, + "area": 1061, + "areaCode": "0377", + "zipCode": "473500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678672465, + "parentId": 653116678664261, + "name": "桐柏县", + "shortName": null, + "level": 3, + "code": "411330", + "pinyin": "TongBaiXian", + "pinyinFirst": "TBX", + "capital": "城郊乡", + "population": 50, + "area": 1914, + "areaCode": "0377", + "zipCode": "474750", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678930501, + "parentId": 653116674637893, + "name": "商丘市", + "shortName": null, + "level": 2, + "code": "411400", + "pinyin": "ShangQiuShi", + "pinyinFirst": "SQS", + "capital": "梁园区", + "population": 1005, + "area": 10703, + "areaCode": "0370", + "zipCode": "476000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116678934597, + "parentId": 653116678930501, + "name": "梁园区", + "shortName": null, + "level": 3, + "code": "411402", + "pinyin": "LiangYuanQu", + "pinyinFirst": "LYQ", + "capital": "平原街道", + "population": 91, + "area": 692, + "areaCode": "0370", + "zipCode": "476000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678934598, + "parentId": 653116678930501, + "name": "睢阳区", + "shortName": null, + "level": 3, + "code": "411403", + "pinyin": "HuiYangQu", + "pinyinFirst": "HYQ", + "capital": "新城街道", + "population": 98, + "area": 964, + "areaCode": "0370", + "zipCode": "476100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678934599, + "parentId": 653116678930501, + "name": "永城市", + "shortName": null, + "level": 3, + "code": "411481", + "pinyin": "YongChengShi", + "pinyinFirst": "YCS", + "capital": "雪枫街道", + "population": 165, + "area": 2021, + "areaCode": "0370", + "zipCode": "476600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678934600, + "parentId": 653116678930501, + "name": "民权县", + "shortName": null, + "level": 3, + "code": "411421", + "pinyin": "MinQuanXian", + "pinyinFirst": "MQX", + "capital": "绿洲街道", + "population": 102, + "area": 1238, + "areaCode": "0370", + "zipCode": "476800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678934601, + "parentId": 653116678930501, + "name": "睢县", + "shortName": null, + "level": 3, + "code": "411422", + "pinyin": "HuiXian", + "pinyinFirst": "HX", + "capital": "城郊乡", + "population": 93, + "area": 920, + "areaCode": "0370", + "zipCode": "476900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678934602, + "parentId": 653116678930501, + "name": "宁陵县", + "shortName": null, + "level": 3, + "code": "411423", + "pinyin": "NingLingXian", + "pinyinFirst": "NLX", + "capital": "城关回族镇", + "population": 73, + "area": 797, + "areaCode": "0370", + "zipCode": "476700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678934603, + "parentId": 653116678930501, + "name": "柘城县", + "shortName": null, + "level": 3, + "code": "411424", + "pinyin": "ZheChengXian", + "pinyinFirst": "ZCX", + "capital": "凤凰街道", + "population": 111, + "area": 1041, + "areaCode": "0370", + "zipCode": "476200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678934604, + "parentId": 653116678930501, + "name": "虞城县", + "shortName": null, + "level": 3, + "code": "411425", + "pinyin": "YuChengXian", + "pinyinFirst": "YCX", + "capital": "城郊乡", + "population": 138, + "area": 1544, + "areaCode": "0370", + "zipCode": "476300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116678934605, + "parentId": 653116678930501, + "name": "夏邑县", + "shortName": null, + "level": 3, + "code": "411426", + "pinyin": "XiaYiXian", + "pinyinFirst": "XYX", + "capital": "城关镇", + "population": 134, + "area": 1486, + "areaCode": "0370", + "zipCode": "476400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679196741, + "parentId": 653116674637893, + "name": "信阳市", + "shortName": null, + "level": 2, + "code": "411500", + "pinyin": "XinYangShi", + "pinyinFirst": "XYS", + "capital": "浉河区", + "population": 912, + "area": 18916, + "areaCode": "0376", + "zipCode": "464000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116679200837, + "parentId": 653116679196741, + "name": "浉河区", + "shortName": null, + "level": 3, + "code": "411502", + "pinyin": "ShiHeQu", + "pinyinFirst": "SHQ", + "capital": "湖东街道", + "population": 67, + "area": 1779, + "areaCode": "0376", + "zipCode": "464000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679200838, + "parentId": 653116679196741, + "name": "平桥区", + "shortName": null, + "level": 3, + "code": "411503", + "pinyin": "PingQiaoQu", + "pinyinFirst": "PQQ", + "capital": "平桥街道", + "population": 91, + "area": 1891, + "areaCode": "0376", + "zipCode": "464100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679200839, + "parentId": 653116679196741, + "name": "罗山县", + "shortName": null, + "level": 3, + "code": "411521", + "pinyin": "LuoShanXian", + "pinyinFirst": "LSX", + "capital": "丽水街道", + "population": 79, + "area": 2070, + "areaCode": "0376", + "zipCode": "464200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679200840, + "parentId": 653116679196741, + "name": "光山县", + "shortName": null, + "level": 3, + "code": "411522", + "pinyin": "GuangShanXian", + "pinyinFirst": "GSX", + "capital": "紫水街道", + "population": 94, + "area": 1834, + "areaCode": "0376", + "zipCode": "465450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679200841, + "parentId": 653116679196741, + "name": "新县", + "shortName": null, + "level": 3, + "code": "411523", + "pinyin": "XinXian", + "pinyinFirst": "XX", + "capital": "新集镇", + "population": 38, + "area": 1554, + "areaCode": "0376", + "zipCode": "465500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679200842, + "parentId": 653116679196741, + "name": "商城县", + "shortName": null, + "level": 3, + "code": "411524", + "pinyin": "ShangChengXian", + "pinyinFirst": "SCX", + "capital": "赤城街道", + "population": 80, + "area": 2110, + "areaCode": "0376", + "zipCode": "465350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679200843, + "parentId": 653116679196741, + "name": "固始县", + "shortName": null, + "level": 3, + "code": "411525", + "pinyin": "GuShiXian", + "pinyinFirst": "GSX", + "capital": "秀水街道", + "population": 179, + "area": 2943, + "areaCode": "0376", + "zipCode": "465200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679200844, + "parentId": 653116679196741, + "name": "潢川县", + "shortName": null, + "level": 3, + "code": "411526", + "pinyin": "HuangChuanXian", + "pinyinFirst": "HCX", + "capital": "定城街道", + "population": 89, + "area": 1635, + "areaCode": "0376", + "zipCode": "465150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679200845, + "parentId": 653116679196741, + "name": "淮滨县", + "shortName": null, + "level": 3, + "code": "411527", + "pinyin": "HuaiBinXian", + "pinyinFirst": "HBX", + "capital": "滨湖街道", + "population": 83, + "area": 1207, + "areaCode": "0376", + "zipCode": "464400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679200846, + "parentId": 653116679196741, + "name": "息县", + "shortName": null, + "level": 3, + "code": "411528", + "pinyin": "XiXian", + "pinyinFirst": "XX", + "capital": "谯楼街道", + "population": 112, + "area": 1893, + "areaCode": "0376", + "zipCode": "464300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679483461, + "parentId": 653116674637893, + "name": "周口市", + "shortName": null, + "level": 2, + "code": "411600", + "pinyin": "ZhouKouShi", + "pinyinFirst": "ZKS", + "capital": "川汇区", + "population": 1257, + "area": 11961, + "areaCode": "0394", + "zipCode": "466000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116679483462, + "parentId": 653116679483461, + "name": "川汇区", + "shortName": null, + "level": 3, + "code": "411602", + "pinyin": "ChuanHuiQu", + "pinyinFirst": "CHQ", + "capital": "小桥街街道", + "population": 64, + "area": 333, + "areaCode": "0394", + "zipCode": "466000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679483463, + "parentId": 653116679483461, + "name": "淮阳区", + "shortName": null, + "level": 3, + "code": "411603", + "pinyin": "HuaiYangQu", + "pinyinFirst": "HYQ", + "capital": "城关回族镇", + "population": 98, + "area": 1335, + "areaCode": "0394", + "zipCode": "466700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679483464, + "parentId": 653116679483461, + "name": "项城市", + "shortName": null, + "level": 3, + "code": "411681", + "pinyin": "XiangChengShi", + "pinyinFirst": "XCS", + "capital": "花园街道", + "population": 135, + "area": 1086, + "areaCode": "0394", + "zipCode": "466200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679487557, + "parentId": 653116679483461, + "name": "扶沟县", + "shortName": null, + "level": 3, + "code": "411621", + "pinyin": "FuGouXian", + "pinyinFirst": "FGX", + "capital": "桐丘街道", + "population": 79, + "area": 1163, + "areaCode": "0394", + "zipCode": "461300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679487558, + "parentId": 653116679483461, + "name": "西华县", + "shortName": null, + "level": 3, + "code": "411622", + "pinyin": "XiHuaXian", + "pinyinFirst": "XHX", + "capital": "娲城街道", + "population": 96, + "area": 1206, + "areaCode": "0394", + "zipCode": "466600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679487559, + "parentId": 653116679483461, + "name": "商水县", + "shortName": null, + "level": 3, + "code": "411623", + "pinyin": "ShangShuiXian", + "pinyinFirst": "SSX", + "capital": "新城街道", + "population": 132, + "area": 1268, + "areaCode": "0394", + "zipCode": "466100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679487560, + "parentId": 653116679483461, + "name": "沈丘县", + "shortName": null, + "level": 3, + "code": "411624", + "pinyin": "ShenQiuXian", + "pinyinFirst": "SQX", + "capital": "槐店回族镇", + "population": 139, + "area": 1082, + "areaCode": "0394", + "zipCode": "466300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679487561, + "parentId": 653116679483461, + "name": "郸城县", + "shortName": null, + "level": 3, + "code": "411625", + "pinyin": "DanChengXian", + "pinyinFirst": "DCX", + "capital": "新城街道", + "population": 159, + "area": 1490, + "areaCode": "0394", + "zipCode": "477150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679487562, + "parentId": 653116679483461, + "name": "太康县", + "shortName": null, + "level": 3, + "code": "411627", + "pinyin": "TaiKangXian", + "pinyinFirst": "TKX", + "capital": "城关回族镇", + "population": 165, + "area": 1755, + "areaCode": "0394", + "zipCode": "461400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679487563, + "parentId": 653116679483461, + "name": "鹿邑县", + "shortName": null, + "level": 3, + "code": "411628", + "pinyin": "LuYiXian", + "pinyinFirst": "LYX", + "capital": "真源街道", + "population": 138, + "area": 1243, + "areaCode": "0394", + "zipCode": "477200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679798853, + "parentId": 653116674637893, + "name": "驻马店市", + "shortName": null, + "level": 2, + "code": "411700", + "pinyin": "ZhuMaDianShi", + "pinyinFirst": "ZMDS", + "capital": "驿城区", + "population": 965, + "area": 15086, + "areaCode": "0396", + "zipCode": "463000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116679802949, + "parentId": 653116679798853, + "name": "驿城区", + "shortName": null, + "level": 3, + "code": "411702", + "pinyin": "YiChengQu", + "pinyinFirst": "YCQ", + "capital": "橡林街道", + "population": 86, + "area": 1284, + "areaCode": "0396", + "zipCode": "463000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679802950, + "parentId": 653116679798853, + "name": "西平县", + "shortName": null, + "level": 3, + "code": "411721", + "pinyin": "XiPingXian", + "pinyinFirst": "XPX", + "capital": "柏城街道", + "population": 88, + "area": 1100, + "areaCode": "0396", + "zipCode": "463900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679802951, + "parentId": 653116679798853, + "name": "上蔡县", + "shortName": null, + "level": 3, + "code": "411722", + "pinyin": "ShangCaiXian", + "pinyinFirst": "SCX", + "capital": "重阳街道", + "population": 160, + "area": 1514, + "areaCode": "0396", + "zipCode": "463800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679802952, + "parentId": 653116679798853, + "name": "平舆县", + "shortName": null, + "level": 3, + "code": "411723", + "pinyin": "PingYuXian", + "pinyinFirst": "PYX", + "capital": "清河街道", + "population": 117, + "area": 1284, + "areaCode": "0396", + "zipCode": "463400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679802953, + "parentId": 653116679798853, + "name": "正阳县", + "shortName": null, + "level": 3, + "code": "411724", + "pinyin": "ZhengYangXian", + "pinyinFirst": "ZYX", + "capital": "真阳街道", + "population": 87, + "area": 1899, + "areaCode": "0396", + "zipCode": "463600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679802954, + "parentId": 653116679798853, + "name": "确山县", + "shortName": null, + "level": 3, + "code": "411725", + "pinyin": "QueShanXian", + "pinyinFirst": "QSX", + "capital": "三里河街道", + "population": 56, + "area": 1644, + "areaCode": "0396", + "zipCode": "463200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679802955, + "parentId": 653116679798853, + "name": "泌阳县", + "shortName": null, + "level": 3, + "code": "411726", + "pinyin": "BiYangXian", + "pinyinFirst": "BYX", + "capital": "花园街道", + "population": 97, + "area": 2346, + "areaCode": "0396", + "zipCode": "463700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679802956, + "parentId": 653116679798853, + "name": "汝南县", + "shortName": null, + "level": 3, + "code": "411727", + "pinyin": "RuNanXian", + "pinyinFirst": "RNX", + "capital": "汝宁街道", + "population": 90, + "area": 1504, + "areaCode": "0396", + "zipCode": "463300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679802957, + "parentId": 653116679798853, + "name": "遂平县", + "shortName": null, + "level": 3, + "code": "411728", + "pinyin": "SuiPingXian", + "pinyinFirst": "SPX", + "capital": "灈阳街道", + "population": 58, + "area": 1070, + "areaCode": "0396", + "zipCode": "463100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116679802958, + "parentId": 653116679798853, + "name": "新蔡县", + "shortName": null, + "level": 3, + "code": "411729", + "pinyin": "XinCaiXian", + "pinyinFirst": "XCX", + "capital": "古吕街道", + "population": 125, + "area": 1442, + "areaCode": "0396", + "zipCode": "463500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116680151109, + "parentId": 653116674637893, + "name": "省直辖县级行政单位", + "shortName": null, + "level": 2, + "code": "653116680151109", + "pinyin": "ShengZhiXiaXianJiXingZhengDanWei", + "pinyinFirst": "SZXXJXZDW", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116680155205, + "parentId": 653116680151109, + "name": "济源市", + "shortName": null, + "level": 3, + "code": "419001", + "pinyin": "JiYuanShi", + "pinyinFirst": "JYS", + "capital": "沁园街道", + "population": 73, + "area": 1899, + "areaCode": "0391", + "zipCode": "459000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:35", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:09" + }, + { + "id": 653116680495173, + "parentId": 0, + "name": "湖北省", + "shortName": "鄂", + "level": 1, + "code": "420000", + "pinyin": "HuBeiSheng", + "pinyinFirst": "HBS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116682117189, + "parentId": 653116680495173, + "name": "武汉市", + "shortName": null, + "level": 2, + "code": "420100", + "pinyin": "WuHanShi", + "pinyinFirst": "WHS", + "capital": "江岸区", + "population": 906, + "area": 8483, + "areaCode": "027", + "zipCode": "430014", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116682121285, + "parentId": 653116682117189, + "name": "江岸区", + "shortName": null, + "level": 3, + "code": "420102", + "pinyin": "JiangAnQu", + "pinyinFirst": "JAQ", + "capital": "四唯街道", + "population": 79, + "area": 64, + "areaCode": "027", + "zipCode": "430014", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682121286, + "parentId": 653116682117189, + "name": "江汉区", + "shortName": null, + "level": 3, + "code": "420103", + "pinyin": "JiangHanQu", + "pinyinFirst": "JHQ", + "capital": "北湖街道", + "population": 51, + "area": 33, + "areaCode": "027", + "zipCode": "430021", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682121287, + "parentId": 653116682117189, + "name": "硚口区", + "shortName": null, + "level": 3, + "code": "420104", + "pinyin": "QiaoKouQu", + "pinyinFirst": "QKQ", + "capital": "韩家墩街道", + "population": 54, + "area": 46, + "areaCode": "027", + "zipCode": "430033", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682121288, + "parentId": 653116682117189, + "name": "汉阳区", + "shortName": null, + "level": 3, + "code": "420105", + "pinyin": "HanYangQu", + "pinyinFirst": "HYQ", + "capital": "琴断口街道", + "population": 72, + "area": 108, + "areaCode": "027", + "zipCode": "430050", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682121289, + "parentId": 653116682117189, + "name": "武昌区", + "shortName": null, + "level": 3, + "code": "420106", + "pinyin": "WuChangQu", + "pinyinFirst": "WCQ", + "capital": "积玉桥街道", + "population": 110, + "area": 81, + "areaCode": "027", + "zipCode": "430061", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682121290, + "parentId": 653116682117189, + "name": "青山区", + "shortName": null, + "level": 3, + "code": "420107", + "pinyin": "QingShanQu", + "pinyinFirst": "QSQ", + "capital": "新沟桥街道", + "population": 46, + "area": 45, + "areaCode": "027", + "zipCode": "430080", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682121291, + "parentId": 653116682117189, + "name": "洪山区", + "shortName": null, + "level": 3, + "code": "420111", + "pinyin": "HongShanQu", + "pinyinFirst": "HSQ", + "capital": "珞南街道", + "population": 122, + "area": 509, + "areaCode": "027", + "zipCode": "430070", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682121292, + "parentId": 653116682117189, + "name": "东西湖区", + "shortName": null, + "level": 3, + "code": "420112", + "pinyin": "DongXiHuQu", + "pinyinFirst": "DXHQ", + "capital": "吴家山街道", + "population": 35, + "area": 439, + "areaCode": "027", + "zipCode": "430040", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682121293, + "parentId": 653116682117189, + "name": "汉南区", + "shortName": null, + "level": 3, + "code": "420113", + "pinyin": "HanNanQu", + "pinyinFirst": "HNQ", + "capital": "纱帽街道", + "population": 12, + "area": 288, + "areaCode": "027", + "zipCode": "430090", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682121294, + "parentId": 653116682117189, + "name": "蔡甸区", + "shortName": null, + "level": 3, + "code": "420114", + "pinyin": "CaiDianQu", + "pinyinFirst": "CDQ", + "capital": "蔡甸街道", + "population": 47, + "area": 1094, + "areaCode": "027", + "zipCode": "430100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682121295, + "parentId": 653116682117189, + "name": "江夏区", + "shortName": null, + "level": 3, + "code": "420115", + "pinyin": "JiangXiaQu", + "pinyinFirst": "JXQ", + "capital": "纸坊街道", + "population": 65, + "area": 2015, + "areaCode": "027", + "zipCode": "430200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682121296, + "parentId": 653116682117189, + "name": "黄陂区", + "shortName": null, + "level": 3, + "code": "420116", + "pinyin": "HuangPiQu", + "pinyinFirst": "HPQ", + "capital": "前川街道", + "population": 116, + "area": 2261, + "areaCode": "027", + "zipCode": "432200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682121297, + "parentId": 653116682117189, + "name": "新洲区", + "shortName": null, + "level": 3, + "code": "420117", + "pinyin": "XinZhouQu", + "pinyinFirst": "XZQ", + "capital": "邾城街道", + "population": 97, + "area": 1500, + "areaCode": "027", + "zipCode": "431400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682244165, + "parentId": 653116680495173, + "name": "黄石市", + "shortName": null, + "level": 2, + "code": "420200", + "pinyin": "HuangShiShi", + "pinyinFirst": "HSS", + "capital": "下陆区", + "population": 273, + "area": 4583, + "areaCode": "0714", + "zipCode": "435000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116682248261, + "parentId": 653116682244165, + "name": "下陆区", + "shortName": null, + "level": 3, + "code": "420204", + "pinyin": "XiaLuQu", + "pinyinFirst": "XLQ", + "capital": "新下陆街道", + "population": 16, + "area": 66, + "areaCode": "0714", + "zipCode": "435005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682248262, + "parentId": 653116682244165, + "name": "黄石港区", + "shortName": null, + "level": 3, + "code": "420202", + "pinyin": "HuangShiGangQu", + "pinyinFirst": "HSGQ", + "capital": "沈家营街道", + "population": 21, + "area": 32, + "areaCode": "0714", + "zipCode": "435000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682248263, + "parentId": 653116682244165, + "name": "西塞山区", + "shortName": null, + "level": 3, + "code": "420203", + "pinyin": "XiSaiShanQu", + "pinyinFirst": "XSSQ", + "capital": "八泉街道", + "population": 20, + "area": 113, + "areaCode": "0714", + "zipCode": "435001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682248264, + "parentId": 653116682244165, + "name": "铁山区", + "shortName": null, + "level": 3, + "code": "420205", + "pinyin": "TieShanQu", + "pinyinFirst": "TSQ", + "capital": "铁山街道", + "population": 5, + "area": 28, + "areaCode": "0714", + "zipCode": "435006", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682248265, + "parentId": 653116682244165, + "name": "大冶市", + "shortName": null, + "level": 3, + "code": "420281", + "pinyin": "DaYeShi", + "pinyinFirst": "DYS", + "capital": "东岳路街道", + "population": 100, + "area": 1566, + "areaCode": "0714", + "zipCode": "435100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682248266, + "parentId": 653116682244165, + "name": "阳新县", + "shortName": null, + "level": 3, + "code": "420222", + "pinyin": "YangXinXian", + "pinyinFirst": "YXX", + "capital": "兴国镇", + "population": 112, + "area": 2778, + "areaCode": "0714", + "zipCode": "435200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682399813, + "parentId": 653116680495173, + "name": "十堰市", + "shortName": null, + "level": 2, + "code": "420300", + "pinyin": "ShiYanShi", + "pinyinFirst": "SYS", + "capital": "茅箭区", + "population": 346, + "area": 23698, + "areaCode": "0719", + "zipCode": "442000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116682403909, + "parentId": 653116682399813, + "name": "茅箭区", + "shortName": null, + "level": 3, + "code": "420302", + "pinyin": "MaoJianQu", + "pinyinFirst": "MJQ", + "capital": "武当路街道", + "population": 42, + "area": 578, + "areaCode": "0719", + "zipCode": "442000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682403910, + "parentId": 653116682399813, + "name": "张湾区", + "shortName": null, + "level": 3, + "code": "420303", + "pinyin": "ZhangWanQu", + "pinyinFirst": "ZWQ", + "capital": "车城路街道", + "population": 40, + "area": 652, + "areaCode": "0719", + "zipCode": "442000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682403911, + "parentId": 653116682399813, + "name": "郧阳区", + "shortName": null, + "level": 3, + "code": "420304", + "pinyin": "YunYangQu", + "pinyinFirst": "YYQ", + "capital": "城关镇", + "population": 57, + "area": 3863, + "areaCode": "0719", + "zipCode": "442500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682403912, + "parentId": 653116682399813, + "name": "丹江口市", + "shortName": null, + "level": 3, + "code": "420381", + "pinyin": "DanJiangKouShi", + "pinyinFirst": "DJKS", + "capital": "均州路街道", + "population": 46, + "area": 3121, + "areaCode": "0719", + "zipCode": "442700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682403913, + "parentId": 653116682399813, + "name": "郧西县", + "shortName": null, + "level": 3, + "code": "420322", + "pinyin": "YunXiXian", + "pinyinFirst": "YXX", + "capital": "城关镇", + "population": 52, + "area": 3509, + "areaCode": "0719", + "zipCode": "442600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682403914, + "parentId": 653116682399813, + "name": "竹山县", + "shortName": null, + "level": 3, + "code": "420323", + "pinyin": "ZhuShanXian", + "pinyinFirst": "ZSX", + "capital": "城关镇", + "population": 46, + "area": 3586, + "areaCode": "0719", + "zipCode": "442200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682403915, + "parentId": 653116682399813, + "name": "竹溪县", + "shortName": null, + "level": 3, + "code": "420324", + "pinyin": "ZhuXiXian", + "pinyinFirst": "ZXX", + "capital": "城关镇", + "population": 36, + "area": 3279, + "areaCode": "0719", + "zipCode": "442300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682403916, + "parentId": 653116682399813, + "name": "房县", + "shortName": null, + "level": 3, + "code": "420325", + "pinyin": "FangXian", + "pinyinFirst": "FX", + "capital": "城关镇", + "population": 47, + "area": 5110, + "areaCode": "0719", + "zipCode": "442100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682555461, + "parentId": 653116680495173, + "name": "宜昌市", + "shortName": null, + "level": 2, + "code": "420500", + "pinyin": "YiChangShi", + "pinyinFirst": "YCS", + "capital": "西陵区", + "population": 391, + "area": 21081, + "areaCode": "0717", + "zipCode": "443000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116682555462, + "parentId": 653116682555461, + "name": "西陵区", + "shortName": null, + "level": 3, + "code": "420502", + "pinyin": "XiLingQu", + "pinyinFirst": "XLQ", + "capital": "西陵街道", + "population": 40, + "area": 59, + "areaCode": "0717", + "zipCode": "443000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682555463, + "parentId": 653116682555461, + "name": "伍家岗区", + "shortName": null, + "level": 3, + "code": "420503", + "pinyin": "WuJiaGangQu", + "pinyinFirst": "WJGQ", + "capital": "伍家岗街道", + "population": 20, + "area": 85, + "areaCode": "0717", + "zipCode": "443001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682555464, + "parentId": 653116682555461, + "name": "点军区", + "shortName": null, + "level": 3, + "code": "420504", + "pinyin": "DianJunQu", + "pinyinFirst": "DJQ", + "capital": "点军街道", + "population": 10, + "area": 546, + "areaCode": "0717", + "zipCode": "443004", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682555465, + "parentId": 653116682555461, + "name": "猇亭区", + "shortName": null, + "level": 3, + "code": "420505", + "pinyin": "XiaoTingQu", + "pinyinFirst": "XTQ", + "capital": "古老背街道", + "population": 5, + "area": 118, + "areaCode": "0717", + "zipCode": "443007", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682555466, + "parentId": 653116682555461, + "name": "夷陵区", + "shortName": null, + "level": 3, + "code": "420506", + "pinyin": "YiLingQu", + "pinyinFirst": "YLQ", + "capital": "小溪塔街道", + "population": 53, + "area": 3439, + "areaCode": "0717", + "zipCode": "443100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682555467, + "parentId": 653116682555461, + "name": "宜都市", + "shortName": null, + "level": 3, + "code": "420581", + "pinyin": "YiDuShi", + "pinyinFirst": "YDS", + "capital": "陆城街道", + "population": 39, + "area": 1357, + "areaCode": "0717", + "zipCode": "443300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682555468, + "parentId": 653116682555461, + "name": "当阳市", + "shortName": null, + "level": 3, + "code": "420582", + "pinyin": "DangYangShi", + "pinyinFirst": "DYS", + "capital": "玉阳街道", + "population": 46, + "area": 2159, + "areaCode": "0717", + "zipCode": "444100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682555469, + "parentId": 653116682555461, + "name": "枝江市", + "shortName": null, + "level": 3, + "code": "420583", + "pinyin": "ZhiJiangShi", + "pinyinFirst": "ZJS", + "capital": "马家店街道", + "population": 48, + "area": 1310, + "areaCode": "0717", + "zipCode": "443200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682555470, + "parentId": 653116682555461, + "name": "远安县", + "shortName": null, + "level": 3, + "code": "420525", + "pinyin": "YuanAnXian", + "pinyinFirst": "YAX", + "capital": "鸣凤镇", + "population": 19, + "area": 1752, + "areaCode": "0717", + "zipCode": "444200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682555471, + "parentId": 653116682555461, + "name": "兴山县", + "shortName": null, + "level": 3, + "code": "420526", + "pinyin": "XingShanXian", + "pinyinFirst": "XSX", + "capital": "古夫镇", + "population": 16, + "area": 2327, + "areaCode": "0717", + "zipCode": "443700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682555472, + "parentId": 653116682555461, + "name": "秭归县", + "shortName": null, + "level": 3, + "code": "420527", + "pinyin": "ZiGuiXian", + "pinyinFirst": "ZGX", + "capital": "茅坪镇", + "population": 37, + "area": 2427, + "areaCode": "0717", + "zipCode": "443600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682559557, + "parentId": 653116682555461, + "name": "长阳土家族自治县", + "shortName": null, + "level": 3, + "code": "420528", + "pinyin": "ChangYangTuJiaZuZiZhiXian", + "pinyinFirst": "CYTJZZZX", + "capital": "龙舟坪镇", + "population": 39, + "area": 3430, + "areaCode": "0717", + "zipCode": "443500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682559558, + "parentId": 653116682555461, + "name": "五峰土家族自治县", + "shortName": null, + "level": 3, + "code": "420529", + "pinyin": "WuFengTuJiaZuZiZhiXian", + "pinyinFirst": "WFTJZZZX", + "capital": "渔洋关镇", + "population": 20, + "area": 2072, + "areaCode": "0717", + "zipCode": "443400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682752069, + "parentId": 653116680495173, + "name": "襄阳市", + "shortName": null, + "level": 2, + "code": "420600", + "pinyin": "XiangYangShi", + "pinyinFirst": "XYS", + "capital": "襄城区", + "population": 590, + "area": 19626, + "areaCode": "0710", + "zipCode": "441000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116682756165, + "parentId": 653116682752069, + "name": "襄城区", + "shortName": null, + "level": 3, + "code": "420602", + "pinyin": "XiangChengQu", + "pinyinFirst": "XCQ", + "capital": "真武山街道", + "population": 47, + "area": 645, + "areaCode": "0710", + "zipCode": "441021", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682756166, + "parentId": 653116682752069, + "name": "樊城区", + "shortName": null, + "level": 3, + "code": "420606", + "pinyin": "FanChengQu", + "pinyinFirst": "FCQ", + "capital": "汉江街道", + "population": 81, + "area": 614, + "areaCode": "0710", + "zipCode": "441002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682756167, + "parentId": 653116682752069, + "name": "襄州区", + "shortName": null, + "level": 3, + "code": "420607", + "pinyin": "XiangZhouQu", + "pinyinFirst": "XZQ", + "capital": "张湾街道", + "population": 100, + "area": 2306, + "areaCode": "0710", + "zipCode": "441100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682756168, + "parentId": 653116682752069, + "name": "老河口市", + "shortName": null, + "level": 3, + "code": "420682", + "pinyin": "LaoHeKouShi", + "pinyinFirst": "LHKS", + "capital": "光化街道", + "population": 51, + "area": 1032, + "areaCode": "0710", + "zipCode": "441800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682756169, + "parentId": 653116682752069, + "name": "枣阳市", + "shortName": null, + "level": 3, + "code": "420683", + "pinyin": "ZaoYangShi", + "pinyinFirst": "ZYS", + "capital": "北城街道", + "population": 112, + "area": 3277, + "areaCode": "0710", + "zipCode": "441200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682756170, + "parentId": 653116682752069, + "name": "宜城市", + "shortName": null, + "level": 3, + "code": "420684", + "pinyin": "YiChengShi", + "pinyinFirst": "YCS", + "capital": "鄢城街道", + "population": 56, + "area": 2115, + "areaCode": "0710", + "zipCode": "441400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682756171, + "parentId": 653116682752069, + "name": "南漳县", + "shortName": null, + "level": 3, + "code": "420624", + "pinyin": "NanZhangXian", + "pinyinFirst": "NZX", + "capital": "城关镇", + "population": 57, + "area": 3859, + "areaCode": "0710", + "zipCode": "441500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682756172, + "parentId": 653116682752069, + "name": "谷城县", + "shortName": null, + "level": 3, + "code": "420625", + "pinyin": "GuChengXian", + "pinyinFirst": "GCX", + "capital": "城关镇", + "population": 60, + "area": 2553, + "areaCode": "0710", + "zipCode": "441700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682756173, + "parentId": 653116682752069, + "name": "保康县", + "shortName": null, + "level": 3, + "code": "420626", + "pinyin": "BaoKangXian", + "pinyinFirst": "BKX", + "capital": "城关镇", + "population": 27, + "area": 3225, + "areaCode": "0710", + "zipCode": "441600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682965061, + "parentId": 653116680495173, + "name": "鄂州市", + "shortName": null, + "level": 2, + "code": "420700", + "pinyin": "EZhouShi", + "pinyinFirst": "EZS", + "capital": "鄂城区", + "population": 112, + "area": 1582, + "areaCode": "0711", + "zipCode": "436000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116682969157, + "parentId": 653116682965061, + "name": "鄂城区", + "shortName": null, + "level": 3, + "code": "420704", + "pinyin": "EChengQu", + "pinyinFirst": "ECQ", + "capital": "凤凰街道", + "population": 66, + "area": 593, + "areaCode": "0711", + "zipCode": "436099", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682969158, + "parentId": 653116682965061, + "name": "梁子湖区", + "shortName": null, + "level": 3, + "code": "420702", + "pinyin": "LiangZiHuQu", + "pinyinFirst": "LZHQ", + "capital": "太和镇", + "population": 19, + "area": 496, + "areaCode": "0711", + "zipCode": "436060", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116682969159, + "parentId": 653116682965061, + "name": "华容区", + "shortName": null, + "level": 3, + "code": "420703", + "pinyin": "HuaRongQu", + "pinyinFirst": "HRQ", + "capital": "华容镇", + "population": 27, + "area": 493, + "areaCode": "0711", + "zipCode": "436030", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683124805, + "parentId": 653116680495173, + "name": "荆门市", + "shortName": null, + "level": 2, + "code": "420800", + "pinyin": "JingMenShi", + "pinyinFirst": "JMS", + "capital": "东宝区", + "population": 291, + "area": 12100, + "areaCode": "0724", + "zipCode": "448000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116683124806, + "parentId": 653116683124805, + "name": "东宝区", + "shortName": null, + "level": 3, + "code": "420802", + "pinyin": "DongBaoQu", + "pinyinFirst": "DBQ", + "capital": "泉口街道", + "population": 35, + "area": 1645, + "areaCode": "0724", + "zipCode": "448004", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683124807, + "parentId": 653116683124805, + "name": "掇刀区", + "shortName": null, + "level": 3, + "code": "420804", + "pinyin": "DuoDaoQu", + "pinyinFirst": "DDQ", + "capital": "掇刀石街道", + "population": 30, + "area": 639, + "areaCode": "0724", + "zipCode": "448124", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683124808, + "parentId": 653116683124805, + "name": "钟祥市", + "shortName": null, + "level": 3, + "code": "420881", + "pinyin": "ZhongXiangShi", + "pinyinFirst": "ZXS", + "capital": "郢中街道", + "population": 104, + "area": 4488, + "areaCode": "0724", + "zipCode": "431900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683124809, + "parentId": 653116683124805, + "name": "京山市", + "shortName": null, + "level": 3, + "code": "420882", + "pinyin": "JingShanShi", + "pinyinFirst": "JSS", + "capital": "新市街道", + "population": 63, + "area": 3284, + "areaCode": "0724", + "zipCode": "431800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683124810, + "parentId": 653116683124805, + "name": "沙洋县", + "shortName": null, + "level": 3, + "code": "420822", + "pinyin": "ShaYangXian", + "pinyinFirst": "SYX", + "capital": "沙洋镇", + "population": 59, + "area": 2044, + "areaCode": "0724", + "zipCode": "448200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683300933, + "parentId": 653116680495173, + "name": "孝感市", + "shortName": null, + "level": 2, + "code": "420900", + "pinyin": "XiaoGanShi", + "pinyinFirst": "XGS", + "capital": "孝南区", + "population": 515, + "area": 8941, + "areaCode": "0712", + "zipCode": "432000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116683305029, + "parentId": 653116683300933, + "name": "孝南区", + "shortName": null, + "level": 3, + "code": "420902", + "pinyin": "XiaoNanQu", + "pinyinFirst": "XNQ", + "capital": "书院街道", + "population": 96, + "area": 1020, + "areaCode": "0712", + "zipCode": "432100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683305030, + "parentId": 653116683300933, + "name": "应城市", + "shortName": null, + "level": 3, + "code": "420981", + "pinyin": "YingChengShi", + "pinyinFirst": "YCS", + "capital": "城中街道", + "population": 65, + "area": 1103, + "areaCode": "0712", + "zipCode": "432400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683305031, + "parentId": 653116683300933, + "name": "安陆市", + "shortName": null, + "level": 3, + "code": "420982", + "pinyin": "AnLuShi", + "pinyinFirst": "ALS", + "capital": "府城街道", + "population": 61, + "area": 1355, + "areaCode": "0712", + "zipCode": "432600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683305032, + "parentId": 653116683300933, + "name": "汉川市", + "shortName": null, + "level": 3, + "code": "420984", + "pinyin": "HanChuanShi", + "pinyinFirst": "HCS", + "capital": "仙女山街道", + "population": 107, + "area": 1659, + "areaCode": "0712", + "zipCode": "431600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683305033, + "parentId": 653116683300933, + "name": "孝昌县", + "shortName": null, + "level": 3, + "code": "420921", + "pinyin": "XiaoChangXian", + "pinyinFirst": "XCX", + "capital": "花园镇", + "population": 67, + "area": 1217, + "areaCode": "0712", + "zipCode": "432900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683305034, + "parentId": 653116683300933, + "name": "大悟县", + "shortName": null, + "level": 3, + "code": "420922", + "pinyin": "DaWuXian", + "pinyinFirst": "DWX", + "capital": "城关镇", + "population": 62, + "area": 1982, + "areaCode": "0712", + "zipCode": "432800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683305035, + "parentId": 653116683300933, + "name": "云梦县", + "shortName": null, + "level": 3, + "code": "420923", + "pinyin": "YunMengXian", + "pinyinFirst": "YMX", + "capital": "城关镇", + "population": 57, + "area": 604, + "areaCode": "0712", + "zipCode": "432500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683489349, + "parentId": 653116680495173, + "name": "荆州市", + "shortName": null, + "level": 2, + "code": "421000", + "pinyin": "JingZhouShi", + "pinyinFirst": "JZS", + "capital": "沙市区", + "population": 637, + "area": 14456, + "areaCode": "0716", + "zipCode": "434000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116683489350, + "parentId": 653116683489349, + "name": "沙市区", + "shortName": null, + "level": 3, + "code": "421002", + "pinyin": "ShaShiQu", + "pinyinFirst": "SSQ", + "capital": "中山路街道", + "population": 53, + "area": 523, + "areaCode": "0716", + "zipCode": "434000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683489351, + "parentId": 653116683489349, + "name": "荆州区", + "shortName": null, + "level": 3, + "code": "421003", + "pinyin": "JingZhouQu", + "pinyinFirst": "JZQ", + "capital": "西城街道", + "population": 55, + "area": 1043, + "areaCode": "0716", + "zipCode": "434020", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683489352, + "parentId": 653116683489349, + "name": "石首市", + "shortName": null, + "level": 3, + "code": "421081", + "pinyin": "ShiShouShi", + "pinyinFirst": "SSS", + "capital": "绣林街道", + "population": 61, + "area": 1427, + "areaCode": "0716", + "zipCode": "434400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683489353, + "parentId": 653116683489349, + "name": "洪湖市", + "shortName": null, + "level": 3, + "code": "421083", + "pinyin": "HongHuShi", + "pinyinFirst": "HHS", + "capital": "新堤街道", + "population": 91, + "area": 2519, + "areaCode": "0716", + "zipCode": "433200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683489354, + "parentId": 653116683489349, + "name": "松滋市", + "shortName": null, + "level": 3, + "code": "421087", + "pinyin": "SongZiShi", + "pinyinFirst": "SZS", + "capital": "新江口街道", + "population": 82, + "area": 2177, + "areaCode": "0716", + "zipCode": "434200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683489355, + "parentId": 653116683489349, + "name": "监利市", + "shortName": null, + "level": 3, + "code": "421088", + "pinyin": "JianLiShi", + "pinyinFirst": "JLS", + "capital": "容城镇", + "population": 157, + "area": 3460, + "areaCode": "0716", + "zipCode": "433300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683489356, + "parentId": 653116683489349, + "name": "公安县", + "shortName": null, + "level": 3, + "code": "421022", + "pinyin": "GongAnXian", + "pinyinFirst": "GAX", + "capital": "斗湖堤镇", + "population": 99, + "area": 2258, + "areaCode": "0716", + "zipCode": "434300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683489357, + "parentId": 653116683489349, + "name": "江陵县", + "shortName": null, + "level": 3, + "code": "421024", + "pinyin": "JiangLingXian", + "pinyinFirst": "JLX", + "capital": "郝穴镇", + "population": 39, + "area": 1049, + "areaCode": "0716", + "zipCode": "434100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683661381, + "parentId": 653116680495173, + "name": "黄冈市", + "shortName": null, + "level": 2, + "code": "421100", + "pinyin": "HuangGangShi", + "pinyinFirst": "HGS", + "capital": "黄州区", + "population": 738, + "area": 17453, + "areaCode": "0713", + "zipCode": "438000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116683665477, + "parentId": 653116683661381, + "name": "黄州区", + "shortName": null, + "level": 3, + "code": "421102", + "pinyin": "HuangZhouQu", + "pinyinFirst": "HZQ", + "capital": "赤壁街道", + "population": 35, + "area": 353, + "areaCode": "0713", + "zipCode": "438000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683665478, + "parentId": 653116683661381, + "name": "麻城市", + "shortName": null, + "level": 3, + "code": "421181", + "pinyin": "MaChengShi", + "pinyinFirst": "MCS", + "capital": "龙池桥街道", + "population": 115, + "area": 3599, + "areaCode": "0713", + "zipCode": "438300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683665479, + "parentId": 653116683661381, + "name": "武穴市", + "shortName": null, + "level": 3, + "code": "421182", + "pinyin": "WuXueShi", + "pinyinFirst": "WXS", + "capital": "武穴街道", + "population": 82, + "area": 1246, + "areaCode": "0713", + "zipCode": "435400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683665480, + "parentId": 653116683661381, + "name": "团风县", + "shortName": null, + "level": 3, + "code": "421121", + "pinyin": "TuanFengXian", + "pinyinFirst": "TFX", + "capital": "团风镇", + "population": 37, + "area": 833, + "areaCode": "0713", + "zipCode": "438800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683665481, + "parentId": 653116683661381, + "name": "红安县", + "shortName": null, + "level": 3, + "code": "421122", + "pinyin": "HongAnXian", + "pinyinFirst": "HAX", + "capital": "城关镇", + "population": 65, + "area": 1796, + "areaCode": "0713", + "zipCode": "438400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683665482, + "parentId": 653116683661381, + "name": "罗田县", + "shortName": null, + "level": 3, + "code": "421123", + "pinyin": "LuoTianXian", + "pinyinFirst": "LTX", + "capital": "凤山镇", + "population": 59, + "area": 2129, + "areaCode": "0713", + "zipCode": "438600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683665483, + "parentId": 653116683661381, + "name": "英山县", + "shortName": null, + "level": 3, + "code": "421124", + "pinyin": "YingShanXian", + "pinyinFirst": "YSX", + "capital": "温泉镇", + "population": 40, + "area": 1449, + "areaCode": "0713", + "zipCode": "438700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683665484, + "parentId": 653116683661381, + "name": "浠水县", + "shortName": null, + "level": 3, + "code": "421125", + "pinyin": "XiShuiXian", + "pinyinFirst": "XSX", + "capital": "清泉镇", + "population": 100, + "area": 1949, + "areaCode": "0713", + "zipCode": "438200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683665485, + "parentId": 653116683661381, + "name": "蕲春县", + "shortName": null, + "level": 3, + "code": "421126", + "pinyin": "QiChunXian", + "pinyinFirst": "QCX", + "capital": "漕河镇", + "population": 101, + "area": 2398, + "areaCode": "0713", + "zipCode": "435300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683665486, + "parentId": 653116683661381, + "name": "黄梅县", + "shortName": null, + "level": 3, + "code": "421127", + "pinyin": "HuangMeiXian", + "pinyinFirst": "HMX", + "capital": "黄梅镇", + "population": 103, + "area": 1701, + "areaCode": "0713", + "zipCode": "435500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683870277, + "parentId": 653116680495173, + "name": "咸宁市", + "shortName": null, + "level": 2, + "code": "421200", + "pinyin": "XianNingShi", + "pinyinFirst": "XNS", + "capital": "咸安区", + "population": 305, + "area": 10019, + "areaCode": "0715", + "zipCode": "437000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116683870278, + "parentId": 653116683870277, + "name": "咸安区", + "shortName": null, + "level": 3, + "code": "421202", + "pinyin": "XianAnQu", + "pinyinFirst": "XAQ", + "capital": "浮山街道", + "population": 63, + "area": 1502, + "areaCode": "0715", + "zipCode": "437000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683870279, + "parentId": 653116683870277, + "name": "赤壁市", + "shortName": null, + "level": 3, + "code": "421281", + "pinyin": "ChiBiShi", + "pinyinFirst": "CBS", + "capital": "赤马港街道", + "population": 53, + "area": 1723, + "areaCode": "0715", + "zipCode": "437300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683870280, + "parentId": 653116683870277, + "name": "嘉鱼县", + "shortName": null, + "level": 3, + "code": "421221", + "pinyin": "JiaYuXian", + "pinyinFirst": "JYX", + "capital": "鱼岳镇", + "population": 37, + "area": 1017, + "areaCode": "0715", + "zipCode": "437200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683870281, + "parentId": 653116683870277, + "name": "通城县", + "shortName": null, + "level": 3, + "code": "421222", + "pinyin": "TongChengXian", + "pinyinFirst": "TCX", + "capital": "隽水镇", + "population": 53, + "area": 1129, + "areaCode": "0715", + "zipCode": "437400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683870282, + "parentId": 653116683870277, + "name": "崇阳县", + "shortName": null, + "level": 3, + "code": "421223", + "pinyin": "ChongYangXian", + "pinyinFirst": "CYX", + "capital": "天城镇", + "population": 51, + "area": 1968, + "areaCode": "0715", + "zipCode": "437500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116683870283, + "parentId": 653116683870277, + "name": "通山县", + "shortName": null, + "level": 3, + "code": "421224", + "pinyin": "TongShanXian", + "pinyinFirst": "TSX", + "capital": "通羊镇", + "population": 49, + "area": 2680, + "areaCode": "0715", + "zipCode": "437600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684095557, + "parentId": 653116680495173, + "name": "随州市", + "shortName": null, + "level": 2, + "code": "421300", + "pinyin": "SuiZhouShi", + "pinyinFirst": "SZS", + "capital": "曾都区", + "population": 249, + "area": 9616, + "areaCode": "0722", + "zipCode": "441300", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116684095558, + "parentId": 653116684095557, + "name": "曾都区", + "shortName": null, + "level": 3, + "code": "421303", + "pinyin": "ZengDuQu", + "pinyinFirst": "ZDQ", + "capital": "西城街道", + "population": 66, + "area": 1425, + "areaCode": "0722", + "zipCode": "441300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684095559, + "parentId": 653116684095557, + "name": "广水市", + "shortName": null, + "level": 3, + "code": "421381", + "pinyin": "GuangShuiShi", + "pinyinFirst": "GSS", + "capital": "应山街道", + "population": 91, + "area": 2647, + "areaCode": "0722", + "zipCode": "432700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684095560, + "parentId": 653116684095557, + "name": "随县", + "shortName": null, + "level": 3, + "code": "421321", + "pinyin": "SuiXian", + "pinyinFirst": "SX", + "capital": "厉山镇", + "population": 92, + "area": 5544, + "areaCode": "0722", + "zipCode": "431500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684308549, + "parentId": 653116680495173, + "name": "恩施土家族苗族自治州", + "shortName": null, + "level": 2, + "code": "422800", + "pinyin": "EnShiTuJiaZuMiaoZuZiZhiZhou", + "pinyinFirst": "ESTJZMZZZZ", + "capital": "恩施市", + "population": 402, + "area": 24111, + "areaCode": "0718", + "zipCode": "445000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116684308550, + "parentId": 653116684308549, + "name": "恩施市", + "shortName": null, + "level": 3, + "code": "422801", + "pinyin": "EnShiShi", + "pinyinFirst": "ESS", + "capital": "小渡船街道", + "population": 81, + "area": 3972, + "areaCode": "0718", + "zipCode": "445000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684308551, + "parentId": 653116684308549, + "name": "利川市", + "shortName": null, + "level": 3, + "code": "422802", + "pinyin": "LiChuanShi", + "pinyinFirst": "LCS", + "capital": "都亭街道", + "population": 92, + "area": 4603, + "areaCode": "0718", + "zipCode": "445400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684308552, + "parentId": 653116684308549, + "name": "建始县", + "shortName": null, + "level": 3, + "code": "422822", + "pinyin": "JianShiXian", + "pinyinFirst": "JSX", + "capital": "业州镇", + "population": 51, + "area": 2666, + "areaCode": "0718", + "zipCode": "445300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684308553, + "parentId": 653116684308549, + "name": "巴东县", + "shortName": null, + "level": 3, + "code": "422823", + "pinyin": "BaDongXian", + "pinyinFirst": "BDX", + "capital": "信陵镇", + "population": 49, + "area": 3354, + "areaCode": "0718", + "zipCode": "444300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684308554, + "parentId": 653116684308549, + "name": "宣恩县", + "shortName": null, + "level": 3, + "code": "422825", + "pinyin": "XuanEnXian", + "pinyinFirst": "XEX", + "capital": "珠山镇", + "population": 36, + "area": 2730, + "areaCode": "0718", + "zipCode": "445500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684308555, + "parentId": 653116684308549, + "name": "咸丰县", + "shortName": null, + "level": 3, + "code": "422826", + "pinyin": "XianFengXian", + "pinyinFirst": "XFX", + "capital": "高乐山镇", + "population": 39, + "area": 2550, + "areaCode": "0718", + "zipCode": "445600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684308556, + "parentId": 653116684308549, + "name": "来凤县", + "shortName": null, + "level": 3, + "code": "422827", + "pinyin": "LaiFengXian", + "pinyinFirst": "LFX", + "capital": "翔凤镇", + "population": 33, + "area": 1344, + "areaCode": "0718", + "zipCode": "445700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684308557, + "parentId": 653116684308549, + "name": "鹤峰县", + "shortName": null, + "level": 3, + "code": "422828", + "pinyin": "HeFengXian", + "pinyinFirst": "HFX", + "capital": "容美镇", + "population": 22, + "area": 2892, + "areaCode": "0718", + "zipCode": "445800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684509253, + "parentId": 653116680495173, + "name": "省直辖县级行政单位", + "shortName": null, + "level": 2, + "code": "653116684509253", + "pinyin": "ShengZhiXiaXianJiXingZhengDanWei", + "pinyinFirst": "SZXXJXZDW", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116684509254, + "parentId": 653116684509253, + "name": "仙桃市", + "shortName": null, + "level": 3, + "code": "429004", + "pinyin": "XianTaoShi", + "pinyinFirst": "XTS", + "capital": "沙嘴街道", + "population": 153, + "area": 2538, + "areaCode": "0728", + "zipCode": "433000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684509255, + "parentId": 653116684509253, + "name": "潜江市", + "shortName": null, + "level": 3, + "code": "429005", + "pinyin": "QianJiangShi", + "pinyinFirst": "QJS", + "capital": "园林街道", + "population": 101, + "area": 2004, + "areaCode": "0728", + "zipCode": "433100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684509256, + "parentId": 653116684509253, + "name": "天门市", + "shortName": null, + "level": 3, + "code": "429006", + "pinyin": "TianMenShi", + "pinyinFirst": "TMS", + "capital": "竟陵街道", + "population": 161, + "area": 2622, + "areaCode": "0728", + "zipCode": "431700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684509257, + "parentId": 653116684509253, + "name": "神农架林区", + "shortName": null, + "level": 3, + "code": "429021", + "pinyin": "ShenNongJiaLinQu", + "pinyinFirst": "SNJLQ", + "capital": "松柏镇", + "population": 8, + "area": 3253, + "areaCode": "0719", + "zipCode": "442400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:36", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:10" + }, + { + "id": 653116684709957, + "parentId": 0, + "name": "湖南省", + "shortName": "湘", + "level": 1, + "code": "430000", + "pinyin": "HuNanSheng", + "pinyinFirst": "HNS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116686258245, + "parentId": 653116684709957, + "name": "长沙市", + "shortName": null, + "level": 2, + "code": "430100", + "pinyin": "ChangShaShi", + "pinyinFirst": "CSS", + "capital": "岳麓区", + "population": 738, + "area": 11816, + "areaCode": "0731", + "zipCode": "410000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116686262341, + "parentId": 653116686258245, + "name": "岳麓区", + "shortName": null, + "level": 3, + "code": "430104", + "pinyin": "YueLuQu", + "pinyinFirst": "YLQ", + "capital": "望岳街道", + "population": 86, + "area": 539, + "areaCode": "0731", + "zipCode": "410013", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686262342, + "parentId": 653116686258245, + "name": "芙蓉区", + "shortName": null, + "level": 3, + "code": "430102", + "pinyin": "FuRongQu", + "pinyinFirst": "FRQ", + "capital": "东屯渡街道", + "population": 43, + "area": 43, + "areaCode": "0731", + "zipCode": "410011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686262343, + "parentId": 653116686258245, + "name": "天心区", + "shortName": null, + "level": 3, + "code": "430103", + "pinyin": "TianXinQu", + "pinyinFirst": "TXQ", + "capital": "青园街道", + "population": 51, + "area": 137, + "areaCode": "0731", + "zipCode": "410004", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686262344, + "parentId": 653116686258245, + "name": "开福区", + "shortName": null, + "level": 3, + "code": "430105", + "pinyin": "KaiFuQu", + "pinyinFirst": "KFQ", + "capital": "芙蓉北路街道", + "population": 52, + "area": 189, + "areaCode": "0731", + "zipCode": "410008", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686262345, + "parentId": 653116686258245, + "name": "雨花区", + "shortName": null, + "level": 3, + "code": "430111", + "pinyin": "YuHuaQu", + "pinyinFirst": "YHQ", + "capital": "圭塘街道", + "population": 74, + "area": 292, + "areaCode": "0731", + "zipCode": "410011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686262346, + "parentId": 653116686258245, + "name": "望城区", + "shortName": null, + "level": 3, + "code": "430112", + "pinyin": "WangChengQu", + "pinyinFirst": "WCQ", + "capital": "高塘岭街道", + "population": 60, + "area": 951, + "areaCode": "0731", + "zipCode": "410200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686262347, + "parentId": 653116686258245, + "name": "浏阳市", + "shortName": null, + "level": 3, + "code": "430181", + "pinyin": "LiuYangShi", + "pinyinFirst": "LYS", + "capital": "关口街道", + "population": 149, + "area": 4997, + "areaCode": "0731", + "zipCode": "410300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686262348, + "parentId": 653116686258245, + "name": "宁乡市", + "shortName": null, + "level": 3, + "code": "430182", + "pinyin": "NingXiangShi", + "pinyinFirst": "NXS", + "capital": "玉潭街道", + "population": 143, + "area": 2912, + "areaCode": "0731", + "zipCode": "410600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686262349, + "parentId": 653116686258245, + "name": "长沙县", + "shortName": null, + "level": 3, + "code": "430121", + "pinyin": "ChangShaXian", + "pinyinFirst": "CSX", + "capital": "星沙街道", + "population": 82, + "area": 1756, + "areaCode": "0731", + "zipCode": "410100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686344261, + "parentId": 653116684709957, + "name": "株洲市", + "shortName": null, + "level": 2, + "code": "430200", + "pinyin": "ZhuZhouShi", + "pinyinFirst": "ZZS", + "capital": "天元区", + "population": 402, + "area": 11248, + "areaCode": "0731", + "zipCode": "412000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116686344262, + "parentId": 653116686344261, + "name": "天元区", + "shortName": null, + "level": 3, + "code": "430211", + "pinyin": "TianYuanQu", + "pinyinFirst": "TYQ", + "capital": "嵩山路街道", + "population": 29, + "area": 328, + "areaCode": "0731", + "zipCode": "412007", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686344263, + "parentId": 653116686344261, + "name": "荷塘区", + "shortName": null, + "level": 3, + "code": "430202", + "pinyin": "HeTangQu", + "pinyinFirst": "HTQ", + "capital": "桂花街道", + "population": 21, + "area": 152, + "areaCode": "0731", + "zipCode": "412000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686344264, + "parentId": 653116686344261, + "name": "芦淞区", + "shortName": null, + "level": 3, + "code": "430203", + "pinyin": "LuSongQu", + "pinyinFirst": "LSQ", + "capital": "枫溪街道", + "population": 23, + "area": 217, + "areaCode": "0731", + "zipCode": "412000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686344265, + "parentId": 653116686344261, + "name": "石峰区", + "shortName": null, + "level": 3, + "code": "430204", + "pinyin": "ShiFengQu", + "pinyinFirst": "SFQ", + "capital": "响石岭街道", + "population": 24, + "area": 166, + "areaCode": "0731", + "zipCode": "412005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686344266, + "parentId": 653116686344261, + "name": "渌口区", + "shortName": null, + "level": 3, + "code": "430212", + "pinyin": "LuKouQu", + "pinyinFirst": "LKQ", + "capital": "渌口镇", + "population": 35, + "area": 1054, + "areaCode": "0731", + "zipCode": "412100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686344267, + "parentId": 653116686344261, + "name": "醴陵市", + "shortName": null, + "level": 3, + "code": "430281", + "pinyin": "LiLingShi", + "pinyinFirst": "LLS", + "capital": "仙岳山街道", + "population": 105, + "area": 2156, + "areaCode": "0731", + "zipCode": "412200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686344268, + "parentId": 653116686344261, + "name": "攸县", + "shortName": null, + "level": 3, + "code": "430223", + "pinyin": "YouXian", + "pinyinFirst": "YX", + "capital": "联星街道", + "population": 81, + "area": 2649, + "areaCode": "0731", + "zipCode": "412300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686344269, + "parentId": 653116686344261, + "name": "茶陵县", + "shortName": null, + "level": 3, + "code": "430224", + "pinyin": "ChaLingXian", + "pinyinFirst": "CLX", + "capital": "云阳街道", + "population": 64, + "area": 2496, + "areaCode": "0731", + "zipCode": "412400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686344270, + "parentId": 653116686344261, + "name": "炎陵县", + "shortName": null, + "level": 3, + "code": "430225", + "pinyin": "YanLingXian", + "pinyinFirst": "YLX", + "capital": "霞阳镇", + "population": 19, + "area": 2030, + "areaCode": "0731", + "zipCode": "412500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686454853, + "parentId": 653116684709957, + "name": "湘潭市", + "shortName": null, + "level": 2, + "code": "430300", + "pinyin": "XiangTanShi", + "pinyinFirst": "XTS", + "capital": "岳塘区", + "population": 289, + "area": 5005, + "areaCode": "0731", + "zipCode": "411100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116686458949, + "parentId": 653116686454853, + "name": "岳塘区", + "shortName": null, + "level": 3, + "code": "430304", + "pinyin": "YueTangQu", + "pinyinFirst": "YTQ", + "capital": "五里堆街道", + "population": 35, + "area": 206, + "areaCode": "0731", + "zipCode": "411101", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686458950, + "parentId": 653116686454853, + "name": "雨湖区", + "shortName": null, + "level": 3, + "code": "430302", + "pinyin": "YuHuQu", + "pinyinFirst": "YHQ", + "capital": "雨湖路街道", + "population": 50, + "area": 446, + "areaCode": "0731", + "zipCode": "411100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686458951, + "parentId": 653116686454853, + "name": "湘乡市", + "shortName": null, + "level": 3, + "code": "430381", + "pinyin": "XiangXiangShi", + "pinyinFirst": "XXS", + "capital": "望春门街道", + "population": 93, + "area": 1966, + "areaCode": "0731", + "zipCode": "411400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686458952, + "parentId": 653116686454853, + "name": "韶山市", + "shortName": null, + "level": 3, + "code": "430382", + "pinyin": "ShaoShanShi", + "pinyinFirst": "SSS", + "capital": "清溪镇", + "population": 12, + "area": 247, + "areaCode": "0731", + "zipCode": "411300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686458953, + "parentId": 653116686454853, + "name": "湘潭县", + "shortName": null, + "level": 3, + "code": "430321", + "pinyin": "XiangTanXian", + "pinyinFirst": "XTX", + "capital": "易俗河镇", + "population": 98, + "area": 2140, + "areaCode": "0731", + "zipCode": "411200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686585925, + "parentId": 653116684709957, + "name": "衡阳市", + "shortName": null, + "level": 2, + "code": "430400", + "pinyin": "HengYangShi", + "pinyinFirst": "HYS", + "capital": "蒸湘区", + "population": 797, + "area": 15300, + "areaCode": "0734", + "zipCode": "421000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116686590021, + "parentId": 653116686585925, + "name": "蒸湘区", + "shortName": null, + "level": 3, + "code": "430408", + "pinyin": "ZhengXiangQu", + "pinyinFirst": "ZXQ", + "capital": "蒸湘街道", + "population": 29, + "area": 112, + "areaCode": "0734", + "zipCode": "421001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686590022, + "parentId": 653116686585925, + "name": "珠晖区", + "shortName": null, + "level": 3, + "code": "430405", + "pinyin": "ZhuHuiQu", + "pinyinFirst": "ZHQ", + "capital": "广东路街道", + "population": 28, + "area": 219, + "areaCode": "0734", + "zipCode": "421002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686590023, + "parentId": 653116686585925, + "name": "雁峰区", + "shortName": null, + "level": 3, + "code": "430406", + "pinyin": "YanFengQu", + "pinyinFirst": "YFQ", + "capital": "雁峰街道", + "population": 19, + "area": 83, + "areaCode": "0734", + "zipCode": "421001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686590024, + "parentId": 653116686585925, + "name": "石鼓区", + "shortName": null, + "level": 3, + "code": "430407", + "pinyin": "ShiGuQu", + "pinyinFirst": "SGQ", + "capital": "黄沙湾街道", + "population": 20, + "area": 105, + "areaCode": "0734", + "zipCode": "421005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686590025, + "parentId": 653116686585925, + "name": "南岳区", + "shortName": null, + "level": 3, + "code": "430412", + "pinyin": "NanYueQu", + "pinyinFirst": "NYQ", + "capital": "祝融街道", + "population": 6, + "area": 179, + "areaCode": "0734", + "zipCode": "421900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686590026, + "parentId": 653116686585925, + "name": "耒阳市", + "shortName": null, + "level": 3, + "code": "430481", + "pinyin": "LeiYangShi", + "pinyinFirst": "LYS", + "capital": "蔡子池街道", + "population": 142, + "area": 2648, + "areaCode": "0734", + "zipCode": "421800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686590027, + "parentId": 653116686585925, + "name": "常宁市", + "shortName": null, + "level": 3, + "code": "430482", + "pinyin": "ChangNingShi", + "pinyinFirst": "CNS", + "capital": "宜阳街道", + "population": 96, + "area": 2048, + "areaCode": "0734", + "zipCode": "421500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686590028, + "parentId": 653116686585925, + "name": "衡阳县", + "shortName": null, + "level": 3, + "code": "430421", + "pinyin": "HengYangXian", + "pinyinFirst": "HYX", + "capital": "西渡镇", + "population": 124, + "area": 2559, + "areaCode": "0734", + "zipCode": "421200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686590029, + "parentId": 653116686585925, + "name": "衡南县", + "shortName": null, + "level": 3, + "code": "430422", + "pinyin": "HengNanXian", + "pinyinFirst": "HNX", + "capital": "云集街道", + "population": 109, + "area": 2614, + "areaCode": "0734", + "zipCode": "421100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686590030, + "parentId": 653116686585925, + "name": "衡山县", + "shortName": null, + "level": 3, + "code": "430423", + "pinyin": "HengShanXian", + "pinyinFirst": "HSX", + "capital": "开云镇", + "population": 44, + "area": 935, + "areaCode": "0734", + "zipCode": "421300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686590031, + "parentId": 653116686585925, + "name": "衡东县", + "shortName": null, + "level": 3, + "code": "430424", + "pinyin": "HengDongXian", + "pinyinFirst": "HDX", + "capital": "洣水镇", + "population": 77, + "area": 1927, + "areaCode": "0734", + "zipCode": "421400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686590032, + "parentId": 653116686585925, + "name": "祁东县", + "shortName": null, + "level": 3, + "code": "430426", + "pinyin": "QiDongXian", + "pinyinFirst": "QDX", + "capital": "玉合街道", + "population": 105, + "area": 1871, + "areaCode": "0734", + "zipCode": "421600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686749765, + "parentId": 653116684709957, + "name": "邵阳市", + "shortName": null, + "level": 2, + "code": "430500", + "pinyin": "ShaoYangShi", + "pinyinFirst": "SYS", + "capital": "大祥区", + "population": 826, + "area": 20822, + "areaCode": "0739", + "zipCode": "422000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116686753861, + "parentId": 653116686749765, + "name": "大祥区", + "shortName": null, + "level": 3, + "code": "430503", + "pinyin": "DaXiangQu", + "pinyinFirst": "DXQ", + "capital": "城南街道", + "population": 32, + "area": 215, + "areaCode": "0739", + "zipCode": "422000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686753862, + "parentId": 653116686749765, + "name": "双清区", + "shortName": null, + "level": 3, + "code": "430502", + "pinyin": "ShuangQingQu", + "pinyinFirst": "SQQ", + "capital": "东风路街道", + "population": 27, + "area": 135, + "areaCode": "0739", + "zipCode": "422001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686753863, + "parentId": 653116686749765, + "name": "北塔区", + "shortName": null, + "level": 3, + "code": "430511", + "pinyin": "BeiTaQu", + "pinyinFirst": "BTQ", + "capital": "状元洲街道", + "population": 10, + "area": 84, + "areaCode": "0739", + "zipCode": "422007", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686753864, + "parentId": 653116686749765, + "name": "武冈市", + "shortName": null, + "level": 3, + "code": "430581", + "pinyin": "WuGangShi", + "pinyinFirst": "WGS", + "capital": "迎春亭街道", + "population": 83, + "area": 1539, + "areaCode": "0739", + "zipCode": "422400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686753865, + "parentId": 653116686749765, + "name": "邵东市", + "shortName": null, + "level": 3, + "code": "430582", + "pinyin": "ShaoDongShi", + "pinyinFirst": "SDS", + "capital": "大禾塘街道", + "population": 134, + "area": 1778, + "areaCode": "0739", + "zipCode": "422800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686753866, + "parentId": 653116686749765, + "name": "新邵县", + "shortName": null, + "level": 3, + "code": "430522", + "pinyin": "XinShaoXian", + "pinyinFirst": "XSX", + "capital": "酿溪镇", + "population": 82, + "area": 1762, + "areaCode": "0739", + "zipCode": "422900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686753867, + "parentId": 653116686749765, + "name": "邵阳县", + "shortName": null, + "level": 3, + "code": "430523", + "pinyin": "ShaoYangXian", + "pinyinFirst": "SYX", + "capital": "塘渡口镇", + "population": 107, + "area": 2001, + "areaCode": "0739", + "zipCode": "422100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686753868, + "parentId": 653116686749765, + "name": "隆回县", + "shortName": null, + "level": 3, + "code": "430524", + "pinyin": "LongHuiXian", + "pinyinFirst": "LHX", + "capital": "花门街道", + "population": 130, + "area": 2868, + "areaCode": "0739", + "zipCode": "422200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686753869, + "parentId": 653116686749765, + "name": "洞口县", + "shortName": null, + "level": 3, + "code": "430525", + "pinyin": "DongKouXian", + "pinyinFirst": "DKX", + "capital": "文昌街道", + "population": 90, + "area": 2179, + "areaCode": "0739", + "zipCode": "422300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686753870, + "parentId": 653116686749765, + "name": "绥宁县", + "shortName": null, + "level": 3, + "code": "430527", + "pinyin": "SuiNingXian", + "pinyinFirst": "SNX", + "capital": "长铺镇", + "population": 38, + "area": 2917, + "areaCode": "0739", + "zipCode": "422600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686753871, + "parentId": 653116686749765, + "name": "新宁县", + "shortName": null, + "level": 3, + "code": "430528", + "pinyin": "XinNingXian", + "pinyinFirst": "XNX", + "capital": "金石镇", + "population": 65, + "area": 2756, + "areaCode": "0739", + "zipCode": "422700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686753872, + "parentId": 653116686749765, + "name": "城步苗族自治县", + "shortName": null, + "level": 3, + "code": "430529", + "pinyin": "ChengBuMiaoZuZiZhiXian", + "pinyinFirst": "CBMZZZX", + "capital": "儒林镇", + "population": 28, + "area": 2588, + "areaCode": "0739", + "zipCode": "422500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686970949, + "parentId": 653116684709957, + "name": "岳阳市", + "shortName": null, + "level": 2, + "code": "430600", + "pinyin": "YueYangShi", + "pinyinFirst": "YYS", + "capital": "岳阳楼区", + "population": 570, + "area": 14858, + "areaCode": "0730", + "zipCode": "414000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116686975045, + "parentId": 653116686970949, + "name": "岳阳楼区", + "shortName": null, + "level": 3, + "code": "430602", + "pinyin": "YueYangLouQu", + "pinyinFirst": "YYLQ", + "capital": "五里牌街道", + "population": 69, + "area": 408, + "areaCode": "0730", + "zipCode": "414000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686975046, + "parentId": 653116686970949, + "name": "云溪区", + "shortName": null, + "level": 3, + "code": "430603", + "pinyin": "YunXiQu", + "pinyinFirst": "YXQ", + "capital": "云溪街道", + "population": 17, + "area": 378, + "areaCode": "0730", + "zipCode": "414009", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686975047, + "parentId": 653116686970949, + "name": "君山区", + "shortName": null, + "level": 3, + "code": "430611", + "pinyin": "JunShanQu", + "pinyinFirst": "JSQ", + "capital": "柳林洲街道", + "population": 25, + "area": 627, + "areaCode": "0730", + "zipCode": "414005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686975048, + "parentId": 653116686970949, + "name": "汨罗市", + "shortName": null, + "level": 3, + "code": "430681", + "pinyin": "MiLuoShi", + "pinyinFirst": "MLS", + "capital": "归义镇", + "population": 76, + "area": 1670, + "areaCode": "0730", + "zipCode": "414400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686975049, + "parentId": 653116686970949, + "name": "临湘市", + "shortName": null, + "level": 3, + "code": "430682", + "pinyin": "LinXiangShi", + "pinyinFirst": "LXS", + "capital": "长安街道", + "population": 54, + "area": 1719, + "areaCode": "0730", + "zipCode": "414300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686975050, + "parentId": 653116686970949, + "name": "岳阳县", + "shortName": null, + "level": 3, + "code": "430621", + "pinyin": "YueYangXian", + "pinyinFirst": "YYX", + "capital": "荣家湾镇", + "population": 73, + "area": 2810, + "areaCode": "0730", + "zipCode": "414100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686975051, + "parentId": 653116686970949, + "name": "华容县", + "shortName": null, + "level": 3, + "code": "430623", + "pinyin": "HuaRongXian", + "pinyinFirst": "HRX", + "capital": "章华镇", + "population": 72, + "area": 1591, + "areaCode": "0730", + "zipCode": "414200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686975052, + "parentId": 653116686970949, + "name": "湘阴县", + "shortName": null, + "level": 3, + "code": "430624", + "pinyin": "XiangYinXian", + "pinyinFirst": "XYX", + "capital": "文星街道", + "population": 72, + "area": 1541, + "areaCode": "0730", + "zipCode": "414600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116686975053, + "parentId": 653116686970949, + "name": "平江县", + "shortName": null, + "level": 3, + "code": "430626", + "pinyin": "PingJiangXian", + "pinyinFirst": "PJX", + "capital": "汉昌街道", + "population": 112, + "area": 4114, + "areaCode": "0730", + "zipCode": "414500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687204421, + "parentId": 653116684709957, + "name": "常德市", + "shortName": null, + "level": 2, + "code": "430700", + "pinyin": "ChangDeShi", + "pinyinFirst": "CDS", + "capital": "武陵区", + "population": 604, + "area": 18176, + "areaCode": "0736", + "zipCode": "415000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116687208517, + "parentId": 653116687204421, + "name": "武陵区", + "shortName": null, + "level": 3, + "code": "430702", + "pinyin": "WuLingQu", + "pinyinFirst": "WLQ", + "capital": "南坪街道", + "population": 62, + "area": 412, + "areaCode": "0736", + "zipCode": "415000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687208518, + "parentId": 653116687204421, + "name": "鼎城区", + "shortName": null, + "level": 3, + "code": "430703", + "pinyin": "DingChengQu", + "pinyinFirst": "DCQ", + "capital": "玉霞街道", + "population": 79, + "area": 2340, + "areaCode": "0736", + "zipCode": "415100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687208519, + "parentId": 653116687204421, + "name": "津市市", + "shortName": null, + "level": 3, + "code": "430781", + "pinyin": "JinShiShi", + "pinyinFirst": "JSS", + "capital": "襄阳街街道", + "population": 23, + "area": 556, + "areaCode": "0736", + "zipCode": "415400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687208520, + "parentId": 653116687204421, + "name": "安乡县", + "shortName": null, + "level": 3, + "code": "430721", + "pinyin": "AnXiangXian", + "pinyinFirst": "AXX", + "capital": "深柳镇", + "population": 54, + "area": 1086, + "areaCode": "0736", + "zipCode": "415600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687208521, + "parentId": 653116687204421, + "name": "汉寿县", + "shortName": null, + "level": 3, + "code": "430722", + "pinyin": "HanShouXian", + "pinyinFirst": "HSX", + "capital": "龙阳街道", + "population": 87, + "area": 2091, + "areaCode": "0736", + "zipCode": "415900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687208522, + "parentId": 653116687204421, + "name": "澧县", + "shortName": null, + "level": 3, + "code": "430723", + "pinyin": "LiXian", + "pinyinFirst": "LX", + "capital": "澧阳街道", + "population": 91, + "area": 2075, + "areaCode": "0736", + "zipCode": "415500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687208523, + "parentId": 653116687204421, + "name": "临澧县", + "shortName": null, + "level": 3, + "code": "430724", + "pinyin": "LinLiXian", + "pinyinFirst": "LLX", + "capital": "安福街道", + "population": 45, + "area": 1204, + "areaCode": "0736", + "zipCode": "415200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687208524, + "parentId": 653116687204421, + "name": "桃源县", + "shortName": null, + "level": 3, + "code": "430725", + "pinyin": "TaoYuanXian", + "pinyinFirst": "TYX", + "capital": "漳江街道", + "population": 97, + "area": 4442, + "areaCode": "0736", + "zipCode": "415700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687208525, + "parentId": 653116687204421, + "name": "石门县", + "shortName": null, + "level": 3, + "code": "430726", + "pinyin": "ShiMenXian", + "pinyinFirst": "SMX", + "capital": "楚江街道", + "population": 67, + "area": 3970, + "areaCode": "0736", + "zipCode": "415300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687388741, + "parentId": 653116684709957, + "name": "张家界市", + "shortName": null, + "level": 2, + "code": "430800", + "pinyin": "ZhangJiaJieShi", + "pinyinFirst": "ZJJS", + "capital": "永定区", + "population": 169, + "area": 9534, + "areaCode": "0744", + "zipCode": "427000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116687392837, + "parentId": 653116687388741, + "name": "永定区", + "shortName": null, + "level": 3, + "code": "430802", + "pinyin": "YongDingQu", + "pinyinFirst": "YDQ", + "capital": "西溪坪街道", + "population": 48, + "area": 2169, + "areaCode": "0744", + "zipCode": "427000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687392838, + "parentId": 653116687388741, + "name": "武陵源区", + "shortName": null, + "level": 3, + "code": "430811", + "pinyin": "WuLingYuanQu", + "pinyinFirst": "WLYQ", + "capital": "军地坪街道", + "population": 6, + "area": 398, + "areaCode": "0744", + "zipCode": "427400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687392839, + "parentId": 653116687388741, + "name": "慈利县", + "shortName": null, + "level": 3, + "code": "430821", + "pinyin": "CiLiXian", + "pinyinFirst": "CLX", + "capital": "零阳镇", + "population": 69, + "area": 3492, + "areaCode": "0744", + "zipCode": "427200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687392840, + "parentId": 653116687388741, + "name": "桑植县", + "shortName": null, + "level": 3, + "code": "430822", + "pinyin": "SangZhiXian", + "pinyinFirst": "SZX", + "capital": "澧源镇", + "population": 47, + "area": 3475, + "areaCode": "0744", + "zipCode": "427100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687577157, + "parentId": 653116684709957, + "name": "益阳市", + "shortName": null, + "level": 2, + "code": "430900", + "pinyin": "YiYangShi", + "pinyinFirst": "YYS", + "capital": "赫山区", + "population": 473, + "area": 12320, + "areaCode": "0737", + "zipCode": "413000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116687581253, + "parentId": 653116687577157, + "name": "赫山区", + "shortName": null, + "level": 3, + "code": "430903", + "pinyin": "HeShanQu", + "pinyinFirst": "HSQ", + "capital": "赫山街道", + "population": 93, + "area": 1279, + "areaCode": "0737", + "zipCode": "413002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687581254, + "parentId": 653116687577157, + "name": "资阳区", + "shortName": null, + "level": 3, + "code": "430902", + "pinyin": "ZiYangQu", + "pinyinFirst": "ZYQ", + "capital": "大码头街道", + "population": 42, + "area": 572, + "areaCode": "0737", + "zipCode": "413001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687581255, + "parentId": 653116687577157, + "name": "沅江市", + "shortName": null, + "level": 3, + "code": "430981", + "pinyin": "YuanJiangShi", + "pinyinFirst": "YJS", + "capital": "琼湖街道", + "population": 73, + "area": 2129, + "areaCode": "0737", + "zipCode": "413100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687581256, + "parentId": 653116687577157, + "name": "南县", + "shortName": null, + "level": 3, + "code": "430921", + "pinyin": "NanXian", + "pinyinFirst": "NX", + "capital": "南洲镇", + "population": 76, + "area": 1327, + "areaCode": "0737", + "zipCode": "413200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687581257, + "parentId": 653116687577157, + "name": "桃江县", + "shortName": null, + "level": 3, + "code": "430922", + "pinyin": "TaoJiangXian", + "pinyinFirst": "TJX", + "capital": "桃花江镇", + "population": 88, + "area": 2068, + "areaCode": "0737", + "zipCode": "413400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687581258, + "parentId": 653116687577157, + "name": "安化县", + "shortName": null, + "level": 3, + "code": "430923", + "pinyin": "AnHuaXian", + "pinyinFirst": "AHX", + "capital": "东坪镇", + "population": 101, + "area": 4945, + "areaCode": "0737", + "zipCode": "413500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687765573, + "parentId": 653116684709957, + "name": "郴州市", + "shortName": null, + "level": 2, + "code": "431000", + "pinyin": "ChenZhouShi", + "pinyinFirst": "CZS", + "capital": "北湖区", + "population": 534, + "area": 19342, + "areaCode": "0735", + "zipCode": "423000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116687769669, + "parentId": 653116687765573, + "name": "北湖区", + "shortName": null, + "level": 3, + "code": "431002", + "pinyin": "BeiHuQu", + "pinyinFirst": "BHQ", + "capital": "骆仙街道", + "population": 41, + "area": 819, + "areaCode": "0735", + "zipCode": "423000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687769670, + "parentId": 653116687765573, + "name": "苏仙区", + "shortName": null, + "level": 3, + "code": "431003", + "pinyin": "SuXianQu", + "pinyinFirst": "SXQ", + "capital": "苏仙岭街道", + "population": 39, + "area": 1340, + "areaCode": "0735", + "zipCode": "423000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687769671, + "parentId": 653116687765573, + "name": "资兴市", + "shortName": null, + "level": 3, + "code": "431081", + "pinyin": "ZiXingShi", + "pinyinFirst": "ZXS", + "capital": "唐洞街道", + "population": 37, + "area": 2730, + "areaCode": "0735", + "zipCode": "423400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687769672, + "parentId": 653116687765573, + "name": "桂阳县", + "shortName": null, + "level": 3, + "code": "431021", + "pinyin": "GuiYangXian", + "pinyinFirst": "GYX", + "capital": "龙潭街道", + "population": 91, + "area": 2958, + "areaCode": "0735", + "zipCode": "424400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687769673, + "parentId": 653116687765573, + "name": "宜章县", + "shortName": null, + "level": 3, + "code": "431022", + "pinyin": "YiZhangXian", + "pinyinFirst": "YZX", + "capital": "玉溪镇", + "population": 65, + "area": 2118, + "areaCode": "0735", + "zipCode": "424200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687769674, + "parentId": 653116687765573, + "name": "永兴县", + "shortName": null, + "level": 3, + "code": "431023", + "pinyin": "YongXingXian", + "pinyinFirst": "YXX", + "capital": "便江街道", + "population": 70, + "area": 1980, + "areaCode": "0735", + "zipCode": "423300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687769675, + "parentId": 653116687765573, + "name": "嘉禾县", + "shortName": null, + "level": 3, + "code": "431024", + "pinyin": "JiaHeXian", + "pinyinFirst": "JHX", + "capital": "珠泉镇", + "population": 44, + "area": 699, + "areaCode": "0735", + "zipCode": "424500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687769676, + "parentId": 653116687765573, + "name": "临武县", + "shortName": null, + "level": 3, + "code": "431025", + "pinyin": "LinWuXian", + "pinyinFirst": "LWX", + "capital": "舜峰镇", + "population": 38, + "area": 1383, + "areaCode": "0735", + "zipCode": "424300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687769677, + "parentId": 653116687765573, + "name": "汝城县", + "shortName": null, + "level": 3, + "code": "431026", + "pinyin": "RuChengXian", + "pinyinFirst": "RCX", + "capital": "卢阳镇", + "population": 42, + "area": 2401, + "areaCode": "0735", + "zipCode": "424100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687769678, + "parentId": 653116687765573, + "name": "桂东县", + "shortName": null, + "level": 3, + "code": "431027", + "pinyin": "GuiDongXian", + "pinyinFirst": "GDX", + "capital": "沤江镇", + "population": 19, + "area": 1452, + "areaCode": "0735", + "zipCode": "423500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687769679, + "parentId": 653116687765573, + "name": "安仁县", + "shortName": null, + "level": 3, + "code": "431028", + "pinyin": "AnRenXian", + "pinyinFirst": "ARX", + "capital": "永乐江镇", + "population": 46, + "area": 1462, + "areaCode": "0735", + "zipCode": "423600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687970373, + "parentId": 653116684709957, + "name": "永州市", + "shortName": null, + "level": 2, + "code": "431100", + "pinyin": "YongZhouShi", + "pinyinFirst": "YZS", + "capital": "冷水滩区", + "population": 644, + "area": 22259, + "areaCode": "0746", + "zipCode": "425000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116687970374, + "parentId": 653116687970373, + "name": "冷水滩区", + "shortName": null, + "level": 3, + "code": "431103", + "pinyin": "LengShuiTanQu", + "pinyinFirst": "LSTQ", + "capital": "梧桐街道", + "population": 56, + "area": 1217, + "areaCode": "0746", + "zipCode": "425100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687974469, + "parentId": 653116687970373, + "name": "零陵区", + "shortName": null, + "level": 3, + "code": "431102", + "pinyin": "LingLingQu", + "pinyinFirst": "LLQ", + "capital": "徐家井街道", + "population": 62, + "area": 1964, + "areaCode": "0746", + "zipCode": "425100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687974470, + "parentId": 653116687970373, + "name": "祁阳市", + "shortName": null, + "level": 3, + "code": "431181", + "pinyin": "QiYangShi", + "pinyinFirst": "QYS", + "capital": "长虹街道", + "population": 105, + "area": 2538, + "areaCode": "0746", + "zipCode": "426100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687974471, + "parentId": 653116687970373, + "name": "东安县", + "shortName": null, + "level": 3, + "code": "431122", + "pinyin": "DongAnXian", + "pinyinFirst": "DAX", + "capital": "白牙市镇", + "population": 64, + "area": 2204, + "areaCode": "0746", + "zipCode": "425900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687974472, + "parentId": 653116687970373, + "name": "双牌县", + "shortName": null, + "level": 3, + "code": "431123", + "pinyin": "ShuangPaiXian", + "pinyinFirst": "SPX", + "capital": "泷泊镇", + "population": 18, + "area": 1726, + "areaCode": "0746", + "zipCode": "425200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687974473, + "parentId": 653116687970373, + "name": "道县", + "shortName": null, + "level": 3, + "code": "431124", + "pinyin": "DaoXian", + "pinyinFirst": "DX", + "capital": "濂溪街道", + "population": 80, + "area": 2448, + "areaCode": "0746", + "zipCode": "425300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687974474, + "parentId": 653116687970373, + "name": "江永县", + "shortName": null, + "level": 3, + "code": "431125", + "pinyin": "JiangYongXian", + "pinyinFirst": "JYX", + "capital": "潇浦镇", + "population": 29, + "area": 1629, + "areaCode": "0746", + "zipCode": "425400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687974475, + "parentId": 653116687970373, + "name": "宁远县", + "shortName": null, + "level": 3, + "code": "431126", + "pinyin": "NingYuanXian", + "pinyinFirst": "NYX", + "capital": "舜陵街道", + "population": 89, + "area": 2501, + "areaCode": "0746", + "zipCode": "425600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687974476, + "parentId": 653116687970373, + "name": "蓝山县", + "shortName": null, + "level": 3, + "code": "431127", + "pinyin": "LanShanXian", + "pinyinFirst": "LSX", + "capital": "塔峰镇", + "population": 42, + "area": 1798, + "areaCode": "0746", + "zipCode": "425800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687974477, + "parentId": 653116687970373, + "name": "新田县", + "shortName": null, + "level": 3, + "code": "431128", + "pinyin": "XinTianXian", + "pinyinFirst": "XTX", + "capital": "龙泉镇", + "population": 45, + "area": 1000, + "areaCode": "0746", + "zipCode": "425700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116687974478, + "parentId": 653116687970373, + "name": "江华瑶族自治县", + "shortName": null, + "level": 3, + "code": "431129", + "pinyin": "JiangHuaYaoZuZiZhiXian", + "pinyinFirst": "JHYZZZX", + "capital": "沱江镇", + "population": 54, + "area": 3234, + "areaCode": "0746", + "zipCode": "425500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688191557, + "parentId": 653116684709957, + "name": "怀化市", + "shortName": null, + "level": 2, + "code": "431200", + "pinyin": "HuaiHuaShi", + "pinyinFirst": "HHS", + "capital": "鹤城区", + "population": 524, + "area": 27573, + "areaCode": "0745", + "zipCode": "418000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116688195653, + "parentId": 653116688191557, + "name": "鹤城区", + "shortName": null, + "level": 3, + "code": "431202", + "pinyin": "HeChengQu", + "pinyinFirst": "HCQ", + "capital": "红星街道", + "population": 40, + "area": 673, + "areaCode": "0745", + "zipCode": "418000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688195654, + "parentId": 653116688191557, + "name": "洪江市", + "shortName": null, + "level": 3, + "code": "431281", + "pinyin": "HongJiangShi", + "pinyinFirst": "HJS", + "capital": "黔城镇", + "population": 50, + "area": 2283, + "areaCode": "0745", + "zipCode": "418100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688195655, + "parentId": 653116688191557, + "name": "中方县", + "shortName": null, + "level": 3, + "code": "431221", + "pinyin": "ZhongFangXian", + "pinyinFirst": "ZFX", + "capital": "中方镇", + "population": 29, + "area": 1515, + "areaCode": "0745", + "zipCode": "418005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688195656, + "parentId": 653116688191557, + "name": "沅陵县", + "shortName": null, + "level": 3, + "code": "431222", + "pinyin": "YuanLingXian", + "pinyinFirst": "YLX", + "capital": "沅陵镇", + "population": 64, + "area": 5833, + "areaCode": "0745", + "zipCode": "419600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688195657, + "parentId": 653116688191557, + "name": "辰溪县", + "shortName": null, + "level": 3, + "code": "431223", + "pinyin": "ChenXiXian", + "pinyinFirst": "CXX", + "capital": "辰阳镇", + "population": 54, + "area": 1987, + "areaCode": "0745", + "zipCode": "419500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688195658, + "parentId": 653116688191557, + "name": "溆浦县", + "shortName": null, + "level": 3, + "code": "431224", + "pinyin": "XuPuXian", + "pinyinFirst": "XPX", + "capital": "卢峰镇", + "population": 95, + "area": 3429, + "areaCode": "0745", + "zipCode": "419300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688195659, + "parentId": 653116688191557, + "name": "会同县", + "shortName": null, + "level": 3, + "code": "431225", + "pinyin": "HuiTongXian", + "pinyinFirst": "HTX", + "capital": "林城镇", + "population": 37, + "area": 2259, + "areaCode": "0745", + "zipCode": "418300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688195660, + "parentId": 653116688191557, + "name": "麻阳苗族自治县", + "shortName": null, + "level": 3, + "code": "431226", + "pinyin": "MaYangMiaoZuZiZhiXian", + "pinyinFirst": "MYMZZZX", + "capital": "高村镇", + "population": 40, + "area": 1566, + "areaCode": "0745", + "zipCode": "419400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688195661, + "parentId": 653116688191557, + "name": "新晃侗族自治县", + "shortName": null, + "level": 3, + "code": "431227", + "pinyin": "XinHuangDongZuZiZhiXian", + "pinyinFirst": "XHDZZZX", + "capital": "晃州镇", + "population": 26, + "area": 1502, + "areaCode": "0745", + "zipCode": "419200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688195662, + "parentId": 653116688191557, + "name": "芷江侗族自治县", + "shortName": null, + "level": 3, + "code": "431228", + "pinyin": "ZhiJiangDongZuZiZhiXian", + "pinyinFirst": "ZJDZZZX", + "capital": "芷江镇", + "population": 38, + "area": 2095, + "areaCode": "0745", + "zipCode": "419100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688195663, + "parentId": 653116688191557, + "name": "靖州苗族侗族自治县", + "shortName": null, + "level": 3, + "code": "431229", + "pinyin": "JingZhouMiaoZuDongZuZiZhiXian", + "pinyinFirst": "JZMZDZZZX", + "capital": "渠阳镇", + "population": 28, + "area": 2208, + "areaCode": "0745", + "zipCode": "418400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688195664, + "parentId": 653116688191557, + "name": "通道侗族自治县", + "shortName": null, + "level": 3, + "code": "431230", + "pinyin": "TongDaoDongZuZiZhiXian", + "pinyinFirst": "TDDZZZX", + "capital": "双江镇", + "population": 24, + "area": 2223, + "areaCode": "0745", + "zipCode": "418500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688445509, + "parentId": 653116684709957, + "name": "娄底市", + "shortName": null, + "level": 2, + "code": "431300", + "pinyin": "LouDiShi", + "pinyinFirst": "LDS", + "capital": "娄星区", + "population": 455, + "area": 8110, + "areaCode": "0738", + "zipCode": "417000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116688449605, + "parentId": 653116688445509, + "name": "娄星区", + "shortName": null, + "level": 3, + "code": "431302", + "pinyin": "LouXingQu", + "pinyinFirst": "LXQ", + "capital": "长青街道", + "population": 62, + "area": 628, + "areaCode": "0738", + "zipCode": "417000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688449606, + "parentId": 653116688445509, + "name": "冷水江市", + "shortName": null, + "level": 3, + "code": "431381", + "pinyin": "LengShuiJiangShi", + "pinyinFirst": "LSJS", + "capital": "冷水江街道", + "population": 37, + "area": 438, + "areaCode": "0738", + "zipCode": "417500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688449607, + "parentId": 653116688445509, + "name": "涟源市", + "shortName": null, + "level": 3, + "code": "431382", + "pinyin": "LianYuanShi", + "pinyinFirst": "LYS", + "capital": "蓝田街道", + "population": 115, + "area": 1830, + "areaCode": "0738", + "zipCode": "417100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688449608, + "parentId": 653116688445509, + "name": "双峰县", + "shortName": null, + "level": 3, + "code": "431321", + "pinyin": "ShuangFengXian", + "pinyinFirst": "SFX", + "capital": "永丰街道", + "population": 90, + "area": 1593, + "areaCode": "0738", + "zipCode": "417700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688449609, + "parentId": 653116688445509, + "name": "新化县", + "shortName": null, + "level": 3, + "code": "431322", + "pinyin": "XinHuaXian", + "pinyinFirst": "XHX", + "capital": "上梅街道", + "population": 152, + "area": 3620, + "areaCode": "0738", + "zipCode": "417600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688691269, + "parentId": 653116684709957, + "name": "湘西土家族苗族自治州", + "shortName": null, + "level": 2, + "code": "433100", + "pinyin": "XiangXiTuJiaZuMiaoZuZiZhiZhou", + "pinyinFirst": "XXTJZMZZZZ", + "capital": "吉首市", + "population": 295, + "area": 15470, + "areaCode": "0743", + "zipCode": "416000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116688695365, + "parentId": 653116688691269, + "name": "吉首市", + "shortName": null, + "level": 3, + "code": "433101", + "pinyin": "JiShouShi", + "pinyinFirst": "JSS", + "capital": "乾州街道", + "population": 31, + "area": 1078, + "areaCode": "0743", + "zipCode": "416000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688695366, + "parentId": 653116688691269, + "name": "泸溪县", + "shortName": null, + "level": 3, + "code": "433122", + "pinyin": "LuXiXian", + "pinyinFirst": "LXX", + "capital": "武溪镇", + "population": 31, + "area": 1566, + "areaCode": "0743", + "zipCode": "416100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688695367, + "parentId": 653116688691269, + "name": "凤凰县", + "shortName": null, + "level": 3, + "code": "433123", + "pinyin": "FengHuangXian", + "pinyinFirst": "FHX", + "capital": "沱江镇", + "population": 42, + "area": 1734, + "areaCode": "0743", + "zipCode": "416200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688695368, + "parentId": 653116688691269, + "name": "花垣县", + "shortName": null, + "level": 3, + "code": "433124", + "pinyin": "HuaYuanXian", + "pinyinFirst": "HYX", + "capital": "花垣镇", + "population": 31, + "area": 1109, + "areaCode": "0743", + "zipCode": "416400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688695369, + "parentId": 653116688691269, + "name": "保靖县", + "shortName": null, + "level": 3, + "code": "433125", + "pinyin": "BaoJingXian", + "pinyinFirst": "BJX", + "capital": "迁陵镇", + "population": 30, + "area": 1755, + "areaCode": "0743", + "zipCode": "416500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688695370, + "parentId": 653116688691269, + "name": "古丈县", + "shortName": null, + "level": 3, + "code": "433126", + "pinyin": "GuZhangXian", + "pinyinFirst": "GZX", + "capital": "古阳镇", + "population": 14, + "area": 1286, + "areaCode": "0743", + "zipCode": "416300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688695371, + "parentId": 653116688691269, + "name": "永顺县", + "shortName": null, + "level": 3, + "code": "433127", + "pinyin": "YongShunXian", + "pinyinFirst": "YSX", + "capital": "灵溪镇", + "population": 54, + "area": 3812, + "areaCode": "0743", + "zipCode": "416700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688695372, + "parentId": 653116688691269, + "name": "龙山县", + "shortName": null, + "level": 3, + "code": "433130", + "pinyin": "LongShanXian", + "pinyinFirst": "LSX", + "capital": "民安街道", + "population": 60, + "area": 3130, + "areaCode": "0743", + "zipCode": "416800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:37", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:11" + }, + { + "id": 653116688965701, + "parentId": 0, + "name": "广东省", + "shortName": "粤", + "level": 1, + "code": "440000", + "pinyin": "GuangDongSheng", + "pinyinFirst": "GDS", + "capital": null, + "population": null, + "area": null, + "areaCode": "", + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116690411589, + "parentId": 653116688965701, + "name": "广州市", + "shortName": null, + "level": 2, + "code": "440100", + "pinyin": "GuangZhouShi", + "pinyinFirst": "GZS", + "capital": "越秀区", + "population": 954, + "area": 7249, + "areaCode": "020", + "zipCode": "510000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116690411590, + "parentId": 653116690411589, + "name": "越秀区", + "shortName": null, + "level": 3, + "code": "440104", + "pinyin": "YueXiuQu", + "pinyinFirst": "YXQ", + "capital": "北京街道", + "population": 117, + "area": 34, + "areaCode": "020", + "zipCode": "510030", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690411591, + "parentId": 653116690411589, + "name": "荔湾区", + "shortName": null, + "level": 3, + "code": "440103", + "pinyin": "LiWanQu", + "pinyinFirst": "LWQ", + "capital": "石围塘街道", + "population": 76, + "area": 63, + "areaCode": "020", + "zipCode": "510360", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690411592, + "parentId": 653116690411589, + "name": "海珠区", + "shortName": null, + "level": 3, + "code": "440105", + "pinyin": "HaiZhuQu", + "pinyinFirst": "HZQ", + "capital": "江海街道", + "population": 107, + "area": 92, + "areaCode": "020", + "zipCode": "510300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690411593, + "parentId": 653116690411589, + "name": "天河区", + "shortName": null, + "level": 3, + "code": "440106", + "pinyin": "TianHeQu", + "pinyinFirst": "THQ", + "capital": "天园街道", + "population": 97, + "area": 137, + "areaCode": "020", + "zipCode": "510665", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690411594, + "parentId": 653116690411589, + "name": "白云区", + "shortName": null, + "level": 3, + "code": "440111", + "pinyin": "BaiYunQu", + "pinyinFirst": "BYQ", + "capital": "景泰街道", + "population": 108, + "area": 665, + "areaCode": "020", + "zipCode": "510405", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690411595, + "parentId": 653116690411589, + "name": "黄埔区", + "shortName": null, + "level": 3, + "code": "440112", + "pinyin": "HuangPuQu", + "pinyinFirst": "HPQ", + "capital": "萝岗街道", + "population": 56, + "area": 481, + "areaCode": "020", + "zipCode": "510700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690411596, + "parentId": 653116690411589, + "name": "番禺区", + "shortName": null, + "level": 3, + "code": "440113", + "pinyin": "PanYuQu", + "pinyinFirst": "PYQ", + "capital": "市桥街道", + "population": 103, + "area": 515, + "areaCode": "020", + "zipCode": "511400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690411597, + "parentId": 653116690411589, + "name": "花都区", + "shortName": null, + "level": 3, + "code": "440114", + "pinyin": "HuaDuQu", + "pinyinFirst": "HDQ", + "capital": "花城街道", + "population": 81, + "area": 968, + "areaCode": "020", + "zipCode": "510800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690411598, + "parentId": 653116690411589, + "name": "南沙区", + "shortName": null, + "level": 3, + "code": "440115", + "pinyin": "NanShaQu", + "pinyinFirst": "NSQ", + "capital": "黄阁镇", + "population": 46, + "area": 697, + "areaCode": "020", + "zipCode": "511458", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690411599, + "parentId": 653116690411589, + "name": "从化区", + "shortName": null, + "level": 3, + "code": "440117", + "pinyin": "CongHuaQu", + "pinyinFirst": "CHQ", + "capital": "街口街道", + "population": 64, + "area": 1984, + "areaCode": "020", + "zipCode": "510900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690411600, + "parentId": 653116690411589, + "name": "增城区", + "shortName": null, + "level": 3, + "code": "440118", + "pinyin": "ZengChengQu", + "pinyinFirst": "ZCQ", + "capital": "荔城街道", + "population": 98, + "area": 1615, + "areaCode": "020", + "zipCode": "511300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690493509, + "parentId": 653116688965701, + "name": "韶关市", + "shortName": null, + "level": 2, + "code": "440200", + "pinyin": "ShaoGuanShi", + "pinyinFirst": "SGS", + "capital": "浈江区", + "population": 337, + "area": 18413, + "areaCode": "0751", + "zipCode": "512000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116690493510, + "parentId": 653116690493509, + "name": "浈江区", + "shortName": null, + "level": 3, + "code": "440204", + "pinyin": "ZhenJiangQu", + "pinyinFirst": "ZJQ", + "capital": "东河街道", + "population": 32, + "area": 572, + "areaCode": "0751", + "zipCode": "512023", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690493511, + "parentId": 653116690493509, + "name": "武江区", + "shortName": null, + "level": 3, + "code": "440203", + "pinyin": "WuJiangQu", + "pinyinFirst": "WJQ", + "capital": "新华街道", + "population": 28, + "area": 678, + "areaCode": "0751", + "zipCode": "512026", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690493512, + "parentId": 653116690493509, + "name": "曲江区", + "shortName": null, + "level": 3, + "code": "440205", + "pinyin": "QuJiangQu", + "pinyinFirst": "QJQ", + "capital": "马坝镇", + "population": 31, + "area": 1621, + "areaCode": "0751", + "zipCode": "512100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690497605, + "parentId": 653116690493509, + "name": "乐昌市", + "shortName": null, + "level": 3, + "code": "440281", + "pinyin": "LeChangShi", + "pinyinFirst": "LCS", + "capital": "乐城街道", + "population": 53, + "area": 2419, + "areaCode": "0751", + "zipCode": "512200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690497606, + "parentId": 653116690493509, + "name": "南雄市", + "shortName": null, + "level": 3, + "code": "440282", + "pinyin": "NanXiongShi", + "pinyinFirst": "NXS", + "capital": "雄州街道", + "population": 49, + "area": 2326, + "areaCode": "0751", + "zipCode": "512400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690497607, + "parentId": 653116690493509, + "name": "始兴县", + "shortName": null, + "level": 3, + "code": "440222", + "pinyin": "ShiXingXian", + "pinyinFirst": "SXX", + "capital": "太平镇", + "population": 26, + "area": 2132, + "areaCode": "0751", + "zipCode": "512500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690497608, + "parentId": 653116690493509, + "name": "仁化县", + "shortName": null, + "level": 3, + "code": "440224", + "pinyin": "RenHuaXian", + "pinyinFirst": "RHX", + "capital": "丹霞街道", + "population": 24, + "area": 2223, + "areaCode": "0751", + "zipCode": "512300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690497609, + "parentId": 653116690493509, + "name": "翁源县", + "shortName": null, + "level": 3, + "code": "440229", + "pinyin": "WengYuanXian", + "pinyinFirst": "WYX", + "capital": "龙仙镇", + "population": 42, + "area": 2175, + "areaCode": "0751", + "zipCode": "512600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690497610, + "parentId": 653116690493509, + "name": "新丰县", + "shortName": null, + "level": 3, + "code": "440233", + "pinyin": "XinFengXian", + "pinyinFirst": "XFX", + "capital": "丰城街道", + "population": 27, + "area": 1967, + "areaCode": "0751", + "zipCode": "511100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690497611, + "parentId": 653116690493509, + "name": "乳源瑶族自治县", + "shortName": null, + "level": 3, + "code": "440232", + "pinyin": "RuYuanYaoZuZiZhiXian", + "pinyinFirst": "RYYZZZX", + "capital": "乳城镇", + "population": 23, + "area": 2299, + "areaCode": "0751", + "zipCode": "512700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690632773, + "parentId": 653116688965701, + "name": "深圳市", + "shortName": null, + "level": 2, + "code": "440300", + "pinyin": "ShenZhenShi", + "pinyinFirst": "SZS", + "capital": "福田区", + "population": 542, + "area": 1998, + "areaCode": "0755", + "zipCode": "518000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116690636869, + "parentId": 653116690632773, + "name": "福田区", + "shortName": null, + "level": 3, + "code": "440304", + "pinyin": "FuTianQu", + "pinyinFirst": "FTQ", + "capital": "福保街道", + "population": 120, + "area": 79, + "areaCode": "0755", + "zipCode": "518048", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690636870, + "parentId": 653116690632773, + "name": "罗湖区", + "shortName": null, + "level": 3, + "code": "440303", + "pinyin": "LuoHuQu", + "pinyinFirst": "LHQ", + "capital": "黄贝街道", + "population": 70, + "area": 79, + "areaCode": "0755", + "zipCode": "518021", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690636871, + "parentId": 653116690632773, + "name": "南山区", + "shortName": null, + "level": 3, + "code": "440305", + "pinyin": "NanShanQu", + "pinyinFirst": "NSQ", + "capital": "南头街道", + "population": 109, + "area": 188, + "areaCode": "0755", + "zipCode": "518051", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690636872, + "parentId": 653116690632773, + "name": "宝安区", + "shortName": null, + "level": 3, + "code": "440306", + "pinyin": "BaoAnQu", + "pinyinFirst": "BAQ", + "capital": "新安街道", + "population": 72, + "area": 397, + "areaCode": "0755", + "zipCode": "518100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690636873, + "parentId": 653116690632773, + "name": "龙岗区", + "shortName": null, + "level": 3, + "code": "440307", + "pinyin": "LongGangQu", + "pinyinFirst": "LGQ", + "capital": "龙城街道", + "population": 97, + "area": 684, + "areaCode": "0755", + "zipCode": "518100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690636874, + "parentId": 653116690632773, + "name": "盐田区", + "shortName": null, + "level": 3, + "code": "440308", + "pinyin": "YanTianQu", + "pinyinFirst": "YTQ", + "capital": "海山街道", + "population": 9, + "area": 75, + "areaCode": "0755", + "zipCode": "518081", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690636875, + "parentId": 653116690632773, + "name": "龙华区", + "shortName": null, + "level": 3, + "code": "440309", + "pinyin": "LongHuaQu", + "pinyinFirst": "LHQ", + "capital": "观湖街道", + "population": 45, + "area": 176, + "areaCode": "0755", + "zipCode": "518110", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690636876, + "parentId": 653116690632773, + "name": "坪山区", + "shortName": null, + "level": 3, + "code": "440310", + "pinyin": "PingShanQu", + "pinyinFirst": "PSQ", + "capital": "坪山街道", + "population": 10, + "area": 166, + "areaCode": "0755", + "zipCode": "518118", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690636877, + "parentId": 653116690632773, + "name": "光明区", + "shortName": null, + "level": 3, + "code": "440311", + "pinyin": "GuangMingQu", + "pinyinFirst": "GMQ", + "capital": "光明街道", + "population": 10, + "area": 155, + "areaCode": "0755", + "zipCode": "518107", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690751557, + "parentId": 653116688965701, + "name": "珠海市", + "shortName": null, + "level": 2, + "code": "440400", + "pinyin": "ZhuHaiShi", + "pinyinFirst": "ZHS", + "capital": "香洲区", + "population": 133, + "area": 1737, + "areaCode": "0756", + "zipCode": "519000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116690755653, + "parentId": 653116690751557, + "name": "香洲区", + "shortName": null, + "level": 3, + "code": "440402", + "pinyin": "XiangZhouQu", + "pinyinFirst": "XZQ", + "capital": "梅华街道", + "population": 75, + "area": 555, + "areaCode": "0756", + "zipCode": "519000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690755654, + "parentId": 653116690751557, + "name": "斗门区", + "shortName": null, + "level": 3, + "code": "440403", + "pinyin": "DouMenQu", + "pinyinFirst": "DMQ", + "capital": "井岸镇", + "population": 40, + "area": 614, + "areaCode": "0756", + "zipCode": "519100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690755655, + "parentId": 653116690751557, + "name": "金湾区", + "shortName": null, + "level": 3, + "code": "440404", + "pinyin": "JinWanQu", + "pinyinFirst": "JWQ", + "capital": "三灶镇", + "population": 19, + "area": 567, + "areaCode": "0756", + "zipCode": "519040", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690899013, + "parentId": 653116688965701, + "name": "汕头市", + "shortName": null, + "level": 2, + "code": "440500", + "pinyin": "ShanTouShi", + "pinyinFirst": "STS", + "capital": "金平区", + "population": 572, + "area": 2199, + "areaCode": "0754", + "zipCode": "515000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116690903109, + "parentId": 653116690899013, + "name": "金平区", + "shortName": null, + "level": 3, + "code": "440511", + "pinyin": "JinPingQu", + "pinyinFirst": "JPQ", + "capital": "石炮台街道", + "population": 74, + "area": 140, + "areaCode": "0754", + "zipCode": "515041", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690903110, + "parentId": 653116690899013, + "name": "龙湖区", + "shortName": null, + "level": 3, + "code": "440507", + "pinyin": "LongHuQu", + "pinyinFirst": "LHQ", + "capital": "金霞街道", + "population": 47, + "area": 125, + "areaCode": "0754", + "zipCode": "515041", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690903111, + "parentId": 653116690899013, + "name": "濠江区", + "shortName": null, + "level": 3, + "code": "440512", + "pinyin": "HaoJiangQu", + "pinyinFirst": "HJQ", + "capital": "达濠街道", + "population": 30, + "area": 170, + "areaCode": "0754", + "zipCode": "515071", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690903112, + "parentId": 653116690899013, + "name": "潮阳区", + "shortName": null, + "level": 3, + "code": "440513", + "pinyin": "ChaoYangQu", + "pinyinFirst": "CYQ", + "capital": "文光街道", + "population": 185, + "area": 667, + "areaCode": "0754", + "zipCode": "515100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690903113, + "parentId": 653116690899013, + "name": "潮南区", + "shortName": null, + "level": 3, + "code": "440514", + "pinyin": "ChaoNanQu", + "pinyinFirst": "CNQ", + "capital": "峡山街道", + "population": 149, + "area": 600, + "areaCode": "0754", + "zipCode": "515100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690903114, + "parentId": 653116690899013, + "name": "澄海区", + "shortName": null, + "level": 3, + "code": "440515", + "pinyin": "ChengHaiQu", + "pinyinFirst": "CHQ", + "capital": "澄华街道", + "population": 79, + "area": 384, + "areaCode": "0754", + "zipCode": "515800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116690903115, + "parentId": 653116690899013, + "name": "南澳县", + "shortName": null, + "level": 3, + "code": "440523", + "pinyin": "NanAoXian", + "pinyinFirst": "NAX", + "capital": "后宅镇", + "population": 8, + "area": 114, + "areaCode": "0754", + "zipCode": "515900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691030085, + "parentId": 653116688965701, + "name": "佛山市", + "shortName": null, + "level": 2, + "code": "440600", + "pinyin": "FoShanShi", + "pinyinFirst": "FSS", + "capital": "禅城区", + "population": 461, + "area": 3798, + "areaCode": "0757", + "zipCode": "528000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116691030086, + "parentId": 653116691030085, + "name": "禅城区", + "shortName": null, + "level": 3, + "code": "440604", + "pinyin": "ChanChengQu", + "pinyinFirst": "CCQ", + "capital": "祖庙街道", + "population": 71, + "area": 154, + "areaCode": "0757", + "zipCode": "528000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691030087, + "parentId": 653116691030085, + "name": "南海区", + "shortName": null, + "level": 3, + "code": "440605", + "pinyin": "NanHaiQu", + "pinyinFirst": "NHQ", + "capital": "桂城街道", + "population": 160, + "area": 1072, + "areaCode": "0757", + "zipCode": "528200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691030088, + "parentId": 653116691030085, + "name": "顺德区", + "shortName": null, + "level": 3, + "code": "440606", + "pinyin": "ShunDeQu", + "pinyinFirst": "SDQ", + "capital": "大良街道", + "population": 152, + "area": 807, + "areaCode": "0757", + "zipCode": "528300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691030089, + "parentId": 653116691030085, + "name": "三水区", + "shortName": null, + "level": 3, + "code": "440607", + "pinyin": "SanShuiQu", + "pinyinFirst": "SSQ", + "capital": "西南街道", + "population": 46, + "area": 828, + "areaCode": "0757", + "zipCode": "528100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691030090, + "parentId": 653116691030085, + "name": "高明区", + "shortName": null, + "level": 3, + "code": "440608", + "pinyin": "GaoMingQu", + "pinyinFirst": "GMQ", + "capital": "荷城街道", + "population": 33, + "area": 938, + "areaCode": "0757", + "zipCode": "528500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691173445, + "parentId": 653116688965701, + "name": "江门市", + "shortName": null, + "level": 2, + "code": "440700", + "pinyin": "JiangMenShi", + "pinyinFirst": "JMS", + "capital": "蓬江区", + "population": 400, + "area": 9505, + "areaCode": "0750", + "zipCode": "529000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116691177541, + "parentId": 653116691173445, + "name": "蓬江区", + "shortName": null, + "level": 3, + "code": "440703", + "pinyin": "PengJiangQu", + "pinyinFirst": "PJQ", + "capital": "环市街道", + "population": 52, + "area": 320, + "areaCode": "0750", + "zipCode": "529000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691177542, + "parentId": 653116691173445, + "name": "江海区", + "shortName": null, + "level": 3, + "code": "440704", + "pinyin": "JiangHaiQu", + "pinyinFirst": "JHQ", + "capital": "江南街道", + "population": 18, + "area": 109, + "areaCode": "0750", + "zipCode": "529040", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691177543, + "parentId": 653116691173445, + "name": "新会区", + "shortName": null, + "level": 3, + "code": "440705", + "pinyin": "XinHuiQu", + "pinyinFirst": "XHQ", + "capital": "会城街道", + "population": 77, + "area": 1355, + "areaCode": "0750", + "zipCode": "529100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691177544, + "parentId": 653116691173445, + "name": "台山市", + "shortName": null, + "level": 3, + "code": "440781", + "pinyin": "TaiShanShi", + "pinyinFirst": "TSS", + "capital": "台城街道", + "population": 97, + "area": 3288, + "areaCode": "0750", + "zipCode": "529200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691177545, + "parentId": 653116691173445, + "name": "开平市", + "shortName": null, + "level": 3, + "code": "440783", + "pinyin": "KaiPingShi", + "pinyinFirst": "KPS", + "capital": "长沙街道", + "population": 69, + "area": 1657, + "areaCode": "0750", + "zipCode": "529300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691177546, + "parentId": 653116691173445, + "name": "鹤山市", + "shortName": null, + "level": 3, + "code": "440784", + "pinyin": "HeShanShi", + "pinyinFirst": "HSS", + "capital": "沙坪街道", + "population": 38, + "area": 1083, + "areaCode": "0750", + "zipCode": "529700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691177547, + "parentId": 653116691173445, + "name": "恩平市", + "shortName": null, + "level": 3, + "code": "440785", + "pinyin": "EnPingShi", + "pinyinFirst": "EPS", + "capital": "恩城街道", + "population": 50, + "area": 1694, + "areaCode": "0750", + "zipCode": "529400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691357765, + "parentId": 653116688965701, + "name": "湛江市", + "shortName": null, + "level": 2, + "code": "440800", + "pinyin": "ZhanJiangShi", + "pinyinFirst": "ZJS", + "capital": "赤坎区", + "population": 854, + "area": 13263, + "areaCode": "0759", + "zipCode": "524000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116691361861, + "parentId": 653116691357765, + "name": "赤坎区", + "shortName": null, + "level": 3, + "code": "440802", + "pinyin": "ChiKanQu", + "pinyinFirst": "CKQ", + "capital": "南桥街道", + "population": 26, + "area": 62, + "areaCode": "0759", + "zipCode": "524033", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691361862, + "parentId": 653116691357765, + "name": "霞山区", + "shortName": null, + "level": 3, + "code": "440803", + "pinyin": "XiaShanQu", + "pinyinFirst": "XSQ", + "capital": "工农街道", + "population": 43, + "area": 114, + "areaCode": "0759", + "zipCode": "524011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691361863, + "parentId": 653116691357765, + "name": "坡头区", + "shortName": null, + "level": 3, + "code": "440804", + "pinyin": "PoTouQu", + "pinyinFirst": "PTQ", + "capital": "南调街道", + "population": 44, + "area": 565, + "areaCode": "0759", + "zipCode": "524057", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691361864, + "parentId": 653116691357765, + "name": "麻章区", + "shortName": null, + "level": 3, + "code": "440811", + "pinyin": "MaZhangQu", + "pinyinFirst": "MZQ", + "capital": "麻章镇", + "population": 57, + "area": 964, + "areaCode": "0759", + "zipCode": "524094", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691361865, + "parentId": 653116691357765, + "name": "廉江市", + "shortName": null, + "level": 3, + "code": "440881", + "pinyin": "LianJiangShi", + "pinyinFirst": "LJS", + "capital": "罗州街道", + "population": 185, + "area": 2867, + "areaCode": "0759", + "zipCode": "524400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691361866, + "parentId": 653116691357765, + "name": "雷州市", + "shortName": null, + "level": 3, + "code": "440882", + "pinyin": "LeiZhouShi", + "pinyinFirst": "LZS", + "capital": "雷城街道", + "population": 185, + "area": 3709, + "areaCode": "0759", + "zipCode": "524200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691361867, + "parentId": 653116691357765, + "name": "吴川市", + "shortName": null, + "level": 3, + "code": "440883", + "pinyin": "WuChuanShi", + "pinyinFirst": "WCS", + "capital": "梅菉街道", + "population": 123, + "area": 870, + "areaCode": "0759", + "zipCode": "524500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691361868, + "parentId": 653116691357765, + "name": "遂溪县", + "shortName": null, + "level": 3, + "code": "440823", + "pinyin": "SuiXiXian", + "pinyinFirst": "SXX", + "capital": "遂城镇", + "population": 111, + "area": 2132, + "areaCode": "0759", + "zipCode": "524300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691361869, + "parentId": 653116691357765, + "name": "徐闻县", + "shortName": null, + "level": 3, + "code": "440825", + "pinyin": "XuWenXian", + "pinyinFirst": "XWX", + "capital": "徐城街道", + "population": 79, + "area": 1980, + "areaCode": "0759", + "zipCode": "524100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691525701, + "parentId": 653116688965701, + "name": "茂名市", + "shortName": null, + "level": 2, + "code": "440900", + "pinyin": "MaoMingShi", + "pinyinFirst": "MMS", + "capital": "茂南区", + "population": 818, + "area": 11428, + "areaCode": "0668", + "zipCode": "525000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116691525702, + "parentId": 653116691525701, + "name": "茂南区", + "shortName": null, + "level": 3, + "code": "440902", + "pinyin": "MaoNanQu", + "pinyinFirst": "MNQ", + "capital": "城南街道", + "population": 107, + "area": 486, + "areaCode": "0668", + "zipCode": "525000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691525703, + "parentId": 653116691525701, + "name": "电白区", + "shortName": null, + "level": 3, + "code": "440904", + "pinyin": "DianBaiQu", + "pinyinFirst": "DBQ", + "capital": "水东街道", + "population": 197, + "area": 2230, + "areaCode": "0668", + "zipCode": "525400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691525704, + "parentId": 653116691525701, + "name": "高州市", + "shortName": null, + "level": 3, + "code": "440981", + "pinyin": "GaoZhouShi", + "pinyinFirst": "GZS", + "capital": "潘州街道", + "population": 185, + "area": 3271, + "areaCode": "0668", + "zipCode": "525200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691525705, + "parentId": 653116691525701, + "name": "化州市", + "shortName": null, + "level": 3, + "code": "440982", + "pinyin": "HuaZhouShi", + "pinyinFirst": "HZS", + "capital": "鉴江街道", + "population": 178, + "area": 2357, + "areaCode": "0668", + "zipCode": "525100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691525706, + "parentId": 653116691525701, + "name": "信宜市", + "shortName": null, + "level": 3, + "code": "440983", + "pinyin": "XinYiShi", + "pinyinFirst": "XYS", + "capital": "东镇街道", + "population": 150, + "area": 3084, + "areaCode": "0668", + "zipCode": "525300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691722309, + "parentId": 653116688965701, + "name": "肇庆市", + "shortName": null, + "level": 2, + "code": "441200", + "pinyin": "ZhaoQingShi", + "pinyinFirst": "ZQS", + "capital": "端州区", + "population": 454, + "area": 14891, + "areaCode": "0758", + "zipCode": "526000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116691722310, + "parentId": 653116691722309, + "name": "端州区", + "shortName": null, + "level": 3, + "code": "441202", + "pinyin": "DuanZhouQu", + "pinyinFirst": "DZQ", + "capital": "城东街道", + "population": 43, + "area": 154, + "areaCode": "0758", + "zipCode": "526060", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691722311, + "parentId": 653116691722309, + "name": "鼎湖区", + "shortName": null, + "level": 3, + "code": "441203", + "pinyin": "DingHuQu", + "pinyinFirst": "DHQ", + "capital": "坑口街道", + "population": 17, + "area": 552, + "areaCode": "0758", + "zipCode": "526070", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691722312, + "parentId": 653116691722309, + "name": "高要区", + "shortName": null, + "level": 3, + "code": "441204", + "pinyin": "GaoYaoQu", + "pinyinFirst": "GYQ", + "capital": "南岸街道", + "population": 82, + "area": 2186, + "areaCode": "0758", + "zipCode": "526100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691722313, + "parentId": 653116691722309, + "name": "四会市", + "shortName": null, + "level": 3, + "code": "441284", + "pinyin": "SiHuiShi", + "pinyinFirst": "SHS", + "capital": "东城街道", + "population": 48, + "area": 1263, + "areaCode": "0758", + "zipCode": "526200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691722314, + "parentId": 653116691722309, + "name": "广宁县", + "shortName": null, + "level": 3, + "code": "441223", + "pinyin": "GuangNingXian", + "pinyinFirst": "GNX", + "capital": "南街街道", + "population": 59, + "area": 2456, + "areaCode": "0758", + "zipCode": "526300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691722315, + "parentId": 653116691722309, + "name": "怀集县", + "shortName": null, + "level": 3, + "code": "441224", + "pinyin": "HuaiJiXian", + "pinyinFirst": "HJX", + "capital": "怀城街道", + "population": 112, + "area": 3554, + "areaCode": "0758", + "zipCode": "526400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691722316, + "parentId": 653116691722309, + "name": "封开县", + "shortName": null, + "level": 3, + "code": "441225", + "pinyin": "FengKaiXian", + "pinyinFirst": "FKX", + "capital": "江口街道", + "population": 53, + "area": 2724, + "areaCode": "0758", + "zipCode": "526500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691722317, + "parentId": 653116691722309, + "name": "德庆县", + "shortName": null, + "level": 3, + "code": "441226", + "pinyin": "DeQingXian", + "pinyinFirst": "DQX", + "capital": "德城街道", + "population": 41, + "area": 2003, + "areaCode": "0758", + "zipCode": "526600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691902533, + "parentId": 653116688965701, + "name": "惠州市", + "shortName": null, + "level": 2, + "code": "441300", + "pinyin": "HuiZhouShi", + "pinyinFirst": "HZS", + "capital": "惠城区", + "population": 390, + "area": 11347, + "areaCode": "0752", + "zipCode": "516000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116691906629, + "parentId": 653116691902533, + "name": "惠城区", + "shortName": null, + "level": 3, + "code": "441302", + "pinyin": "HuiChengQu", + "pinyinFirst": "HCQ", + "capital": "龙丰街道", + "population": 116, + "area": 1489, + "areaCode": "0752", + "zipCode": "516008", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691906630, + "parentId": 653116691902533, + "name": "惠阳区", + "shortName": null, + "level": 3, + "code": "441303", + "pinyin": "HuiYangQu", + "pinyinFirst": "HYQ", + "capital": "淡水街道", + "population": 55, + "area": 1209, + "areaCode": "0752", + "zipCode": "516200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691906631, + "parentId": 653116691902533, + "name": "博罗县", + "shortName": null, + "level": 3, + "code": "441322", + "pinyin": "BoLuoXian", + "pinyinFirst": "BLX", + "capital": "罗阳街道", + "population": 93, + "area": 2855, + "areaCode": "0752", + "zipCode": "516100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691906632, + "parentId": 653116691902533, + "name": "惠东县", + "shortName": null, + "level": 3, + "code": "441323", + "pinyin": "HuiDongXian", + "pinyinFirst": "HDX", + "capital": "平山街道", + "population": 90, + "area": 3528, + "areaCode": "0752", + "zipCode": "516300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116691906633, + "parentId": 653116691902533, + "name": "龙门县", + "shortName": null, + "level": 3, + "code": "441324", + "pinyin": "LongMenXian", + "pinyinFirst": "LMX", + "capital": "龙城街道", + "population": 36, + "area": 2267, + "areaCode": "0752", + "zipCode": "516800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692090949, + "parentId": 653116688965701, + "name": "梅州市", + "shortName": null, + "level": 2, + "code": "441400", + "pinyin": "MeiZhouShi", + "pinyinFirst": "MZS", + "capital": "梅江区", + "population": 546, + "area": 15865, + "areaCode": "0753", + "zipCode": "514000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116692095045, + "parentId": 653116692090949, + "name": "梅江区", + "shortName": null, + "level": 3, + "code": "441402", + "pinyin": "MeiJiangQu", + "pinyinFirst": "MJQ", + "capital": "金山街道", + "population": 36, + "area": 571, + "areaCode": "0753", + "zipCode": "514000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692095046, + "parentId": 653116692090949, + "name": "梅县区", + "shortName": null, + "level": 3, + "code": "441403", + "pinyin": "MeiXianQu", + "pinyinFirst": "MXQ", + "capital": "程江镇", + "population": 62, + "area": 2477, + "areaCode": "0753", + "zipCode": "514700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692095047, + "parentId": 653116692090949, + "name": "兴宁市", + "shortName": null, + "level": 3, + "code": "441481", + "pinyin": "XingNingShi", + "pinyinFirst": "XNS", + "capital": "兴田街道", + "population": 117, + "area": 2075, + "areaCode": "0753", + "zipCode": "514500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692095048, + "parentId": 653116692090949, + "name": "大埔县", + "shortName": null, + "level": 3, + "code": "441422", + "pinyin": "DaPuXian", + "pinyinFirst": "DPX", + "capital": "湖寮镇", + "population": 56, + "area": 2462, + "areaCode": "0753", + "zipCode": "514200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692095049, + "parentId": 653116692090949, + "name": "丰顺县", + "shortName": null, + "level": 3, + "code": "441423", + "pinyin": "FengShunXian", + "pinyinFirst": "FSX", + "capital": "汤坑镇", + "population": 73, + "area": 2706, + "areaCode": "0753", + "zipCode": "514300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692095050, + "parentId": 653116692090949, + "name": "五华县", + "shortName": null, + "level": 3, + "code": "441424", + "pinyin": "WuHuaXian", + "pinyinFirst": "WHX", + "capital": "水寨镇", + "population": 152, + "area": 3238, + "areaCode": "0753", + "zipCode": "514400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692095051, + "parentId": 653116692090949, + "name": "平远县", + "shortName": null, + "level": 3, + "code": "441426", + "pinyin": "PingYuanXian", + "pinyinFirst": "PYX", + "capital": "大柘镇", + "population": 26, + "area": 1374, + "areaCode": "0753", + "zipCode": "514600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692095052, + "parentId": 653116692090949, + "name": "蕉岭县", + "shortName": null, + "level": 3, + "code": "441427", + "pinyin": "JiaoLingXian", + "pinyinFirst": "JLX", + "capital": "蕉城镇", + "population": 23, + "area": 962, + "areaCode": "0753", + "zipCode": "514100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692316229, + "parentId": 653116688965701, + "name": "汕尾市", + "shortName": null, + "level": 2, + "code": "441500", + "pinyin": "ShanWeiShi", + "pinyinFirst": "SWS", + "capital": "城区", + "population": 365, + "area": 4865, + "areaCode": "0660", + "zipCode": "516600", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116692320325, + "parentId": 653116692316229, + "name": "城区", + "shortName": null, + "level": 3, + "code": "441502", + "pinyin": "ChengQu", + "pinyinFirst": "CQ", + "capital": "香洲街道", + "population": 50, + "area": 393, + "areaCode": "0660", + "zipCode": "516600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692320326, + "parentId": 653116692316229, + "name": "陆丰市", + "shortName": null, + "level": 3, + "code": "441581", + "pinyin": "LuFengShi", + "pinyinFirst": "LFS", + "capital": "东海街道", + "population": 193, + "area": 1703, + "areaCode": "0660", + "zipCode": "516500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692320327, + "parentId": 653116692316229, + "name": "海丰县", + "shortName": null, + "level": 3, + "code": "441521", + "pinyin": "HaiFengXian", + "pinyinFirst": "HFX", + "capital": "海城镇", + "population": 86, + "area": 1783, + "areaCode": "0660", + "zipCode": "516400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692320328, + "parentId": 653116692316229, + "name": "陆河县", + "shortName": null, + "level": 3, + "code": "441523", + "pinyin": "LuHeXian", + "pinyinFirst": "LHX", + "capital": "河田镇", + "population": 36, + "area": 986, + "areaCode": "0660", + "zipCode": "516700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692529221, + "parentId": 653116688965701, + "name": "河源市", + "shortName": null, + "level": 2, + "code": "441600", + "pinyin": "HeYuanShi", + "pinyinFirst": "HYS", + "capital": "源城区", + "population": 373, + "area": 15654, + "areaCode": "0762", + "zipCode": "517000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116692533317, + "parentId": 653116692529221, + "name": "源城区", + "shortName": null, + "level": 3, + "code": "441602", + "pinyin": "YuanChengQu", + "pinyinFirst": "YCQ", + "capital": "上城街道", + "population": 33, + "area": 362, + "areaCode": "0762", + "zipCode": "517000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692533318, + "parentId": 653116692529221, + "name": "紫金县", + "shortName": null, + "level": 3, + "code": "441621", + "pinyin": "ZiJinXian", + "pinyinFirst": "ZJX", + "capital": "紫城镇", + "population": 85, + "area": 3635, + "areaCode": "0762", + "zipCode": "517400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692533319, + "parentId": 653116692529221, + "name": "龙川县", + "shortName": null, + "level": 3, + "code": "441622", + "pinyin": "LongChuanXian", + "pinyinFirst": "LCX", + "capital": "老隆镇", + "population": 98, + "area": 3081, + "areaCode": "0762", + "zipCode": "517300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692533320, + "parentId": 653116692529221, + "name": "连平县", + "shortName": null, + "level": 3, + "code": "441623", + "pinyin": "LianPingXian", + "pinyinFirst": "LPX", + "capital": "元善镇", + "population": 41, + "area": 2275, + "areaCode": "0762", + "zipCode": "517100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692533321, + "parentId": 653116692529221, + "name": "和平县", + "shortName": null, + "level": 3, + "code": "441624", + "pinyin": "HePingXian", + "pinyinFirst": "HPX", + "capital": "阳明镇", + "population": 56, + "area": 2292, + "areaCode": "0762", + "zipCode": "517200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692533322, + "parentId": 653116692529221, + "name": "东源县", + "shortName": null, + "level": 3, + "code": "441625", + "pinyin": "DongYuanXian", + "pinyinFirst": "DYX", + "capital": "仙塘镇", + "population": 59, + "area": 4009, + "areaCode": "0762", + "zipCode": "517500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692754501, + "parentId": 653116688965701, + "name": "阳江市", + "shortName": null, + "level": 2, + "code": "441700", + "pinyin": "YangJiangShi", + "pinyinFirst": "YJS", + "capital": "江城区", + "population": 301, + "area": 7956, + "areaCode": "0662", + "zipCode": "529500", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116692758597, + "parentId": 653116692754501, + "name": "江城区", + "shortName": null, + "level": 3, + "code": "441702", + "pinyin": "JiangChengQu", + "pinyinFirst": "JCQ", + "capital": "城北街道", + "population": 72, + "area": 780, + "areaCode": "0662", + "zipCode": "529500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692758598, + "parentId": 653116692754501, + "name": "阳东区", + "shortName": null, + "level": 3, + "code": "441704", + "pinyin": "YangDongQu", + "pinyinFirst": "YDQ", + "capital": "东城镇", + "population": 52, + "area": 1703, + "areaCode": "0662", + "zipCode": "529900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692758599, + "parentId": 653116692754501, + "name": "阳春市", + "shortName": null, + "level": 3, + "code": "441781", + "pinyin": "YangChunShi", + "pinyinFirst": "YCS", + "capital": "春城街道", + "population": 122, + "area": 4038, + "areaCode": "0662", + "zipCode": "529600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692758600, + "parentId": 653116692754501, + "name": "阳西县", + "shortName": null, + "level": 3, + "code": "441721", + "pinyin": "YangXiXian", + "pinyinFirst": "YXX", + "capital": "织篢镇", + "population": 55, + "area": 1435, + "areaCode": "0662", + "zipCode": "529800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692992069, + "parentId": 653116688965701, + "name": "清远市", + "shortName": null, + "level": 2, + "code": "441800", + "pinyin": "QingYuanShi", + "pinyinFirst": "QYS", + "capital": "清城区", + "population": 446, + "area": 19036, + "areaCode": "0763", + "zipCode": "511500", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116692996165, + "parentId": 653116692992069, + "name": "清城区", + "shortName": null, + "level": 3, + "code": "441802", + "pinyin": "QingChengQu", + "pinyinFirst": "QCQ", + "capital": "东城街道", + "population": 77, + "area": 1296, + "areaCode": "0763", + "zipCode": "511515", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692996166, + "parentId": 653116692992069, + "name": "清新区", + "shortName": null, + "level": 3, + "code": "441803", + "pinyin": "QingXinQu", + "pinyinFirst": "QXQ", + "capital": "太和镇", + "population": 72, + "area": 2353, + "areaCode": "0763", + "zipCode": "511800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692996167, + "parentId": 653116692992069, + "name": "英德市", + "shortName": null, + "level": 3, + "code": "441881", + "pinyin": "YingDeShi", + "pinyinFirst": "YDS", + "capital": "英城街道", + "population": 119, + "area": 5634, + "areaCode": "0763", + "zipCode": "513000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692996168, + "parentId": 653116692992069, + "name": "连州市", + "shortName": null, + "level": 3, + "code": "441882", + "pinyin": "LianZhouShi", + "pinyinFirst": "LZS", + "capital": "连州镇", + "population": 54, + "area": 2668, + "areaCode": "0763", + "zipCode": "513400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692996169, + "parentId": 653116692992069, + "name": "佛冈县", + "shortName": null, + "level": 3, + "code": "441821", + "pinyin": "FoGangXian", + "pinyinFirst": "FGX", + "capital": "石角镇", + "population": 36, + "area": 1295, + "areaCode": "0763", + "zipCode": "511600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692996170, + "parentId": 653116692992069, + "name": "阳山县", + "shortName": null, + "level": 3, + "code": "441823", + "pinyin": "YangShanXian", + "pinyinFirst": "YSX", + "capital": "阳城镇", + "population": 58, + "area": 3330, + "areaCode": "0763", + "zipCode": "513100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692996171, + "parentId": 653116692992069, + "name": "连山壮族瑶族自治县", + "shortName": null, + "level": 3, + "code": "441825", + "pinyin": "LianShanZhuangZuYaoZuZiZhiXian", + "pinyinFirst": "LSZZYZZZX", + "capital": "吉田镇", + "population": 12, + "area": 1219, + "areaCode": "0763", + "zipCode": "513200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116692996172, + "parentId": 653116692992069, + "name": "连南瑶族自治县", + "shortName": null, + "level": 3, + "code": "441826", + "pinyin": "LianNanYaoZuZiZhiXian", + "pinyinFirst": "LNYZZZX", + "capital": "三江镇", + "population": 18, + "area": 1241, + "areaCode": "0763", + "zipCode": "513300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116693246021, + "parentId": 653116688965701, + "name": "东莞市", + "shortName": null, + "level": 2, + "code": "441900", + "pinyin": "DongGuanShi", + "pinyinFirst": "DGS", + "capital": "南城街道", + "population": 251, + "area": 2460, + "areaCode": "0769", + "zipCode": "523000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116693487685, + "parentId": 653116688965701, + "name": "中山市", + "shortName": null, + "level": 2, + "code": "442000", + "pinyin": "ZhongShanShi", + "pinyinFirst": "ZSS", + "capital": "东区街道", + "population": 183, + "area": 1784, + "areaCode": "0760", + "zipCode": "528400", + "sort": null, + "hot": false, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116693749829, + "parentId": 653116688965701, + "name": "潮州市", + "shortName": null, + "level": 2, + "code": "445100", + "pinyin": "ChaoZhouShi", + "pinyinFirst": "CZS", + "capital": "湘桥区", + "population": 276, + "area": 3146, + "areaCode": "0768", + "zipCode": "521000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116693753925, + "parentId": 653116693749829, + "name": "湘桥区", + "shortName": null, + "level": 3, + "code": "445102", + "pinyin": "XiangQiaoQu", + "pinyinFirst": "XQQ", + "capital": "凤新街道", + "population": 52, + "area": 325, + "areaCode": "0768", + "zipCode": "521021", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116693753926, + "parentId": 653116693749829, + "name": "潮安区", + "shortName": null, + "level": 3, + "code": "445103", + "pinyin": "ChaoAnQu", + "pinyinFirst": "CAQ", + "capital": "庵埠镇", + "population": 118, + "area": 1089, + "areaCode": "0768", + "zipCode": "515600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116693753927, + "parentId": 653116693749829, + "name": "饶平县", + "shortName": null, + "level": 3, + "code": "445122", + "pinyin": "RaoPingXian", + "pinyinFirst": "RPX", + "capital": "黄冈镇", + "population": 107, + "area": 1732, + "areaCode": "0768", + "zipCode": "515700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116694020165, + "parentId": 653116688965701, + "name": "揭阳市", + "shortName": null, + "level": 2, + "code": "445200", + "pinyin": "JieYangShi", + "pinyinFirst": "JYS", + "capital": "榕城区", + "population": 707, + "area": 5266, + "areaCode": "0663", + "zipCode": "522000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116694024261, + "parentId": 653116694020165, + "name": "榕城区", + "shortName": null, + "level": 3, + "code": "445202", + "pinyin": "RongChengQu", + "pinyinFirst": "RCQ", + "capital": "新兴街道", + "population": 100, + "area": 299, + "areaCode": "0663", + "zipCode": "522000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116694024262, + "parentId": 653116694020165, + "name": "揭东区", + "shortName": null, + "level": 3, + "code": "445203", + "pinyin": "JieDongQu", + "pinyinFirst": "JDQ", + "capital": "曲溪街道", + "population": 112, + "area": 748, + "areaCode": "0663", + "zipCode": "515500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116694024263, + "parentId": 653116694020165, + "name": "普宁市", + "shortName": null, + "level": 3, + "code": "445281", + "pinyin": "PuNingShi", + "pinyinFirst": "PNS", + "capital": "流沙北街道", + "population": 248, + "area": 1620, + "areaCode": "0663", + "zipCode": "515300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116694024264, + "parentId": 653116694020165, + "name": "揭西县", + "shortName": null, + "level": 3, + "code": "445222", + "pinyin": "JieXiXian", + "pinyinFirst": "JXX", + "capital": "河婆街道", + "population": 98, + "area": 1347, + "areaCode": "0663", + "zipCode": "515400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116694024265, + "parentId": 653116694020165, + "name": "惠来县", + "shortName": null, + "level": 3, + "code": "445224", + "pinyin": "HuiLaiXian", + "pinyinFirst": "HLX", + "capital": "惠城镇", + "population": 148, + "area": 1252, + "areaCode": "0663", + "zipCode": "515200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116694302789, + "parentId": 653116688965701, + "name": "云浮市", + "shortName": null, + "level": 2, + "code": "445300", + "pinyin": "YunFuShi", + "pinyinFirst": "YFS", + "capital": "云城区", + "population": 301, + "area": 7785, + "areaCode": "0766", + "zipCode": "527300", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116694302790, + "parentId": 653116694302789, + "name": "云城区", + "shortName": null, + "level": 3, + "code": "445302", + "pinyin": "YunChengQu", + "pinyinFirst": "YCQ", + "capital": "云城街道", + "population": 34, + "area": 778, + "areaCode": "0766", + "zipCode": "527300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116694302791, + "parentId": 653116694302789, + "name": "云安区", + "shortName": null, + "level": 3, + "code": "445303", + "pinyin": "YunAnQu", + "pinyinFirst": "YAQ", + "capital": "六都镇", + "population": 35, + "area": 1189, + "areaCode": "0766", + "zipCode": "527500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116694302792, + "parentId": 653116694302789, + "name": "罗定市", + "shortName": null, + "level": 3, + "code": "445381", + "pinyin": "LuoDingShi", + "pinyinFirst": "LDS", + "capital": "罗城街道", + "population": 130, + "area": 2335, + "areaCode": "0766", + "zipCode": "527200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116694302793, + "parentId": 653116694302789, + "name": "新兴县", + "shortName": null, + "level": 3, + "code": "445321", + "pinyin": "XinXingXian", + "pinyinFirst": "XXX", + "capital": "新城镇", + "population": 49, + "area": 1522, + "areaCode": "0766", + "zipCode": "527400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116694302794, + "parentId": 653116694302789, + "name": "郁南县", + "shortName": null, + "level": 3, + "code": "445322", + "pinyin": "YuNanXian", + "pinyinFirst": "YNX", + "capital": "都城镇", + "population": 53, + "area": 1962, + "areaCode": "0766", + "zipCode": "527100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:39", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:13" + }, + { + "id": 653116694593605, + "parentId": 0, + "name": "广西壮族自治区", + "shortName": "桂", + "level": 1, + "code": "450000", + "pinyin": "GuangXiZhuangZuZiZhiQu", + "pinyinFirst": "GXZZZZQ", + "capital": null, + "population": null, + "area": null, + "areaCode": "", + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116696600645, + "parentId": 653116694593605, + "name": "南宁市", + "shortName": null, + "level": 2, + "code": "450100", + "pinyin": "NanNingShi", + "pinyinFirst": "NNS", + "capital": "青秀区", + "population": 782, + "area": 22099, + "areaCode": "0771", + "zipCode": "530000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116696604741, + "parentId": 653116696600645, + "name": "青秀区", + "shortName": null, + "level": 3, + "code": "450103", + "pinyin": "QingXiuQu", + "pinyinFirst": "QXQ", + "capital": "长塘镇", + "population": 80, + "area": 872, + "areaCode": "0771", + "zipCode": "530213", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696604742, + "parentId": 653116696600645, + "name": "兴宁区", + "shortName": null, + "level": 3, + "code": "450102", + "pinyin": "XingNingQu", + "pinyinFirst": "XNQ", + "capital": "兴东街道", + "population": 36, + "area": 751, + "areaCode": "0771", + "zipCode": "530023", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696604743, + "parentId": 653116696600645, + "name": "江南区", + "shortName": null, + "level": 3, + "code": "450105", + "pinyin": "JiangNanQu", + "pinyinFirst": "JNQ", + "capital": "江南街道", + "population": 56, + "area": 1183, + "areaCode": "0771", + "zipCode": "530031", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696604744, + "parentId": 653116696600645, + "name": "西乡塘区", + "shortName": null, + "level": 3, + "code": "450107", + "pinyin": "XiXiangTangQu", + "pinyinFirst": "XXTQ", + "capital": "衡阳街道", + "population": 83, + "area": 1076, + "areaCode": "0771", + "zipCode": "530001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696604745, + "parentId": 653116696600645, + "name": "良庆区", + "shortName": null, + "level": 3, + "code": "450108", + "pinyin": "LiangQingQu", + "pinyinFirst": "LQQ", + "capital": "大沙田街道", + "population": 32, + "area": 1379, + "areaCode": "0771", + "zipCode": "530200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696604746, + "parentId": 653116696600645, + "name": "邕宁区", + "shortName": null, + "level": 3, + "code": "450109", + "pinyin": "YongNingQu", + "pinyinFirst": "YNQ", + "capital": "蒲庙镇", + "population": 38, + "area": 1255, + "areaCode": "0771", + "zipCode": "530200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696604747, + "parentId": 653116696600645, + "name": "武鸣区", + "shortName": null, + "level": 3, + "code": "450110", + "pinyin": "WuMingQu", + "pinyinFirst": "WMQ", + "capital": "城厢镇", + "population": 73, + "area": 3389, + "areaCode": "0771", + "zipCode": "530100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696604748, + "parentId": 653116696600645, + "name": "横州市", + "shortName": null, + "level": 3, + "code": "450181", + "pinyin": "HengZhouShi", + "pinyinFirst": "HZS", + "capital": "横州镇", + "population": 128, + "area": 3464, + "areaCode": "0771", + "zipCode": "530300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696604749, + "parentId": 653116696600645, + "name": "隆安县", + "shortName": null, + "level": 3, + "code": "450123", + "pinyin": "LongAnXian", + "pinyinFirst": "LAX", + "capital": "城厢镇", + "population": 42, + "area": 2298, + "areaCode": "0771", + "zipCode": "532700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696604750, + "parentId": 653116696600645, + "name": "马山县", + "shortName": null, + "level": 3, + "code": "450124", + "pinyin": "MaShanXian", + "pinyinFirst": "MSX", + "capital": "白山镇", + "population": 57, + "area": 2345, + "areaCode": "0771", + "zipCode": "530600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696604751, + "parentId": 653116696600645, + "name": "上林县", + "shortName": null, + "level": 3, + "code": "450125", + "pinyin": "ShangLinXian", + "pinyinFirst": "SLX", + "capital": "大丰镇", + "population": 50, + "area": 1869, + "areaCode": "0771", + "zipCode": "530500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696604752, + "parentId": 653116696600645, + "name": "宾阳县", + "shortName": null, + "level": 3, + "code": "450126", + "pinyin": "BinYangXian", + "pinyinFirst": "BYX", + "capital": "宾州镇", + "population": 106, + "area": 2299, + "areaCode": "0771", + "zipCode": "530400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696735814, + "parentId": 653116694593605, + "name": "柳州市", + "shortName": null, + "level": 2, + "code": "450200", + "pinyin": "LiuZhouShi", + "pinyinFirst": "LZS", + "capital": "柳北区", + "population": 394, + "area": 18596, + "areaCode": "0772", + "zipCode": "545000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116696739909, + "parentId": 653116696735814, + "name": "柳北区", + "shortName": null, + "level": 3, + "code": "450205", + "pinyin": "LiuBeiQu", + "pinyinFirst": "LBQ", + "capital": "雀儿山街道", + "population": 36, + "area": 302, + "areaCode": "0772", + "zipCode": "545002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696739910, + "parentId": 653116696735814, + "name": "城中区", + "shortName": null, + "level": 3, + "code": "450202", + "pinyin": "ChengZhongQu", + "pinyinFirst": "CZQ", + "capital": "城中街道", + "population": 18, + "area": 78, + "areaCode": "0772", + "zipCode": "545001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696739911, + "parentId": 653116696735814, + "name": "鱼峰区", + "shortName": null, + "level": 3, + "code": "450203", + "pinyin": "YuFengQu", + "pinyinFirst": "YFQ", + "capital": "麒麟街道", + "population": 42, + "area": 473, + "areaCode": "0772", + "zipCode": "545005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696739912, + "parentId": 653116696735814, + "name": "柳南区", + "shortName": null, + "level": 3, + "code": "450204", + "pinyin": "LiuNanQu", + "pinyinFirst": "LNQ", + "capital": "潭西街道", + "population": 42, + "area": 552, + "areaCode": "0772", + "zipCode": "545007", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696739913, + "parentId": 653116696735814, + "name": "柳江区", + "shortName": null, + "level": 3, + "code": "450206", + "pinyin": "LiuJiangQu", + "pinyinFirst": "LJQ", + "capital": "拉堡镇", + "population": 48, + "area": 2149, + "areaCode": "0772", + "zipCode": "545100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696739914, + "parentId": 653116696735814, + "name": "柳城县", + "shortName": null, + "level": 3, + "code": "450222", + "pinyin": "LiuChengXian", + "pinyinFirst": "LCX", + "capital": "大埔镇", + "population": 41, + "area": 2114, + "areaCode": "0772", + "zipCode": "545200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696739915, + "parentId": 653116696735814, + "name": "鹿寨县", + "shortName": null, + "level": 3, + "code": "450223", + "pinyin": "LuZhaiXian", + "pinyinFirst": "LZX", + "capital": "鹿寨镇", + "population": 41, + "area": 2975, + "areaCode": "0772", + "zipCode": "545600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696739916, + "parentId": 653116696735814, + "name": "融安县", + "shortName": null, + "level": 3, + "code": "450224", + "pinyin": "RongAnXian", + "pinyinFirst": "RAX", + "capital": "长安镇", + "population": 33, + "area": 2898, + "areaCode": "0772", + "zipCode": "545400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696739917, + "parentId": 653116696735814, + "name": "融水苗族自治县", + "shortName": null, + "level": 3, + "code": "450225", + "pinyin": "RongShuiMiaoZuZiZhiXian", + "pinyinFirst": "RSMZZZX", + "capital": "融水镇", + "population": 52, + "area": 4638, + "areaCode": "0772", + "zipCode": "545300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696739918, + "parentId": 653116696735814, + "name": "三江侗族自治县", + "shortName": null, + "level": 3, + "code": "450226", + "pinyin": "SanJiangDongZuZiZhiXian", + "pinyinFirst": "SJDZZZX", + "capital": "古宜镇", + "population": 40, + "area": 2417, + "areaCode": "0772", + "zipCode": "545500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696866885, + "parentId": 653116694593605, + "name": "桂林市", + "shortName": null, + "level": 2, + "code": "450300", + "pinyin": "GuiLinShi", + "pinyinFirst": "GLS", + "capital": "临桂区", + "population": 541, + "area": 27845, + "areaCode": "0773", + "zipCode": "541000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116696870981, + "parentId": 653116696866885, + "name": "临桂区", + "shortName": null, + "level": 3, + "code": "450312", + "pinyin": "LinGuiQu", + "pinyinFirst": "LGQ", + "capital": "临桂镇", + "population": 53, + "area": 2247, + "areaCode": "0773", + "zipCode": "541100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870982, + "parentId": 653116696866885, + "name": "秀峰区", + "shortName": null, + "level": 3, + "code": "450302", + "pinyin": "XiuFengQu", + "pinyinFirst": "XFQ", + "capital": "丽君街道", + "population": 12, + "area": 54, + "areaCode": "0773", + "zipCode": "541001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870983, + "parentId": 653116696866885, + "name": "叠彩区", + "shortName": null, + "level": 3, + "code": "450303", + "pinyin": "DieCaiQu", + "pinyinFirst": "DCQ", + "capital": "北门街道", + "population": 16, + "area": 52, + "areaCode": "0773", + "zipCode": "541001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870984, + "parentId": 653116696866885, + "name": "象山区", + "shortName": null, + "level": 3, + "code": "450304", + "pinyin": "XiangShanQu", + "pinyinFirst": "XSQ", + "capital": "南门街道", + "population": 24, + "area": 88, + "areaCode": "0773", + "zipCode": "541002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870985, + "parentId": 653116696866885, + "name": "七星区", + "shortName": null, + "level": 3, + "code": "450305", + "pinyin": "QiXingQu", + "pinyinFirst": "QXQ", + "capital": "漓东街道", + "population": 23, + "area": 83, + "areaCode": "0773", + "zipCode": "541004", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870986, + "parentId": 653116696866885, + "name": "雁山区", + "shortName": null, + "level": 3, + "code": "450311", + "pinyin": "YanShanQu", + "pinyinFirst": "YSQ", + "capital": "雁山镇", + "population": 7, + "area": 288, + "areaCode": "0773", + "zipCode": "541006", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870987, + "parentId": 653116696866885, + "name": "阳朔县", + "shortName": null, + "level": 3, + "code": "450321", + "pinyin": "YangShuoXian", + "pinyinFirst": "YSX", + "capital": "阳朔镇", + "population": 33, + "area": 1428, + "areaCode": "0773", + "zipCode": "541900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870988, + "parentId": 653116696866885, + "name": "灵川县", + "shortName": null, + "level": 3, + "code": "450323", + "pinyin": "LingChuanXian", + "pinyinFirst": "LCX", + "capital": "灵川镇", + "population": 40, + "area": 2301, + "areaCode": "0773", + "zipCode": "541200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870989, + "parentId": 653116696866885, + "name": "全州县", + "shortName": null, + "level": 3, + "code": "450324", + "pinyin": "QuanZhouXian", + "pinyinFirst": "QZX", + "capital": "全州镇", + "population": 85, + "area": 4021, + "areaCode": "0773", + "zipCode": "541500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870990, + "parentId": 653116696866885, + "name": "兴安县", + "shortName": null, + "level": 3, + "code": "450325", + "pinyin": "XingAnXian", + "pinyinFirst": "XAX", + "capital": "兴安镇", + "population": 39, + "area": 2344, + "areaCode": "0773", + "zipCode": "541300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870991, + "parentId": 653116696866885, + "name": "永福县", + "shortName": null, + "level": 3, + "code": "450326", + "pinyin": "YongFuXian", + "pinyinFirst": "YFX", + "capital": "永福镇", + "population": 29, + "area": 2806, + "areaCode": "0773", + "zipCode": "541800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870992, + "parentId": 653116696866885, + "name": "灌阳县", + "shortName": null, + "level": 3, + "code": "450327", + "pinyin": "GuanYangXian", + "pinyinFirst": "GYX", + "capital": "灌阳镇", + "population": 30, + "area": 1837, + "areaCode": "0773", + "zipCode": "541600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870993, + "parentId": 653116696866885, + "name": "资源县", + "shortName": null, + "level": 3, + "code": "450329", + "pinyin": "ZiYuanXian", + "pinyinFirst": "ZYX", + "capital": "资源镇", + "population": 18, + "area": 1941, + "areaCode": "0773", + "zipCode": "541400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870994, + "parentId": 653116696866885, + "name": "平乐县", + "shortName": null, + "level": 3, + "code": "450330", + "pinyin": "PingLeXian", + "pinyinFirst": "PLX", + "capital": "平乐镇", + "population": 47, + "area": 1919, + "areaCode": "0773", + "zipCode": "542400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870995, + "parentId": 653116696866885, + "name": "荔浦市", + "shortName": null, + "level": 3, + "code": "450381", + "pinyin": "LiPuShi", + "pinyinFirst": "LPS", + "capital": "荔城镇", + "population": 39, + "area": 1759, + "areaCode": "0773", + "zipCode": "546600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870996, + "parentId": 653116696866885, + "name": "龙胜各族自治县", + "shortName": null, + "level": 3, + "code": "450328", + "pinyin": "LongShengGeZuZiZhiXian", + "pinyinFirst": "LSGZZZX", + "capital": "龙胜镇", + "population": 17, + "area": 2538, + "areaCode": "0773", + "zipCode": "541700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116696870997, + "parentId": 653116696866885, + "name": "恭城瑶族自治县", + "shortName": null, + "level": 3, + "code": "450332", + "pinyin": "GongChengYaoZuZiZhiXian", + "pinyinFirst": "GCYZZZX", + "capital": "恭城镇", + "population": 30, + "area": 2139, + "areaCode": "0773", + "zipCode": "542500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697284677, + "parentId": 653116694593605, + "name": "梧州市", + "shortName": null, + "level": 2, + "code": "450400", + "pinyin": "WuZhouShi", + "pinyinFirst": "WZS", + "capital": "长洲区", + "population": 353, + "area": 12572, + "areaCode": "0774", + "zipCode": "543000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116697288773, + "parentId": 653116697284677, + "name": "长洲区", + "shortName": null, + "level": 3, + "code": "450405", + "pinyin": "ChangZhouQu", + "pinyinFirst": "CZQ", + "capital": "大塘街道", + "population": 20, + "area": 372, + "areaCode": "0774", + "zipCode": "543003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697288774, + "parentId": 653116697284677, + "name": "万秀区", + "shortName": null, + "level": 3, + "code": "450403", + "pinyin": "WanXiuQu", + "pinyinFirst": "WXQ", + "capital": "城南街道", + "population": 29, + "area": 449, + "areaCode": "0774", + "zipCode": "543000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697288775, + "parentId": 653116697284677, + "name": "龙圩区", + "shortName": null, + "level": 3, + "code": "450406", + "pinyin": "LongWeiQu", + "pinyinFirst": "LWQ", + "capital": "龙圩镇", + "population": 32, + "area": 971, + "areaCode": "0774", + "zipCode": "543002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697288776, + "parentId": 653116697284677, + "name": "岑溪市", + "shortName": null, + "level": 3, + "code": "450481", + "pinyin": "CenXiShi", + "pinyinFirst": "CXS", + "capital": "岑城镇", + "population": 97, + "area": 2770, + "areaCode": "0774", + "zipCode": "543200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697288777, + "parentId": 653116697284677, + "name": "苍梧县", + "shortName": null, + "level": 3, + "code": "450421", + "pinyin": "CangWuXian", + "pinyinFirst": "CWX", + "capital": "石桥镇", + "population": 41, + "area": 2782, + "areaCode": "0774", + "zipCode": "543100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697288778, + "parentId": 653116697284677, + "name": "藤县", + "shortName": null, + "level": 3, + "code": "450422", + "pinyin": "TengXian", + "pinyinFirst": "TX", + "capital": "藤州镇", + "population": 112, + "area": 3946, + "areaCode": "0774", + "zipCode": "543300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697288779, + "parentId": 653116697284677, + "name": "蒙山县", + "shortName": null, + "level": 3, + "code": "450423", + "pinyin": "MengShanXian", + "pinyinFirst": "MSX", + "capital": "蒙山镇", + "population": 22, + "area": 1282, + "areaCode": "0774", + "zipCode": "546700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697493573, + "parentId": 653116694593605, + "name": "北海市", + "shortName": null, + "level": 2, + "code": "450500", + "pinyin": "BeiHaiShi", + "pinyinFirst": "BHS", + "capital": "海城区", + "population": 180, + "area": 3989, + "areaCode": "0779", + "zipCode": "536000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116697497669, + "parentId": 653116697493573, + "name": "海城区", + "shortName": null, + "level": 3, + "code": "450502", + "pinyin": "HaiChengQu", + "pinyinFirst": "HCQ", + "capital": "中街街道", + "population": 33, + "area": 182, + "areaCode": "0779", + "zipCode": "536000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697497670, + "parentId": 653116697493573, + "name": "银海区", + "shortName": null, + "level": 3, + "code": "450503", + "pinyin": "YinHaiQu", + "pinyinFirst": "YHQ", + "capital": "银滩镇", + "population": 19, + "area": 541, + "areaCode": "0779", + "zipCode": "536000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697497671, + "parentId": 653116697493573, + "name": "铁山港区", + "shortName": null, + "level": 3, + "code": "450512", + "pinyin": "TieShanGangQu", + "pinyinFirst": "TSGQ", + "capital": "南康镇", + "population": 19, + "area": 503, + "areaCode": "0779", + "zipCode": "536017", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697497672, + "parentId": 653116697493573, + "name": "合浦县", + "shortName": null, + "level": 3, + "code": "450521", + "pinyin": "HePuXian", + "pinyinFirst": "HPX", + "capital": "廉州镇", + "population": 110, + "area": 2762, + "areaCode": "0779", + "zipCode": "536100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697714757, + "parentId": 653116694593605, + "name": "防城港市", + "shortName": null, + "level": 2, + "code": "450600", + "pinyin": "FangChengGangShi", + "pinyinFirst": "FCGS", + "capital": "港口区", + "population": 100, + "area": 6239, + "areaCode": "0770", + "zipCode": "538000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116697718853, + "parentId": 653116697714757, + "name": "港口区", + "shortName": null, + "level": 3, + "code": "450602", + "pinyin": "GangKouQu", + "pinyinFirst": "GKQ", + "capital": "渔洲坪街道", + "population": 15, + "area": 410, + "areaCode": "0770", + "zipCode": "538001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697718854, + "parentId": 653116697714757, + "name": "防城区", + "shortName": null, + "level": 3, + "code": "450603", + "pinyin": "FangChengQu", + "pinyinFirst": "FCQ", + "capital": "珠河街道", + "population": 45, + "area": 2426, + "areaCode": "0770", + "zipCode": "538021", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697718855, + "parentId": 653116697714757, + "name": "东兴市", + "shortName": null, + "level": 3, + "code": "450681", + "pinyin": "DongXingShi", + "pinyinFirst": "DXS", + "capital": "东兴镇", + "population": 16, + "area": 589, + "areaCode": "0770", + "zipCode": "538100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697718856, + "parentId": 653116697714757, + "name": "上思县", + "shortName": null, + "level": 3, + "code": "450621", + "pinyin": "ShangSiXian", + "pinyinFirst": "SSX", + "capital": "思阳镇", + "population": 25, + "area": 2814, + "areaCode": "0770", + "zipCode": "535500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697870405, + "parentId": 653116694593605, + "name": "钦州市", + "shortName": null, + "level": 2, + "code": "450700", + "pinyin": "QinZhouShi", + "pinyinFirst": "QZS", + "capital": "钦南区", + "population": 418, + "area": 10884, + "areaCode": "0777", + "zipCode": "535099", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116697874501, + "parentId": 653116697870405, + "name": "钦南区", + "shortName": null, + "level": 3, + "code": "450702", + "pinyin": "QinNanQu", + "pinyinFirst": "QNQ", + "capital": "水东街道", + "population": 66, + "area": 2573, + "areaCode": "0777", + "zipCode": "535099", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697874502, + "parentId": 653116697870405, + "name": "钦北区", + "shortName": null, + "level": 3, + "code": "450703", + "pinyin": "QinBeiQu", + "pinyinFirst": "QBQ", + "capital": "长田街道", + "population": 88, + "area": 2240, + "areaCode": "0777", + "zipCode": "535099", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697874503, + "parentId": 653116697870405, + "name": "灵山县", + "shortName": null, + "level": 3, + "code": "450721", + "pinyin": "LingShanXian", + "pinyinFirst": "LSX", + "capital": "灵城街道", + "population": 168, + "area": 3550, + "areaCode": "0777", + "zipCode": "535499", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116697874504, + "parentId": 653116697870405, + "name": "浦北县", + "shortName": null, + "level": 3, + "code": "450722", + "pinyin": "PuBeiXian", + "pinyinFirst": "PBX", + "capital": "江城街道", + "population": 96, + "area": 2521, + "areaCode": "0777", + "zipCode": "535399", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698046533, + "parentId": 653116694593605, + "name": "贵港市", + "shortName": null, + "level": 2, + "code": "450800", + "pinyin": "GuiGangShi", + "pinyinFirst": "GGS", + "capital": "港北区", + "population": 565, + "area": 10470, + "areaCode": "0775", + "zipCode": "537000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116698050629, + "parentId": 653116698046533, + "name": "港北区", + "shortName": null, + "level": 3, + "code": "450802", + "pinyin": "GangBeiQu", + "pinyinFirst": "GBQ", + "capital": "贵城街道", + "population": 74, + "area": 806, + "areaCode": "0775", + "zipCode": "537100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698050630, + "parentId": 653116698046533, + "name": "港南区", + "shortName": null, + "level": 3, + "code": "450803", + "pinyin": "GangNanQu", + "pinyinFirst": "GNQ", + "capital": "江南街道", + "population": 71, + "area": 1099, + "areaCode": "0775", + "zipCode": "537100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698050631, + "parentId": 653116698046533, + "name": "覃塘区", + "shortName": null, + "level": 3, + "code": "450804", + "pinyin": "TanTangQu", + "pinyinFirst": "TTQ", + "capital": "覃塘街道", + "population": 61, + "area": 1502, + "areaCode": "0775", + "zipCode": "537121", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698050632, + "parentId": 653116698046533, + "name": "桂平市", + "shortName": null, + "level": 3, + "code": "450881", + "pinyin": "GuiPingShi", + "pinyinFirst": "GPS", + "capital": "西山镇", + "population": 204, + "area": 4074, + "areaCode": "0775", + "zipCode": "537200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698050633, + "parentId": 653116698046533, + "name": "平南县", + "shortName": null, + "level": 3, + "code": "450821", + "pinyin": "PingNanXian", + "pinyinFirst": "PNX", + "capital": "平南街道", + "population": 155, + "area": 2989, + "areaCode": "0775", + "zipCode": "537300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698210373, + "parentId": 653116694593605, + "name": "玉林市", + "shortName": null, + "level": 2, + "code": "450900", + "pinyin": "YuLinShi", + "pinyinFirst": "YLS", + "capital": "玉州区", + "population": 737, + "area": 12881, + "areaCode": "0775", + "zipCode": "537000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116698214469, + "parentId": 653116698210373, + "name": "玉州区", + "shortName": null, + "level": 3, + "code": "450902", + "pinyin": "YuZhouQu", + "pinyinFirst": "YZQ", + "capital": "玉城街道", + "population": 71, + "area": 464, + "areaCode": "0775", + "zipCode": "537000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698214470, + "parentId": 653116698210373, + "name": "福绵区", + "shortName": null, + "level": 3, + "code": "450903", + "pinyin": "FuMianQu", + "pinyinFirst": "FMQ", + "capital": "福绵镇", + "population": 44, + "area": 829, + "areaCode": "0775", + "zipCode": "537023", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698214471, + "parentId": 653116698210373, + "name": "北流市", + "shortName": null, + "level": 3, + "code": "450981", + "pinyin": "BeiLiuShi", + "pinyinFirst": "BLS", + "capital": "陵城街道", + "population": 155, + "area": 2457, + "areaCode": "0775", + "zipCode": "537400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698214472, + "parentId": 653116698210373, + "name": "容县", + "shortName": null, + "level": 3, + "code": "450921", + "pinyin": "RongXian", + "pinyinFirst": "RX", + "capital": "容州镇", + "population": 88, + "area": 2257, + "areaCode": "0775", + "zipCode": "537500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698214473, + "parentId": 653116698210373, + "name": "陆川县", + "shortName": null, + "level": 3, + "code": "450922", + "pinyin": "LuChuanXian", + "pinyinFirst": "LCX", + "capital": "温泉镇", + "population": 111, + "area": 1551, + "areaCode": "0775", + "zipCode": "537700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698214474, + "parentId": 653116698210373, + "name": "博白县", + "shortName": null, + "level": 3, + "code": "450923", + "pinyin": "BoBaiXian", + "pinyinFirst": "BBX", + "capital": "博白镇", + "population": 191, + "area": 3836, + "areaCode": "0775", + "zipCode": "537600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698214475, + "parentId": 653116698210373, + "name": "兴业县", + "shortName": null, + "level": 3, + "code": "450924", + "pinyin": "XingYeXian", + "pinyinFirst": "XYX", + "capital": "石南镇", + "population": 76, + "area": 1487, + "areaCode": "0775", + "zipCode": "537800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698394693, + "parentId": 653116694593605, + "name": "百色市", + "shortName": null, + "level": 2, + "code": "451000", + "pinyin": "BaiSeShi", + "pinyinFirst": "BSS", + "capital": "右江区", + "population": 423, + "area": 36206, + "areaCode": "0776", + "zipCode": "533000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116698394694, + "parentId": 653116698394693, + "name": "右江区", + "shortName": null, + "level": 3, + "code": "451002", + "pinyin": "YouJiangQu", + "pinyinFirst": "YJQ", + "capital": "百城街道", + "population": 37, + "area": 3717, + "areaCode": "0776", + "zipCode": "533000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698394695, + "parentId": 653116698394693, + "name": "田阳区", + "shortName": null, + "level": 3, + "code": "451003", + "pinyin": "TianYangQu", + "pinyinFirst": "TYQ", + "capital": "田州镇", + "population": 36, + "area": 2373, + "areaCode": "0776", + "zipCode": "533600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698394696, + "parentId": 653116698394693, + "name": "靖西市", + "shortName": null, + "level": 3, + "code": "451081", + "pinyin": "JingXiShi", + "pinyinFirst": "JXS", + "capital": "新靖镇", + "population": 66, + "area": 3232, + "areaCode": "0776", + "zipCode": "533800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698394697, + "parentId": 653116698394693, + "name": "平果市", + "shortName": null, + "level": 3, + "code": "451082", + "pinyin": "PingGuoShi", + "pinyinFirst": "PGS", + "capital": "马头镇", + "population": 46, + "area": 2485, + "areaCode": "0776", + "zipCode": "531400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698394698, + "parentId": 653116698394693, + "name": "田东县", + "shortName": null, + "level": 3, + "code": "451022", + "pinyin": "TianDongXian", + "pinyinFirst": "TDX", + "capital": "平马镇", + "population": 44, + "area": 2816, + "areaCode": "0776", + "zipCode": "531500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698394699, + "parentId": 653116698394693, + "name": "德保县", + "shortName": null, + "level": 3, + "code": "451024", + "pinyin": "DeBaoXian", + "pinyinFirst": "DBX", + "capital": "城关镇", + "population": 37, + "area": 2575, + "areaCode": "0776", + "zipCode": "533700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698394700, + "parentId": 653116698394693, + "name": "那坡县", + "shortName": null, + "level": 3, + "code": "451026", + "pinyin": "NaPoXian", + "pinyinFirst": "NPX", + "capital": "城厢镇", + "population": 22, + "area": 2231, + "areaCode": "0776", + "zipCode": "533900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698394701, + "parentId": 653116698394693, + "name": "凌云县", + "shortName": null, + "level": 3, + "code": "451027", + "pinyin": "LingYunXian", + "pinyinFirst": "LYX", + "capital": "泗城镇", + "population": 23, + "area": 2053, + "areaCode": "0776", + "zipCode": "533100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698394702, + "parentId": 653116698394693, + "name": "乐业县", + "shortName": null, + "level": 3, + "code": "451028", + "pinyin": "LeYeXian", + "pinyinFirst": "LYX", + "capital": "同乐镇", + "population": 18, + "area": 2633, + "areaCode": "0776", + "zipCode": "533200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698394703, + "parentId": 653116698394693, + "name": "田林县", + "shortName": null, + "level": 3, + "code": "451029", + "pinyin": "TianLinXian", + "pinyinFirst": "TLX", + "capital": "乐里镇", + "population": 27, + "area": 5577, + "areaCode": "0776", + "zipCode": "533300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698394704, + "parentId": 653116698394693, + "name": "西林县", + "shortName": null, + "level": 3, + "code": "451030", + "pinyin": "XiLinXian", + "pinyinFirst": "XLX", + "capital": "八达镇", + "population": 16, + "area": 2997, + "areaCode": "0776", + "zipCode": "533500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698394705, + "parentId": 653116698394693, + "name": "隆林各族自治县", + "shortName": null, + "level": 3, + "code": "451031", + "pinyin": "LongLinGeZuZiZhiXian", + "pinyinFirst": "LLGZZZX", + "capital": "新州镇", + "population": 44, + "area": 3518, + "areaCode": "0776", + "zipCode": "533400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698595397, + "parentId": 653116694593605, + "name": "贺州市", + "shortName": null, + "level": 2, + "code": "451100", + "pinyin": "HeZhouShi", + "pinyinFirst": "HZS", + "capital": "八步区", + "population": 248, + "area": 11754, + "areaCode": "0774", + "zipCode": "542800", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116698599493, + "parentId": 653116698595397, + "name": "八步区", + "shortName": null, + "level": 3, + "code": "451102", + "pinyin": "BaBuQu", + "pinyinFirst": "BBQ", + "capital": "八步街道", + "population": 76, + "area": 3667, + "areaCode": "0774", + "zipCode": "542899", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698599494, + "parentId": 653116698595397, + "name": "平桂区", + "shortName": null, + "level": 3, + "code": "451103", + "pinyin": "PingGuiQu", + "pinyinFirst": "PGQ", + "capital": "西湾街道", + "population": 47, + "area": 1851, + "areaCode": "0774", + "zipCode": "542827", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698599495, + "parentId": 653116698595397, + "name": "昭平县", + "shortName": null, + "level": 3, + "code": "451121", + "pinyin": "ZhaoPingXian", + "pinyinFirst": "ZPX", + "capital": "昭平镇", + "population": 45, + "area": 3224, + "areaCode": "0774", + "zipCode": "546800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698599496, + "parentId": 653116698595397, + "name": "钟山县", + "shortName": null, + "level": 3, + "code": "451122", + "pinyin": "ZhongShanXian", + "pinyinFirst": "ZSX", + "capital": "钟山镇", + "population": 46, + "area": 1472, + "areaCode": "0774", + "zipCode": "542600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698599497, + "parentId": 653116698595397, + "name": "富川瑶族自治县", + "shortName": null, + "level": 3, + "code": "451123", + "pinyin": "FuChuanYaoZuZiZhiXian", + "pinyinFirst": "FCYZZZX", + "capital": "富阳镇", + "population": 34, + "area": 1540, + "areaCode": "0774", + "zipCode": "542700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698783813, + "parentId": 653116694593605, + "name": "河池市", + "shortName": null, + "level": 2, + "code": "451200", + "pinyin": "HeChiShi", + "pinyinFirst": "HCS", + "capital": "宜州区", + "population": 434, + "area": 33527, + "areaCode": "0778", + "zipCode": "547000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116698787909, + "parentId": 653116698783813, + "name": "宜州区", + "shortName": null, + "level": 3, + "code": "451203", + "pinyin": "YiZhouQu", + "pinyinFirst": "YZQ", + "capital": "庆远镇", + "population": 67, + "area": 3869, + "areaCode": "0778", + "zipCode": "546300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698787910, + "parentId": 653116698783813, + "name": "金城江区", + "shortName": null, + "level": 3, + "code": "451202", + "pinyin": "JinChengJiangQu", + "pinyinFirst": "JCJQ", + "capital": "金城江街道", + "population": 35, + "area": 2346, + "areaCode": "0778", + "zipCode": "547000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698787911, + "parentId": 653116698783813, + "name": "南丹县", + "shortName": null, + "level": 3, + "code": "451221", + "pinyin": "NanDanXian", + "pinyinFirst": "NDX", + "capital": "城关镇", + "population": 33, + "area": 3916, + "areaCode": "0778", + "zipCode": "547200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698787912, + "parentId": 653116698783813, + "name": "天峨县", + "shortName": null, + "level": 3, + "code": "451222", + "pinyin": "TianEXian", + "pinyinFirst": "TEX", + "capital": "六排镇", + "population": 18, + "area": 3196, + "areaCode": "0778", + "zipCode": "547300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698787913, + "parentId": 653116698783813, + "name": "凤山县", + "shortName": null, + "level": 3, + "code": "451223", + "pinyin": "FengShanXian", + "pinyinFirst": "FSX", + "capital": "凤城镇", + "population": 22, + "area": 1738, + "areaCode": "0778", + "zipCode": "547600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698787914, + "parentId": 653116698783813, + "name": "东兰县", + "shortName": null, + "level": 3, + "code": "451224", + "pinyin": "DongLanXian", + "pinyinFirst": "DLX", + "capital": "东兰镇", + "population": 31, + "area": 2435, + "areaCode": "0778", + "zipCode": "547400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698787915, + "parentId": 653116698783813, + "name": "罗城仫佬族自治县", + "shortName": null, + "level": 3, + "code": "451225", + "pinyin": "LuoChengMuLaoZuZiZhiXian", + "pinyinFirst": "LCMLZZZX", + "capital": "东门镇", + "population": 39, + "area": 3651, + "areaCode": "0778", + "zipCode": "546400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698787916, + "parentId": 653116698783813, + "name": "环江毛南族自治县", + "shortName": null, + "level": 3, + "code": "451226", + "pinyin": "HuanJiangMaoNanZuZiZhiXian", + "pinyinFirst": "HJMNZZZX", + "capital": "思恩镇", + "population": 38, + "area": 4572, + "areaCode": "0778", + "zipCode": "547100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698787917, + "parentId": 653116698783813, + "name": "巴马瑶族自治县", + "shortName": null, + "level": 3, + "code": "451227", + "pinyin": "BaMaYaoZuZiZhiXian", + "pinyinFirst": "BMYZZZX", + "capital": "巴马镇", + "population": 30, + "area": 1971, + "areaCode": "0778", + "zipCode": "547500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698787918, + "parentId": 653116698783813, + "name": "都安瑶族自治县", + "shortName": null, + "level": 3, + "code": "451228", + "pinyin": "DuAnYaoZuZiZhiXian", + "pinyinFirst": "DAYZZZX", + "capital": "安阳镇", + "population": 73, + "area": 4088, + "areaCode": "0778", + "zipCode": "530700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116698787919, + "parentId": 653116698783813, + "name": "大化瑶族自治县", + "shortName": null, + "level": 3, + "code": "451229", + "pinyin": "DaHuaYaoZuZiZhiXian", + "pinyinFirst": "DHYZZZX", + "capital": "大化镇", + "population": 49, + "area": 2750, + "areaCode": "0778", + "zipCode": "530800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116699004997, + "parentId": 653116694593605, + "name": "来宾市", + "shortName": null, + "level": 2, + "code": "451300", + "pinyin": "LaiBinShi", + "pinyinFirst": "LBS", + "capital": "兴宾区", + "population": 270, + "area": 13411, + "areaCode": "0772", + "zipCode": "546100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116699009093, + "parentId": 653116699004997, + "name": "兴宾区", + "shortName": null, + "level": 3, + "code": "451302", + "pinyin": "XingBinQu", + "pinyinFirst": "XBQ", + "capital": "城东街道", + "population": 115, + "area": 4403, + "areaCode": "0772", + "zipCode": "546100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116699009094, + "parentId": 653116699004997, + "name": "合山市", + "shortName": null, + "level": 3, + "code": "451381", + "pinyin": "HeShanShi", + "pinyinFirst": "HSS", + "capital": "岭南镇", + "population": 13, + "area": 360, + "areaCode": "0772", + "zipCode": "546500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116699009095, + "parentId": 653116699004997, + "name": "忻城县", + "shortName": null, + "level": 3, + "code": "451321", + "pinyin": "XinChengXian", + "pinyinFirst": "XCX", + "capital": "城关镇", + "population": 43, + "area": 2541, + "areaCode": "0772", + "zipCode": "546200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116699009096, + "parentId": 653116699004997, + "name": "象州县", + "shortName": null, + "level": 3, + "code": "451322", + "pinyin": "XiangZhouXian", + "pinyinFirst": "XZX", + "capital": "象州镇", + "population": 37, + "area": 1898, + "areaCode": "0772", + "zipCode": "545800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116699009097, + "parentId": 653116699004997, + "name": "武宣县", + "shortName": null, + "level": 3, + "code": "451323", + "pinyin": "WuXuanXian", + "pinyinFirst": "WXX", + "capital": "武宣镇", + "population": 46, + "area": 1739, + "areaCode": "0772", + "zipCode": "545900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116699009098, + "parentId": 653116699004997, + "name": "金秀瑶族自治县", + "shortName": null, + "level": 3, + "code": "451324", + "pinyin": "JinXiuYaoZuZiZhiXian", + "pinyinFirst": "JXYZZZX", + "capital": "金秀镇", + "population": 16, + "area": 2470, + "areaCode": "0772", + "zipCode": "545700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116699275333, + "parentId": 653116694593605, + "name": "崇左市", + "shortName": null, + "level": 2, + "code": "451400", + "pinyin": "ChongZuoShi", + "pinyinFirst": "CZS", + "capital": "江州区", + "population": 252, + "area": 17331, + "areaCode": "0771", + "zipCode": "532200", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116699279429, + "parentId": 653116699275333, + "name": "江州区", + "shortName": null, + "level": 3, + "code": "451402", + "pinyin": "JiangZhouQu", + "pinyinFirst": "JZQ", + "capital": "江南街道", + "population": 38, + "area": 2918, + "areaCode": "0771", + "zipCode": "532299", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116699279430, + "parentId": 653116699275333, + "name": "凭祥市", + "shortName": null, + "level": 3, + "code": "451481", + "pinyin": "PingXiangShi", + "pinyinFirst": "PXS", + "capital": "凭祥镇", + "population": 12, + "area": 645, + "areaCode": "0771", + "zipCode": "532600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116699279431, + "parentId": 653116699275333, + "name": "扶绥县", + "shortName": null, + "level": 3, + "code": "451421", + "pinyin": "FuSuiXian", + "pinyinFirst": "FSX", + "capital": "新宁镇", + "population": 46, + "area": 2841, + "areaCode": "0771", + "zipCode": "532100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116699279432, + "parentId": 653116699275333, + "name": "宁明县", + "shortName": null, + "level": 3, + "code": "451422", + "pinyin": "NingMingXian", + "pinyinFirst": "NMX", + "capital": "城中镇", + "population": 44, + "area": 3704, + "areaCode": "0771", + "zipCode": "532500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116699279433, + "parentId": 653116699275333, + "name": "龙州县", + "shortName": null, + "level": 3, + "code": "451423", + "pinyin": "LongZhouXian", + "pinyinFirst": "LZX", + "capital": "龙州镇", + "population": 27, + "area": 2311, + "areaCode": "0771", + "zipCode": "532400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116699279434, + "parentId": 653116699275333, + "name": "大新县", + "shortName": null, + "level": 3, + "code": "451424", + "pinyin": "DaXinXian", + "pinyinFirst": "DXX", + "capital": "桃城镇", + "population": 39, + "area": 2747, + "areaCode": "0771", + "zipCode": "532300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116699279435, + "parentId": 653116699275333, + "name": "天等县", + "shortName": null, + "level": 3, + "code": "451425", + "pinyin": "TianDengXian", + "pinyinFirst": "TDX", + "capital": "天等镇", + "population": 46, + "area": 2165, + "areaCode": "0771", + "zipCode": "532800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116699533381, + "parentId": 0, + "name": "海南省", + "shortName": "琼", + "level": 1, + "code": "460000", + "pinyin": "HaiNanSheng", + "pinyinFirst": "HNS", + "capital": null, + "population": null, + "area": null, + "areaCode": "", + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116701102149, + "parentId": 653116699533381, + "name": "海口市", + "shortName": null, + "level": 2, + "code": "460100", + "pinyin": "HaiKouShi", + "pinyinFirst": "HKS", + "capital": "龙华区", + "population": 183, + "area": 2315, + "areaCode": "0898", + "zipCode": "570000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116701102150, + "parentId": 653116701102149, + "name": "龙华区", + "shortName": null, + "level": 3, + "code": "460106", + "pinyin": "LongHuaQu", + "pinyinFirst": "LHQ", + "capital": "金贸街道", + "population": 50, + "area": 300, + "areaCode": "0898", + "zipCode": "570100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701102151, + "parentId": 653116701102149, + "name": "秀英区", + "shortName": null, + "level": 3, + "code": "460105", + "pinyin": "XiuYingQu", + "pinyinFirst": "XYQ", + "capital": "秀英街道", + "population": 36, + "area": 512, + "areaCode": "0898", + "zipCode": "570100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701102152, + "parentId": 653116701102149, + "name": "琼山区", + "shortName": null, + "level": 3, + "code": "460107", + "pinyin": "QiongShanQu", + "pinyinFirst": "QSQ", + "capital": "府城街道", + "population": 41, + "area": 940, + "areaCode": "0898", + "zipCode": "571100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701102153, + "parentId": 653116701102149, + "name": "美兰区", + "shortName": null, + "level": 3, + "code": "460108", + "pinyin": "MeiLanQu", + "pinyinFirst": "MLQ", + "capital": "白龙街道", + "population": 55, + "area": 563, + "areaCode": "0898", + "zipCode": "570100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701159493, + "parentId": 653116699533381, + "name": "三亚市", + "shortName": null, + "level": 2, + "code": "460200", + "pinyin": "SanYaShi", + "pinyinFirst": "SYS", + "capital": "吉阳区", + "population": 63, + "area": 1918, + "areaCode": "0898", + "zipCode": "572000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116701159494, + "parentId": 653116701159493, + "name": "吉阳区", + "shortName": null, + "level": 3, + "code": "460203", + "pinyin": "JiYangQu", + "pinyinFirst": "JYQ", + "capital": "迎宾路", + "population": 19, + "area": 372, + "areaCode": "0898", + "zipCode": "572099", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701159495, + "parentId": 653116701159493, + "name": "海棠区", + "shortName": null, + "level": 3, + "code": "460202", + "pinyin": "HaiTangQu", + "pinyinFirst": "HTQ", + "capital": "新民路", + "population": 8, + "area": 255, + "areaCode": "0898", + "zipCode": "572013", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701159496, + "parentId": 653116701159493, + "name": "天涯区", + "shortName": null, + "level": 3, + "code": "460204", + "pinyin": "TianYaQu", + "pinyinFirst": "TYQ", + "capital": "凤凰路", + "population": 26, + "area": 944, + "areaCode": "0898", + "zipCode": "572100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701159497, + "parentId": 653116701159493, + "name": "崖州区", + "shortName": null, + "level": 3, + "code": "460205", + "pinyin": "YaZhouQu", + "pinyinFirst": "YZQ", + "capital": "水南大道", + "population": 10, + "area": 347, + "areaCode": "0898", + "zipCode": "572024", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701237317, + "parentId": 653116699533381, + "name": "三沙市", + "shortName": null, + "level": 2, + "code": "460300", + "pinyin": "SanShaShi", + "pinyinFirst": "SSS", + "capital": "西沙永兴岛", + "population": null, + "area": null, + "areaCode": "0898", + "zipCode": "573100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116701237318, + "parentId": 653116701237317, + "name": "西沙区", + "shortName": null, + "level": 3, + "code": "460302", + "pinyin": "XiShaQu", + "pinyinFirst": "XSQ", + "capital": "永兴岛", + "population": null, + "area": null, + "areaCode": "0898", + "zipCode": "573199", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701237319, + "parentId": 653116701237317, + "name": "南沙区", + "shortName": null, + "level": 3, + "code": "460303", + "pinyin": "NanShaQu", + "pinyinFirst": "NSQ", + "capital": "永暑礁", + "population": null, + "area": null, + "areaCode": "0898", + "zipCode": "573299", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701331525, + "parentId": 653116699533381, + "name": "儋州市", + "shortName": null, + "level": 2, + "code": "460400", + "pinyin": "DanZhouShi", + "pinyinFirst": "DZS", + "capital": "那大镇", + "population": 106, + "area": 3400, + "areaCode": "0898", + "zipCode": "571700", + "sort": null, + "hot": false, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701421637, + "parentId": 653116699533381, + "name": "省直辖县级行政单位", + "shortName": null, + "level": 2, + "code": "653116701421637", + "pinyin": "ShengZhiXiaXianJiXingZhengDanWei", + "pinyinFirst": "SZXXJXZDW", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116701421638, + "parentId": 653116701421637, + "name": "五指山市", + "shortName": null, + "level": 3, + "code": "469001", + "pinyin": "WuZhiShanShi", + "pinyinFirst": "WZSS", + "capital": "通什镇", + "population": 11, + "area": 1130, + "areaCode": "0898", + "zipCode": "572200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701421639, + "parentId": 653116701421637, + "name": "琼海市", + "shortName": null, + "level": 3, + "code": "469002", + "pinyin": "QiongHaiShi", + "pinyinFirst": "QHS", + "capital": "嘉积镇", + "population": 52, + "area": 1692, + "areaCode": "0898", + "zipCode": "571400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701421640, + "parentId": 653116701421637, + "name": "文昌市", + "shortName": null, + "level": 3, + "code": "469005", + "pinyin": "WenChangShi", + "pinyinFirst": "WCS", + "capital": "文城镇", + "population": 60, + "area": 2486, + "areaCode": "0898", + "zipCode": "571300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701421641, + "parentId": 653116701421637, + "name": "万宁市", + "shortName": null, + "level": 3, + "code": "469006", + "pinyin": "WanNingShi", + "pinyinFirst": "WNS", + "capital": "万城镇", + "population": 64, + "area": 1883, + "areaCode": "0898", + "zipCode": "571500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701421642, + "parentId": 653116701421637, + "name": "东方市", + "shortName": null, + "level": 3, + "code": "469007", + "pinyin": "DongFangShi", + "pinyinFirst": "DFS", + "capital": "八所镇", + "population": 46, + "area": 2272, + "areaCode": "0898", + "zipCode": "572600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701421643, + "parentId": 653116701421637, + "name": "定安县", + "shortName": null, + "level": 3, + "code": "469021", + "pinyin": "DingAnXian", + "pinyinFirst": "DAX", + "capital": "定城镇", + "population": 35, + "area": 1196, + "areaCode": "0898", + "zipCode": "571200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701421644, + "parentId": 653116701421637, + "name": "屯昌县", + "shortName": null, + "level": 3, + "code": "469022", + "pinyin": "TunChangXian", + "pinyinFirst": "TCX", + "capital": "屯城镇", + "population": 31, + "area": 1224, + "areaCode": "0898", + "zipCode": "571600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701421645, + "parentId": 653116701421637, + "name": "澄迈县", + "shortName": null, + "level": 3, + "code": "469023", + "pinyin": "ChengMaiXian", + "pinyinFirst": "CMX", + "capital": "金江镇", + "population": 57, + "area": 2068, + "areaCode": "0898", + "zipCode": "571900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701421646, + "parentId": 653116701421637, + "name": "临高县", + "shortName": null, + "level": 3, + "code": "469024", + "pinyin": "LinGaoXian", + "pinyinFirst": "LGX", + "capital": "临城镇", + "population": 51, + "area": 1317, + "areaCode": "0898", + "zipCode": "571800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701421647, + "parentId": 653116701421637, + "name": "白沙黎族自治县", + "shortName": null, + "level": 3, + "code": "469025", + "pinyin": "BaiShaLiZuZiZhiXian", + "pinyinFirst": "BSLZZZX", + "capital": "牙叉镇", + "population": 20, + "area": 2117, + "areaCode": "0898", + "zipCode": "572800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701421648, + "parentId": 653116701421637, + "name": "昌江黎族自治县", + "shortName": null, + "level": 3, + "code": "469026", + "pinyin": "ChangJiangLiZuZiZhiXian", + "pinyinFirst": "CJLZZZX", + "capital": "石碌镇", + "population": 26, + "area": 1596, + "areaCode": "0898", + "zipCode": "572700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701421649, + "parentId": 653116701421637, + "name": "乐东黎族自治县", + "shortName": null, + "level": 3, + "code": "469027", + "pinyin": "LeDongLiZuZiZhiXian", + "pinyinFirst": "LDLZZZX", + "capital": "抱由镇", + "population": 55, + "area": 2763, + "areaCode": "0898", + "zipCode": "572500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701421650, + "parentId": 653116701421637, + "name": "陵水黎族自治县", + "shortName": null, + "level": 3, + "code": "469028", + "pinyin": "LingShuiLiZuZiZhiXian", + "pinyinFirst": "LSLZZZX", + "capital": "椰林镇", + "population": 39, + "area": 1128, + "areaCode": "0898", + "zipCode": "572400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701421651, + "parentId": 653116701421637, + "name": "保亭黎族苗族自治县", + "shortName": null, + "level": 3, + "code": "469029", + "pinyin": "BaoTingLiZuMiaoZuZiZhiXian", + "pinyinFirst": "BTLZMZZZX", + "capital": "保城镇", + "population": 17, + "area": 1161, + "areaCode": "0898", + "zipCode": "572300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701425733, + "parentId": 653116701421637, + "name": "琼中黎族苗族自治县", + "shortName": null, + "level": 3, + "code": "469030", + "pinyin": "QiongZhongLiZuMiaoZuZiZhiXian", + "pinyinFirst": "QZLZMZZZX", + "capital": "营根镇", + "population": 22, + "area": 2704, + "areaCode": "0898", + "zipCode": "572900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:41", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:14" + }, + { + "id": 653116701536325, + "parentId": 0, + "name": "重庆市", + "shortName": "渝", + "level": 1, + "code": "500000", + "pinyin": "ChongQingShi", + "pinyinFirst": "CQS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116703354949, + "parentId": 653116701536325, + "name": "重庆市", + "shortName": null, + "level": 2, + "code": "500000", + "pinyin": "ChongQingShi", + "pinyinFirst": "CQS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116703354950, + "parentId": 653116703354949, + "name": "渝中区", + "shortName": null, + "level": 3, + "code": "500103", + "pinyin": "YuZhongQu", + "pinyinFirst": "YZQ", + "capital": "七星岗街道", + "population": 50, + "area": 23, + "areaCode": "023", + "zipCode": "400013", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703354951, + "parentId": 653116703354949, + "name": "万州区", + "shortName": null, + "level": 3, + "code": "500101", + "pinyin": "WanZhouQu", + "pinyinFirst": "WZQ", + "capital": "陈家坝街道", + "population": 174, + "area": 3453, + "areaCode": "023", + "zipCode": "404100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703354952, + "parentId": 653116703354949, + "name": "涪陵区", + "shortName": null, + "level": 3, + "code": "500102", + "pinyin": "FuLingQu", + "pinyinFirst": "FLQ", + "capital": "荔枝街道", + "population": 115, + "area": 2941, + "areaCode": "023", + "zipCode": "408000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703354953, + "parentId": 653116703354949, + "name": "大渡口区", + "shortName": null, + "level": 3, + "code": "500104", + "pinyin": "DaDuKouQu", + "pinyinFirst": "DDKQ", + "capital": "新山村街道", + "population": 28, + "area": 103, + "areaCode": "023", + "zipCode": "400084", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703354954, + "parentId": 653116703354949, + "name": "江北区", + "shortName": null, + "level": 3, + "code": "500105", + "pinyin": "JiangBeiQu", + "pinyinFirst": "JBQ", + "capital": "寸滩街道", + "population": 63, + "area": 221, + "areaCode": "023", + "zipCode": "400025", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703354955, + "parentId": 653116703354949, + "name": "沙坪坝区", + "shortName": null, + "level": 3, + "code": "500106", + "pinyin": "ShaPingBaQu", + "pinyinFirst": "SPBQ", + "capital": "覃家岗街道", + "population": 89, + "area": 396, + "areaCode": "023", + "zipCode": "400038", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703354956, + "parentId": 653116703354949, + "name": "九龙坡区", + "shortName": null, + "level": 3, + "code": "500107", + "pinyin": "JiuLongPoQu", + "pinyinFirst": "JLPQ", + "capital": "杨家坪街道", + "population": 97, + "area": 431, + "areaCode": "023", + "zipCode": "400050", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703354957, + "parentId": 653116703354949, + "name": "南岸区", + "shortName": null, + "level": 3, + "code": "500108", + "pinyin": "NanAnQu", + "pinyinFirst": "NAQ", + "capital": "天文街道", + "population": 76, + "area": 262, + "areaCode": "023", + "zipCode": "401336", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359045, + "parentId": 653116703354949, + "name": "北碚区", + "shortName": null, + "level": 3, + "code": "500109", + "pinyin": "BeiBeiQu", + "pinyinFirst": "BBQ", + "capital": "北温泉街道", + "population": 64, + "area": 751, + "areaCode": "023", + "zipCode": "400700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359046, + "parentId": 653116703354949, + "name": "綦江区", + "shortName": null, + "level": 3, + "code": "500110", + "pinyin": "QiJiangQu", + "pinyinFirst": "QJQ", + "capital": "古南街道", + "population": 119, + "area": 2747, + "areaCode": "023", + "zipCode": "401420", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359047, + "parentId": 653116703354949, + "name": "大足区", + "shortName": null, + "level": 3, + "code": "500111", + "pinyin": "DaZuQu", + "pinyinFirst": "DZQ", + "capital": "棠香街道", + "population": 107, + "area": 1434, + "areaCode": "023", + "zipCode": "402360", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359048, + "parentId": 653116703354949, + "name": "渝北区", + "shortName": null, + "level": 3, + "code": "500112", + "pinyin": "YuBeiQu", + "pinyinFirst": "YBQ", + "capital": "两路街道", + "population": 142, + "area": 1457, + "areaCode": "023", + "zipCode": "401120", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359049, + "parentId": 653116703354949, + "name": "巴南区", + "shortName": null, + "level": 3, + "code": "500113", + "pinyin": "BaNanQu", + "pinyinFirst": "BNQ", + "capital": "龙洲湾街道", + "population": 94, + "area": 1823, + "areaCode": "023", + "zipCode": "401320", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359050, + "parentId": 653116703354949, + "name": "黔江区", + "shortName": null, + "level": 3, + "code": "500114", + "pinyin": "QianJiangQu", + "pinyinFirst": "QJQ", + "capital": "城西街道", + "population": 56, + "area": 2390, + "areaCode": "023", + "zipCode": "409000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359051, + "parentId": 653116703354949, + "name": "长寿区", + "shortName": null, + "level": 3, + "code": "500115", + "pinyin": "ChangShouQu", + "pinyinFirst": "CSQ", + "capital": "菩提街道", + "population": 89, + "area": 1421, + "areaCode": "023", + "zipCode": "401220", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359052, + "parentId": 653116703354949, + "name": "江津区", + "shortName": null, + "level": 3, + "code": "500116", + "pinyin": "JiangJinQu", + "pinyinFirst": "JJQ", + "capital": "圣泉街道", + "population": 149, + "area": 3216, + "areaCode": "023", + "zipCode": "402260", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359053, + "parentId": 653116703354949, + "name": "合川区", + "shortName": null, + "level": 3, + "code": "500117", + "pinyin": "HeChuanQu", + "pinyinFirst": "HCQ", + "capital": "南津街街道", + "population": 152, + "area": 2343, + "areaCode": "023", + "zipCode": "401520", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359054, + "parentId": 653116703354949, + "name": "永川区", + "shortName": null, + "level": 3, + "code": "500118", + "pinyin": "YongChuanQu", + "pinyinFirst": "YCQ", + "capital": "中山路街道", + "population": 114, + "area": 1579, + "areaCode": "023", + "zipCode": "402160", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359055, + "parentId": 653116703354949, + "name": "南川区", + "shortName": null, + "level": 3, + "code": "500119", + "pinyin": "NanChuanQu", + "pinyinFirst": "NCQ", + "capital": "东城街道", + "population": 69, + "area": 2589, + "areaCode": "023", + "zipCode": "408400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359056, + "parentId": 653116703354949, + "name": "璧山区", + "shortName": null, + "level": 3, + "code": "500120", + "pinyin": "BiShanQu", + "pinyinFirst": "BSQ", + "capital": "璧城街道", + "population": 65, + "area": 915, + "areaCode": "023", + "zipCode": "402760", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359057, + "parentId": 653116703354949, + "name": "铜梁区", + "shortName": null, + "level": 3, + "code": "500151", + "pinyin": "TongLiangQu", + "pinyinFirst": "TLQ", + "capital": "巴川街道", + "population": 85, + "area": 1341, + "areaCode": "023", + "zipCode": "402560", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359058, + "parentId": 653116703354949, + "name": "潼南区", + "shortName": null, + "level": 3, + "code": "500152", + "pinyin": "TongNanQu", + "pinyinFirst": "TNQ", + "capital": "桂林街道", + "population": 95, + "area": 1585, + "areaCode": "023", + "zipCode": "402660", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359059, + "parentId": 653116703354949, + "name": "荣昌区", + "shortName": null, + "level": 3, + "code": "500153", + "pinyin": "RongChangQu", + "pinyinFirst": "RCQ", + "capital": "昌元街道", + "population": 85, + "area": 1077, + "areaCode": "023", + "zipCode": "402460", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359060, + "parentId": 653116703354949, + "name": "开州区", + "shortName": null, + "level": 3, + "code": "500154", + "pinyin": "KaiZhouQu", + "pinyinFirst": "KZQ", + "capital": "汉丰街道", + "population": 169, + "area": 3964, + "areaCode": "023", + "zipCode": "405400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359061, + "parentId": 653116703354949, + "name": "梁平区", + "shortName": null, + "level": 3, + "code": "500155", + "pinyin": "LiangPingQu", + "pinyinFirst": "LPQ", + "capital": "梁山街道", + "population": 93, + "area": 1888, + "areaCode": "023", + "zipCode": "405200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359062, + "parentId": 653116703354949, + "name": "武隆区", + "shortName": null, + "level": 3, + "code": "500156", + "pinyin": "WuLongQu", + "pinyinFirst": "WLQ", + "capital": "芙蓉街道", + "population": 41, + "area": 2892, + "areaCode": "023", + "zipCode": "408500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359063, + "parentId": 653116703354949, + "name": "城口县", + "shortName": null, + "level": 3, + "code": "500229", + "pinyin": "ChengKouXian", + "pinyinFirst": "CKX", + "capital": "葛城街道", + "population": 25, + "area": 3289, + "areaCode": "023", + "zipCode": "405900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359064, + "parentId": 653116703354949, + "name": "丰都县", + "shortName": null, + "level": 3, + "code": "500230", + "pinyin": "FengDuXian", + "pinyinFirst": "FDX", + "capital": "三合街道", + "population": 82, + "area": 2899, + "areaCode": "023", + "zipCode": "408200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359065, + "parentId": 653116703354949, + "name": "垫江县", + "shortName": null, + "level": 3, + "code": "500231", + "pinyin": "DianJiangXian", + "pinyinFirst": "DJX", + "capital": "桂阳街道", + "population": 97, + "area": 1517, + "areaCode": "023", + "zipCode": "408300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359066, + "parentId": 653116703354949, + "name": "忠县", + "shortName": null, + "level": 3, + "code": "500233", + "pinyin": "ZhongXian", + "pinyinFirst": "ZX", + "capital": "忠州街道", + "population": 98, + "area": 2187, + "areaCode": "023", + "zipCode": "404300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359067, + "parentId": 653116703354949, + "name": "云阳县", + "shortName": null, + "level": 3, + "code": "500235", + "pinyin": "YunYangXian", + "pinyinFirst": "YYX", + "capital": "双江街道", + "population": 114, + "area": 3636, + "areaCode": "023", + "zipCode": "404500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359068, + "parentId": 653116703354949, + "name": "奉节县", + "shortName": null, + "level": 3, + "code": "500236", + "pinyin": "FengJieXian", + "pinyinFirst": "FJX", + "capital": "夔州街道", + "population": 106, + "area": 4098, + "areaCode": "023", + "zipCode": "404600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359069, + "parentId": 653116703354949, + "name": "巫山县", + "shortName": null, + "level": 3, + "code": "500237", + "pinyin": "WuShanXian", + "pinyinFirst": "WSX", + "capital": "高唐街道", + "population": 63, + "area": 2955, + "areaCode": "023", + "zipCode": "404700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359070, + "parentId": 653116703354949, + "name": "巫溪县", + "shortName": null, + "level": 3, + "code": "500238", + "pinyin": "WuXiXian", + "pinyinFirst": "WXX", + "capital": "柏杨街道", + "population": 54, + "area": 4015, + "areaCode": "023", + "zipCode": "405800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359071, + "parentId": 653116703354949, + "name": "石柱土家族自治县", + "shortName": null, + "level": 3, + "code": "500240", + "pinyin": "ShiZhuTuJiaZuZiZhiXian", + "pinyinFirst": "SZTJZZZX", + "capital": "南宾街道", + "population": 55, + "area": 3014, + "areaCode": "023", + "zipCode": "409100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359072, + "parentId": 653116703354949, + "name": "秀山土家族苗族自治县", + "shortName": null, + "level": 3, + "code": "500241", + "pinyin": "XiuShanTuJiaZuMiaoZuZiZhiXian", + "pinyinFirst": "XSTJZMZZZX", + "capital": "中和街道", + "population": 67, + "area": 2453, + "areaCode": "023", + "zipCode": "409900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359073, + "parentId": 653116703354949, + "name": "酉阳土家族苗族自治县", + "shortName": null, + "level": 3, + "code": "500242", + "pinyin": "YouYangTuJiaZuMiaoZuZiZhiXian", + "pinyinFirst": "YYTJZMZZZX", + "capital": "钟多街道", + "population": 86, + "area": 5168, + "areaCode": "023", + "zipCode": "409800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703359074, + "parentId": 653116703354949, + "name": "彭水苗族土家族自治县", + "shortName": null, + "level": 3, + "code": "500243", + "pinyin": "PengShuiMiaoZuTuJiaZuZiZhiXian", + "pinyinFirst": "PSMZTJZZZX", + "capital": "汉葭街道", + "population": 70, + "area": 3897, + "areaCode": "023", + "zipCode": "409600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:15" + }, + { + "id": 653116703445061, + "parentId": 0, + "name": "四川省", + "shortName": "川、蜀", + "level": 1, + "code": "510000", + "pinyin": "SiChuanSheng", + "pinyinFirst": "SCS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116704907333, + "parentId": 653116703445061, + "name": "成都市", + "shortName": null, + "level": 2, + "code": "510100", + "pinyin": "ChengDuShi", + "pinyinFirst": "CDS", + "capital": "武侯区", + "population": 1500, + "area": 14335, + "areaCode": "028", + "zipCode": "610000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116704911429, + "parentId": 653116704907333, + "name": "武侯区", + "shortName": null, + "level": 3, + "code": "510107", + "pinyin": "WuHouQu", + "pinyinFirst": "WHQ", + "capital": "浆洗街街道", + "population": 134, + "area": 122, + "areaCode": "028", + "zipCode": "610041", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911430, + "parentId": 653116704907333, + "name": "锦江区", + "shortName": null, + "level": 3, + "code": "510104", + "pinyin": "JinJiangQu", + "pinyinFirst": "JJQ", + "capital": "成龙路街道", + "population": 62, + "area": 61, + "areaCode": "028", + "zipCode": "610011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911431, + "parentId": 653116704907333, + "name": "青羊区", + "shortName": null, + "level": 3, + "code": "510105", + "pinyin": "QingYangQu", + "pinyinFirst": "QYQ", + "capital": "草市街街道", + "population": 72, + "area": 66, + "areaCode": "028", + "zipCode": "610031", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911432, + "parentId": 653116704907333, + "name": "金牛区", + "shortName": null, + "level": 3, + "code": "510106", + "pinyin": "JinNiuQu", + "pinyinFirst": "JNQ", + "capital": "抚琴街道", + "population": 77, + "area": 108, + "areaCode": "028", + "zipCode": "610036", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911433, + "parentId": 653116704907333, + "name": "成华区", + "shortName": null, + "level": 3, + "code": "510108", + "pinyin": "ChengHuaQu", + "pinyinFirst": "CHQ", + "capital": "猛追湾街道", + "population": 79, + "area": 108, + "areaCode": "028", + "zipCode": "610066", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911434, + "parentId": 653116704907333, + "name": "龙泉驿区", + "shortName": null, + "level": 3, + "code": "510112", + "pinyin": "LongQuanYiQu", + "pinyinFirst": "LQYQ", + "capital": "龙泉街道", + "population": 74, + "area": 556, + "areaCode": "028", + "zipCode": "610100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911435, + "parentId": 653116704907333, + "name": "青白江区", + "shortName": null, + "level": 3, + "code": "510113", + "pinyin": "QingBaiJiangQu", + "pinyinFirst": "QBJQ", + "capital": "大弯街道", + "population": 42, + "area": 379, + "areaCode": "028", + "zipCode": "610300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911436, + "parentId": 653116704907333, + "name": "新都区", + "shortName": null, + "level": 3, + "code": "510114", + "pinyin": "XinDuQu", + "pinyinFirst": "XDQ", + "capital": "桂湖街道", + "population": 82, + "area": 496, + "areaCode": "028", + "zipCode": "610500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911437, + "parentId": 653116704907333, + "name": "温江区", + "shortName": null, + "level": 3, + "code": "510115", + "pinyin": "WenJiangQu", + "pinyinFirst": "WJQ", + "capital": "柳城街道", + "population": 51, + "area": 276, + "areaCode": "028", + "zipCode": "611100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911438, + "parentId": 653116704907333, + "name": "双流区", + "shortName": null, + "level": 3, + "code": "510116", + "pinyin": "ShuangLiuQu", + "pinyinFirst": "SLQ", + "capital": "东升街道", + "population": 138, + "area": 1068, + "areaCode": "028", + "zipCode": "610200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911439, + "parentId": 653116704907333, + "name": "郫都区", + "shortName": null, + "level": 3, + "code": "510117", + "pinyin": "PiDuQu", + "pinyinFirst": "PDQ", + "capital": "郫筒街道", + "population": 65, + "area": 437, + "areaCode": "028", + "zipCode": "611700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911440, + "parentId": 653116704907333, + "name": "新津区", + "shortName": null, + "level": 3, + "code": "510118", + "pinyin": "XinJinQu", + "pinyinFirst": "XJQ", + "capital": "五津街道", + "population": 32, + "area": 329, + "areaCode": "028", + "zipCode": "611400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911441, + "parentId": 653116704907333, + "name": "都江堰市", + "shortName": null, + "level": 3, + "code": "510181", + "pinyin": "DuJiangYanShi", + "pinyinFirst": "DJYS", + "capital": "灌口街道", + "population": 62, + "area": 1208, + "areaCode": "028", + "zipCode": "611800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911442, + "parentId": 653116704907333, + "name": "彭州市", + "shortName": null, + "level": 3, + "code": "510182", + "pinyin": "PengZhouShi", + "pinyinFirst": "PZS", + "capital": "天彭街道", + "population": 80, + "area": 1421, + "areaCode": "028", + "zipCode": "611900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911443, + "parentId": 653116704907333, + "name": "邛崃市", + "shortName": null, + "level": 3, + "code": "510183", + "pinyin": "QiongLaiShi", + "pinyinFirst": "QLS", + "capital": "临邛街道", + "population": 65, + "area": 1377, + "areaCode": "028", + "zipCode": "611500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911444, + "parentId": 653116704907333, + "name": "崇州市", + "shortName": null, + "level": 3, + "code": "510184", + "pinyin": "ChongZhouShi", + "pinyinFirst": "CZS", + "capital": "崇阳街道", + "population": 66, + "area": 1089, + "areaCode": "028", + "zipCode": "611200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911445, + "parentId": 653116704907333, + "name": "简阳市", + "shortName": null, + "level": 3, + "code": "510185", + "pinyin": "JianYangShi", + "pinyinFirst": "JYS", + "capital": "射洪坝街道", + "population": 150, + "area": 2214, + "areaCode": "028", + "zipCode": "641400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911446, + "parentId": 653116704907333, + "name": "金堂县", + "shortName": null, + "level": 3, + "code": "510121", + "pinyin": "JinTangXian", + "pinyinFirst": "JTX", + "capital": "赵镇街道", + "population": 90, + "area": 1156, + "areaCode": "028", + "zipCode": "610400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911447, + "parentId": 653116704907333, + "name": "大邑县", + "shortName": null, + "level": 3, + "code": "510129", + "pinyin": "DaYiXian", + "pinyinFirst": "DYX", + "capital": "晋原街道", + "population": 51, + "area": 1284, + "areaCode": "028", + "zipCode": "611300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704911448, + "parentId": 653116704907333, + "name": "蒲江县", + "shortName": null, + "level": 3, + "code": "510131", + "pinyin": "PuJiangXian", + "pinyinFirst": "PJX", + "capital": "鹤山街道", + "population": 27, + "area": 580, + "areaCode": "028", + "zipCode": "611600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116704997445, + "parentId": 653116703445061, + "name": "自贡市", + "shortName": null, + "level": 2, + "code": "510300", + "pinyin": "ZiGongShi", + "pinyinFirst": "ZGS", + "capital": "自流井区", + "population": 320, + "area": 4381, + "areaCode": "0813", + "zipCode": "643000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116705001541, + "parentId": 653116704997445, + "name": "自流井区", + "shortName": null, + "level": 3, + "code": "510302", + "pinyin": "ZiLiuJingQu", + "pinyinFirst": "ZLJQ", + "capital": "丹桂街道", + "population": 37, + "area": 154, + "areaCode": "0813", + "zipCode": "643000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705001542, + "parentId": 653116704997445, + "name": "贡井区", + "shortName": null, + "level": 3, + "code": "510303", + "pinyin": "GongJingQu", + "pinyinFirst": "GJQ", + "capital": "筱溪街道", + "population": 28, + "area": 410, + "areaCode": "0813", + "zipCode": "643020", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705001543, + "parentId": 653116704997445, + "name": "大安区", + "shortName": null, + "level": 3, + "code": "510304", + "pinyin": "DaAnQu", + "pinyinFirst": "DAQ", + "capital": "龙井街道", + "population": 43, + "area": 401, + "areaCode": "0813", + "zipCode": "643010", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705001544, + "parentId": 653116704997445, + "name": "沿滩区", + "shortName": null, + "level": 3, + "code": "510311", + "pinyin": "YanTanQu", + "pinyinFirst": "YTQ", + "capital": "沿滩镇", + "population": 39, + "area": 469, + "areaCode": "0813", + "zipCode": "643030", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705001545, + "parentId": 653116704997445, + "name": "荣县", + "shortName": null, + "level": 3, + "code": "510321", + "pinyin": "RongXian", + "pinyinFirst": "RX", + "capital": "青阳街道", + "population": 66, + "area": 1605, + "areaCode": "0813", + "zipCode": "643100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705001546, + "parentId": 653116704997445, + "name": "富顺县", + "shortName": null, + "level": 3, + "code": "510322", + "pinyin": "FuShunXian", + "pinyinFirst": "FSX", + "capital": "富世街道", + "population": 107, + "area": 1342, + "areaCode": "0813", + "zipCode": "643200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705120325, + "parentId": 653116703445061, + "name": "攀枝花市", + "shortName": null, + "level": 2, + "code": "510400", + "pinyin": "PanZhiHuaShi", + "pinyinFirst": "PZHS", + "capital": "东区", + "population": 108, + "area": 7440, + "areaCode": "0812", + "zipCode": "617000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116705124421, + "parentId": 653116705120325, + "name": "东区", + "shortName": null, + "level": 3, + "code": "510402", + "pinyin": "DongQu", + "pinyinFirst": "DQ", + "capital": "大渡口街道", + "population": 29, + "area": 167, + "areaCode": "0812", + "zipCode": "617067", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705124422, + "parentId": 653116705120325, + "name": "西区", + "shortName": null, + "level": 3, + "code": "510403", + "pinyin": "XiQu", + "pinyinFirst": "XQ", + "capital": "清香坪街道", + "population": 13, + "area": 124, + "areaCode": "0812", + "zipCode": "617005", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705124423, + "parentId": 653116705120325, + "name": "仁和区", + "shortName": null, + "level": 3, + "code": "510411", + "pinyin": "RenHeQu", + "pinyinFirst": "RHQ", + "capital": "仁和镇", + "population": 24, + "area": 1727, + "areaCode": "0812", + "zipCode": "617061", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705124424, + "parentId": 653116705120325, + "name": "米易县", + "shortName": null, + "level": 3, + "code": "510421", + "pinyin": "MiYiXian", + "pinyinFirst": "MYX", + "capital": "攀莲镇", + "population": 23, + "area": 2153, + "areaCode": "0812", + "zipCode": "617200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705124425, + "parentId": 653116705120325, + "name": "盐边县", + "shortName": null, + "level": 3, + "code": "510422", + "pinyin": "YanBianXian", + "pinyinFirst": "YBX", + "capital": "桐子林镇", + "population": 21, + "area": 3269, + "areaCode": "0812", + "zipCode": "617100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705235013, + "parentId": 653116703445061, + "name": "泸州市", + "shortName": null, + "level": 2, + "code": "510500", + "pinyin": "LuZhouShi", + "pinyinFirst": "LZS", + "capital": "江阳区", + "population": 509, + "area": 12232, + "areaCode": "0830", + "zipCode": "646000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116705235014, + "parentId": 653116705235013, + "name": "江阳区", + "shortName": null, + "level": 3, + "code": "510502", + "pinyin": "JiangYangQu", + "pinyinFirst": "JYQ", + "capital": "大山坪街道", + "population": 69, + "area": 649, + "areaCode": "0830", + "zipCode": "646000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705235015, + "parentId": 653116705235013, + "name": "纳溪区", + "shortName": null, + "level": 3, + "code": "510503", + "pinyin": "NaXiQu", + "pinyinFirst": "NXQ", + "capital": "安富街道", + "population": 46, + "area": 1150, + "areaCode": "0830", + "zipCode": "646300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705235016, + "parentId": 653116705235013, + "name": "龙马潭区", + "shortName": null, + "level": 3, + "code": "510504", + "pinyin": "LongMaTanQu", + "pinyinFirst": "LMTQ", + "capital": "莲花池街道", + "population": 37, + "area": 333, + "areaCode": "0830", + "zipCode": "646000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705235017, + "parentId": 653116705235013, + "name": "泸县", + "shortName": null, + "level": 3, + "code": "510521", + "pinyin": "LuXian", + "pinyinFirst": "LX", + "capital": "玉蟾街道", + "population": 107, + "area": 1525, + "areaCode": "0830", + "zipCode": "646100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705235018, + "parentId": 653116705235013, + "name": "合江县", + "shortName": null, + "level": 3, + "code": "510522", + "pinyin": "HeJiangXian", + "pinyinFirst": "HJX", + "capital": "符阳街道", + "population": 90, + "area": 2414, + "areaCode": "0830", + "zipCode": "646200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705235019, + "parentId": 653116705235013, + "name": "叙永县", + "shortName": null, + "level": 3, + "code": "510524", + "pinyin": "XuYongXian", + "pinyinFirst": "XYX", + "capital": "叙永镇", + "population": 72, + "area": 2977, + "areaCode": "0830", + "zipCode": "646400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705235020, + "parentId": 653116705235013, + "name": "古蔺县", + "shortName": null, + "level": 3, + "code": "510525", + "pinyin": "GuLinXian", + "pinyinFirst": "GLX", + "capital": "彰德街道", + "population": 88, + "area": 3184, + "areaCode": "0830", + "zipCode": "646500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705419333, + "parentId": 653116703445061, + "name": "德阳市", + "shortName": null, + "level": 2, + "code": "510600", + "pinyin": "DeYangShi", + "pinyinFirst": "DYS", + "capital": "旌阳区", + "population": 384, + "area": 5910, + "areaCode": "0838", + "zipCode": "618000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116705423429, + "parentId": 653116705419333, + "name": "旌阳区", + "shortName": null, + "level": 3, + "code": "510603", + "pinyin": "JingYangQu", + "pinyinFirst": "JYQ", + "capital": "东湖街道", + "population": 70, + "area": 648, + "areaCode": "0838", + "zipCode": "618000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705423430, + "parentId": 653116705419333, + "name": "罗江区", + "shortName": null, + "level": 3, + "code": "510604", + "pinyin": "LuoJiangQu", + "pinyinFirst": "LJQ", + "capital": "万安镇", + "population": 24, + "area": 448, + "areaCode": "0838", + "zipCode": "618500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705423431, + "parentId": 653116705419333, + "name": "广汉市", + "shortName": null, + "level": 3, + "code": "510681", + "pinyin": "GuangHanShi", + "pinyinFirst": "GHS", + "capital": "雒城街道", + "population": 60, + "area": 548, + "areaCode": "0838", + "zipCode": "618300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705423432, + "parentId": 653116705419333, + "name": "什邡市", + "shortName": null, + "level": 3, + "code": "510682", + "pinyin": "ShiFangShi", + "pinyinFirst": "SFS", + "capital": "方亭街道", + "population": 43, + "area": 820, + "areaCode": "0838", + "zipCode": "618400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705423433, + "parentId": 653116705419333, + "name": "绵竹市", + "shortName": null, + "level": 3, + "code": "510683", + "pinyin": "MianZhuShi", + "pinyinFirst": "MZS", + "capital": "紫岩街道", + "population": 50, + "area": 1246, + "areaCode": "0838", + "zipCode": "618200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705423434, + "parentId": 653116705419333, + "name": "中江县", + "shortName": null, + "level": 3, + "code": "510623", + "pinyin": "ZhongJiangXian", + "pinyinFirst": "ZJX", + "capital": "凯江镇", + "population": 138, + "area": 2200, + "areaCode": "0838", + "zipCode": "618100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705550405, + "parentId": 653116703445061, + "name": "绵阳市", + "shortName": null, + "level": 2, + "code": "510700", + "pinyin": "MianYangShi", + "pinyinFirst": "MYS", + "capital": "涪城区", + "population": 531, + "area": 20248, + "areaCode": "0816", + "zipCode": "621000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116705550406, + "parentId": 653116705550405, + "name": "涪城区", + "shortName": null, + "level": 3, + "code": "510703", + "pinyin": "FuChengQu", + "pinyinFirst": "FCQ", + "capital": "城厢街道", + "population": 75, + "area": 554, + "areaCode": "0816", + "zipCode": "621000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705550407, + "parentId": 653116705550405, + "name": "游仙区", + "shortName": null, + "level": 3, + "code": "510704", + "pinyin": "YouXianQu", + "pinyinFirst": "YXQ", + "capital": "富乐街道", + "population": 55, + "area": 1016, + "areaCode": "0816", + "zipCode": "621000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705554501, + "parentId": 653116705550405, + "name": "安州区", + "shortName": null, + "level": 3, + "code": "510705", + "pinyin": "AnZhouQu", + "pinyinFirst": "AZQ", + "capital": "花荄镇", + "population": 44, + "area": 1181, + "areaCode": "0816", + "zipCode": "622650", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705554502, + "parentId": 653116705550405, + "name": "江油市", + "shortName": null, + "level": 3, + "code": "510781", + "pinyin": "JiangYouShi", + "pinyinFirst": "JYS", + "capital": "中坝街道", + "population": 86, + "area": 2720, + "areaCode": "0816", + "zipCode": "621700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705554503, + "parentId": 653116705550405, + "name": "三台县", + "shortName": null, + "level": 3, + "code": "510722", + "pinyin": "SanTaiXian", + "pinyinFirst": "STX", + "capital": "潼川镇", + "population": 139, + "area": 2659, + "areaCode": "0816", + "zipCode": "621100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705554504, + "parentId": 653116705550405, + "name": "盐亭县", + "shortName": null, + "level": 3, + "code": "510723", + "pinyin": "YanTingXian", + "pinyinFirst": "YTX", + "capital": "凤灵街道", + "population": 54, + "area": 1645, + "areaCode": "0816", + "zipCode": "621600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705554505, + "parentId": 653116705550405, + "name": "梓潼县", + "shortName": null, + "level": 3, + "code": "510725", + "pinyin": "ZiTongXian", + "pinyinFirst": "ZTX", + "capital": "文昌镇", + "population": 37, + "area": 1444, + "areaCode": "0816", + "zipCode": "622150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705554506, + "parentId": 653116705550405, + "name": "平武县", + "shortName": null, + "level": 3, + "code": "510727", + "pinyin": "PingWuXian", + "pinyinFirst": "PWX", + "capital": "龙安镇", + "population": 18, + "area": 5946, + "areaCode": "0816", + "zipCode": "622550", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705554507, + "parentId": 653116705550405, + "name": "北川羌族自治县", + "shortName": null, + "level": 3, + "code": "510726", + "pinyin": "BeiChuanQiangZuZiZhiXian", + "pinyinFirst": "BCQZZZX", + "capital": "永昌镇", + "population": 23, + "area": 3083, + "areaCode": "0816", + "zipCode": "622750", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705714245, + "parentId": 653116703445061, + "name": "广元市", + "shortName": null, + "level": 2, + "code": "510800", + "pinyin": "GuangYuanShi", + "pinyinFirst": "GYS", + "capital": "利州区", + "population": 299, + "area": 16321, + "areaCode": "0839", + "zipCode": "628000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116705718341, + "parentId": 653116705714245, + "name": "利州区", + "shortName": null, + "level": 3, + "code": "510802", + "pinyin": "LiZhouQu", + "pinyinFirst": "LZQ", + "capital": "东坝街道", + "population": 49, + "area": 1537, + "areaCode": "0839", + "zipCode": "628017", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705718342, + "parentId": 653116705714245, + "name": "昭化区", + "shortName": null, + "level": 3, + "code": "510811", + "pinyin": "ZhaoHuaQu", + "pinyinFirst": "ZHQ", + "capital": "元坝镇", + "population": 23, + "area": 1435, + "areaCode": "0839", + "zipCode": "628021", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705718343, + "parentId": 653116705714245, + "name": "朝天区", + "shortName": null, + "level": 3, + "code": "510812", + "pinyin": "ChaoTianQu", + "pinyinFirst": "CTQ", + "capital": "朝天镇", + "population": 20, + "area": 1613, + "areaCode": "0839", + "zipCode": "628012", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705718344, + "parentId": 653116705714245, + "name": "旺苍县", + "shortName": null, + "level": 3, + "code": "510821", + "pinyin": "WangCangXian", + "pinyinFirst": "WCX", + "capital": "东河镇", + "population": 44, + "area": 2987, + "areaCode": "0839", + "zipCode": "628200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705718345, + "parentId": 653116705714245, + "name": "青川县", + "shortName": null, + "level": 3, + "code": "510822", + "pinyin": "QingChuanXian", + "pinyinFirst": "QCX", + "capital": "乔庄镇", + "population": 23, + "area": 3216, + "areaCode": "0839", + "zipCode": "628100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705718346, + "parentId": 653116705714245, + "name": "剑阁县", + "shortName": null, + "level": 3, + "code": "510823", + "pinyin": "JianGeXian", + "pinyinFirst": "JGX", + "capital": "下寺镇", + "population": 65, + "area": 3203, + "areaCode": "0839", + "zipCode": "628300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705718347, + "parentId": 653116705714245, + "name": "苍溪县", + "shortName": null, + "level": 3, + "code": "510824", + "pinyin": "CangXiXian", + "pinyinFirst": "CXX", + "capital": "陵江镇", + "population": 75, + "area": 2330, + "areaCode": "0839", + "zipCode": "628400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705886277, + "parentId": 653116703445061, + "name": "遂宁市", + "shortName": null, + "level": 2, + "code": "510900", + "pinyin": "SuiNingShi", + "pinyinFirst": "SNS", + "capital": "船山区", + "population": 363, + "area": 5325, + "areaCode": "0825", + "zipCode": "629000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116705890373, + "parentId": 653116705886277, + "name": "船山区", + "shortName": null, + "level": 3, + "code": "510903", + "pinyin": "ChuanShanQu", + "pinyinFirst": "CSQ", + "capital": "凯旋路街道", + "population": 69, + "area": 706, + "areaCode": "0825", + "zipCode": "629000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705890374, + "parentId": 653116705886277, + "name": "安居区", + "shortName": null, + "level": 3, + "code": "510904", + "pinyin": "AnJuQu", + "pinyinFirst": "AJQ", + "capital": "凤凰街道", + "population": 77, + "area": 1171, + "areaCode": "0825", + "zipCode": "629000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705890375, + "parentId": 653116705886277, + "name": "射洪市", + "shortName": null, + "level": 3, + "code": "510981", + "pinyin": "SheHongShi", + "pinyinFirst": "SHS", + "capital": "太和街道", + "population": 95, + "area": 1496, + "areaCode": "0825", + "zipCode": "629200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705890376, + "parentId": 653116705886277, + "name": "蓬溪县", + "shortName": null, + "level": 3, + "code": "510921", + "pinyin": "PengXiXian", + "pinyinFirst": "PXX", + "capital": "普安街道", + "population": 68, + "area": 1251, + "areaCode": "0825", + "zipCode": "629100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116705890377, + "parentId": 653116705886277, + "name": "大英县", + "shortName": null, + "level": 3, + "code": "510923", + "pinyin": "DaYingXian", + "pinyinFirst": "DYX", + "capital": "盐井街道", + "population": 53, + "area": 701, + "areaCode": "0825", + "zipCode": "629300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706046021, + "parentId": 653116703445061, + "name": "内江市", + "shortName": null, + "level": 2, + "code": "511000", + "pinyin": "NeiJiangShi", + "pinyinFirst": "NJS", + "capital": "市中区", + "population": 408, + "area": 5386, + "areaCode": "0832", + "zipCode": "641000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116706050117, + "parentId": 653116706046021, + "name": "市中区", + "shortName": null, + "level": 3, + "code": "511002", + "pinyin": "ShiZhongQu", + "pinyinFirst": "SZQ", + "capital": "城东街道", + "population": 51, + "area": 388, + "areaCode": "0832", + "zipCode": "641000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706050118, + "parentId": 653116706046021, + "name": "东兴区", + "shortName": null, + "level": 3, + "code": "511011", + "pinyin": "DongXingQu", + "pinyinFirst": "DXQ", + "capital": "东兴街道", + "population": 88, + "area": 1181, + "areaCode": "0832", + "zipCode": "641100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706050119, + "parentId": 653116706046021, + "name": "隆昌市", + "shortName": null, + "level": 3, + "code": "511083", + "pinyin": "LongChangShi", + "pinyinFirst": "LCS", + "capital": "古湖街道", + "population": 77, + "area": 794, + "areaCode": "0832", + "zipCode": "642150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706050120, + "parentId": 653116706046021, + "name": "威远县", + "shortName": null, + "level": 3, + "code": "511024", + "pinyin": "WeiYuanXian", + "pinyinFirst": "WYX", + "capital": "严陵镇", + "population": 70, + "area": 1289, + "areaCode": "0832", + "zipCode": "642450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706050121, + "parentId": 653116706046021, + "name": "资中县", + "shortName": null, + "level": 3, + "code": "511025", + "pinyin": "ZiZhongXian", + "pinyinFirst": "ZZX", + "capital": "水南镇", + "population": 123, + "area": 1734, + "areaCode": "0832", + "zipCode": "641200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706254917, + "parentId": 653116703445061, + "name": "乐山市", + "shortName": null, + "level": 2, + "code": "511100", + "pinyin": "LeShanShi", + "pinyinFirst": "LSS", + "capital": "市中区", + "population": 349, + "area": 12723, + "areaCode": "0833", + "zipCode": "614000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116706259013, + "parentId": 653116706254917, + "name": "市中区", + "shortName": null, + "level": 3, + "code": "511102", + "pinyin": "ShiZhongQu", + "pinyinFirst": "SZQ", + "capital": "海棠街道", + "population": 64, + "area": 837, + "areaCode": "0833", + "zipCode": "614000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706259014, + "parentId": 653116706254917, + "name": "沙湾区", + "shortName": null, + "level": 3, + "code": "511111", + "pinyin": "ShaWanQu", + "pinyinFirst": "SWQ", + "capital": "铜河街道", + "population": 17, + "area": 606, + "areaCode": "0833", + "zipCode": "614900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706259015, + "parentId": 653116706254917, + "name": "五通桥区", + "shortName": null, + "level": 3, + "code": "511112", + "pinyin": "WuTongQiaoQu", + "pinyinFirst": "WTQQ", + "capital": "竹根镇", + "population": 29, + "area": 465, + "areaCode": "0833", + "zipCode": "614800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706259016, + "parentId": 653116706254917, + "name": "金口河区", + "shortName": null, + "level": 3, + "code": "511113", + "pinyin": "JinKouHeQu", + "pinyinFirst": "JKHQ", + "capital": "永和镇", + "population": 5, + "area": 598, + "areaCode": "0833", + "zipCode": "614700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706259017, + "parentId": 653116706254917, + "name": "峨眉山市", + "shortName": null, + "level": 3, + "code": "511181", + "pinyin": "EMeiShanShi", + "pinyinFirst": "EMSS", + "capital": "胜利街道", + "population": 43, + "area": 1181, + "areaCode": "0833", + "zipCode": "614200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706259018, + "parentId": 653116706254917, + "name": "犍为县", + "shortName": null, + "level": 3, + "code": "511123", + "pinyin": "QianWeiXian", + "pinyinFirst": "QWX", + "capital": "玉津镇", + "population": 55, + "area": 1371, + "areaCode": "0833", + "zipCode": "614400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706259019, + "parentId": 653116706254917, + "name": "井研县", + "shortName": null, + "level": 3, + "code": "511124", + "pinyin": "JingYanXian", + "pinyinFirst": "JYX", + "capital": "研城街道", + "population": 39, + "area": 840, + "areaCode": "0833", + "zipCode": "613100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706259020, + "parentId": 653116706254917, + "name": "夹江县", + "shortName": null, + "level": 3, + "code": "511126", + "pinyin": "JiaJiangXian", + "pinyinFirst": "JJX", + "capital": "青衣街道", + "population": 34, + "area": 745, + "areaCode": "0833", + "zipCode": "614100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706259021, + "parentId": 653116706254917, + "name": "沐川县", + "shortName": null, + "level": 3, + "code": "511129", + "pinyin": "MuChuanXian", + "pinyinFirst": "MCX", + "capital": "沐溪镇", + "population": 25, + "area": 1405, + "areaCode": "0833", + "zipCode": "614500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706259022, + "parentId": 653116706254917, + "name": "峨边彝族自治县", + "shortName": null, + "level": 3, + "code": "511132", + "pinyin": "EBianYiZuZiZhiXian", + "pinyinFirst": "EBYZZZX", + "capital": "沙坪镇", + "population": 15, + "area": 2382, + "areaCode": "0833", + "zipCode": "614300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706263109, + "parentId": 653116706254917, + "name": "马边彝族自治县", + "shortName": null, + "level": 3, + "code": "511133", + "pinyin": "MaBianYiZuZiZhiXian", + "pinyinFirst": "MBYZZZX", + "capital": "民建镇", + "population": 22, + "area": 2293, + "areaCode": "0833", + "zipCode": "614600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706459717, + "parentId": 653116703445061, + "name": "南充市", + "shortName": null, + "level": 2, + "code": "511300", + "pinyin": "NanChongShi", + "pinyinFirst": "NCS", + "capital": "顺庆区", + "population": 724, + "area": 12514, + "areaCode": "0817", + "zipCode": "637000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116706463813, + "parentId": 653116706459717, + "name": "顺庆区", + "shortName": null, + "level": 3, + "code": "511302", + "pinyin": "ShunQingQu", + "pinyinFirst": "SQQ", + "capital": "北城街道", + "population": 66, + "area": 556, + "areaCode": "0817", + "zipCode": "637000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706463814, + "parentId": 653116706459717, + "name": "高坪区", + "shortName": null, + "level": 3, + "code": "511303", + "pinyin": "GaoPingQu", + "pinyinFirst": "GPQ", + "capital": "白塔街道", + "population": 60, + "area": 806, + "areaCode": "0817", + "zipCode": "637100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706463815, + "parentId": 653116706459717, + "name": "嘉陵区", + "shortName": null, + "level": 3, + "code": "511304", + "pinyin": "JiaLingQu", + "pinyinFirst": "JLQ", + "capital": "火花街道", + "population": 68, + "area": 1179, + "areaCode": "0817", + "zipCode": "637900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706463816, + "parentId": 653116706459717, + "name": "阆中市", + "shortName": null, + "level": 3, + "code": "511381", + "pinyin": "LangZhongShi", + "pinyinFirst": "LZS", + "capital": "七里街道", + "population": 83, + "area": 1878, + "areaCode": "0817", + "zipCode": "637400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706463817, + "parentId": 653116706459717, + "name": "南部县", + "shortName": null, + "level": 3, + "code": "511321", + "pinyin": "NanBuXian", + "pinyinFirst": "NBX", + "capital": "蜀北街道", + "population": 124, + "area": 2229, + "areaCode": "0817", + "zipCode": "637300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706463818, + "parentId": 653116706459717, + "name": "营山县", + "shortName": null, + "level": 3, + "code": "511322", + "pinyin": "YingShanXian", + "pinyinFirst": "YSX", + "capital": "绥安街道", + "population": 90, + "area": 1633, + "areaCode": "0817", + "zipCode": "637700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706463819, + "parentId": 653116706459717, + "name": "蓬安县", + "shortName": null, + "level": 3, + "code": "511323", + "pinyin": "PengAnXian", + "pinyinFirst": "PAX", + "capital": "相如街道", + "population": 67, + "area": 1334, + "areaCode": "0817", + "zipCode": "637800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706463820, + "parentId": 653116706459717, + "name": "仪陇县", + "shortName": null, + "level": 3, + "code": "511324", + "pinyin": "YiLongXian", + "pinyinFirst": "YLX", + "capital": "新政镇", + "population": 107, + "area": 1791, + "areaCode": "0817", + "zipCode": "637600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706463821, + "parentId": 653116706459717, + "name": "西充县", + "shortName": null, + "level": 3, + "code": "511325", + "pinyin": "XiChongXian", + "pinyinFirst": "XCX", + "capital": "晋城街道", + "population": 59, + "area": 1108, + "areaCode": "0817", + "zipCode": "637200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706676805, + "parentId": 653116703445061, + "name": "眉山市", + "shortName": null, + "level": 2, + "code": "511400", + "pinyin": "MeiShanShi", + "pinyinFirst": "MSS", + "capital": "东坡区", + "population": 342, + "area": 7140, + "areaCode": "028", + "zipCode": "620000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116706680901, + "parentId": 653116706676805, + "name": "东坡区", + "shortName": null, + "level": 3, + "code": "511402", + "pinyin": "DongPoQu", + "pinyinFirst": "DPQ", + "capital": "苏祠街道", + "population": 87, + "area": 1336, + "areaCode": "028", + "zipCode": "620010", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706680902, + "parentId": 653116706676805, + "name": "彭山区", + "shortName": null, + "level": 3, + "code": "511403", + "pinyin": "PengShanQu", + "pinyinFirst": "PSQ", + "capital": "凤鸣街道", + "population": 33, + "area": 462, + "areaCode": "028", + "zipCode": "620800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706680903, + "parentId": 653116706676805, + "name": "仁寿县", + "shortName": null, + "level": 3, + "code": "511421", + "pinyin": "RenShouXian", + "pinyinFirst": "RSX", + "capital": "文林街道", + "population": 152, + "area": 2608, + "areaCode": "028", + "zipCode": "620500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706680904, + "parentId": 653116706676805, + "name": "洪雅县", + "shortName": null, + "level": 3, + "code": "511423", + "pinyin": "HongYaXian", + "pinyinFirst": "HYX", + "capital": "洪川镇", + "population": 34, + "area": 1898, + "areaCode": "028", + "zipCode": "620300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706680905, + "parentId": 653116706676805, + "name": "丹棱县", + "shortName": null, + "level": 3, + "code": "511424", + "pinyin": "DanLengXian", + "pinyinFirst": "DLX", + "capital": "齐乐镇", + "population": 16, + "area": 449, + "areaCode": "028", + "zipCode": "620200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706680906, + "parentId": 653116706676805, + "name": "青神县", + "shortName": null, + "level": 3, + "code": "511425", + "pinyin": "QingShenXian", + "pinyinFirst": "QSX", + "capital": "青竹街道", + "population": 19, + "area": 387, + "areaCode": "028", + "zipCode": "612400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706914373, + "parentId": 653116703445061, + "name": "宜宾市", + "shortName": null, + "level": 2, + "code": "511500", + "pinyin": "YiBinShi", + "pinyinFirst": "YBS", + "capital": "翠屏区", + "population": 552, + "area": 13271, + "areaCode": "0831", + "zipCode": "644000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116706922565, + "parentId": 653116706914373, + "name": "翠屏区", + "shortName": null, + "level": 3, + "code": "511502", + "pinyin": "CuiPingQu", + "pinyinFirst": "CPQ", + "capital": "合江门街道", + "population": 88, + "area": 1501, + "areaCode": "0831", + "zipCode": "644000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706922566, + "parentId": 653116706914373, + "name": "南溪区", + "shortName": null, + "level": 3, + "code": "511503", + "pinyin": "NanXiQu", + "pinyinFirst": "NXQ", + "capital": "南溪街道", + "population": 43, + "area": 704, + "areaCode": "0831", + "zipCode": "644100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706922567, + "parentId": 653116706914373, + "name": "叙州区", + "shortName": null, + "level": 3, + "code": "511504", + "pinyin": "XuZhouQu", + "pinyinFirst": "XZQ", + "capital": "柏溪街道", + "population": 99, + "area": 2570, + "areaCode": "0831", + "zipCode": "644600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706922568, + "parentId": 653116706914373, + "name": "江安县", + "shortName": null, + "level": 3, + "code": "511523", + "pinyin": "JiangAnXian", + "pinyinFirst": "JAX", + "capital": "江安镇", + "population": 56, + "area": 894, + "areaCode": "0831", + "zipCode": "644200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706922569, + "parentId": 653116706914373, + "name": "长宁县", + "shortName": null, + "level": 3, + "code": "511524", + "pinyin": "ChangNingXian", + "pinyinFirst": "CNX", + "capital": "长宁镇", + "population": 46, + "area": 996, + "areaCode": "0831", + "zipCode": "644300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706922570, + "parentId": 653116706914373, + "name": "高县", + "shortName": null, + "level": 3, + "code": "511525", + "pinyin": "GaoXian", + "pinyinFirst": "GX", + "capital": "庆符镇", + "population": 53, + "area": 1323, + "areaCode": "0831", + "zipCode": "645150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706922571, + "parentId": 653116706914373, + "name": "珙县", + "shortName": null, + "level": 3, + "code": "511526", + "pinyin": "GongXian", + "pinyinFirst": "GX", + "capital": "巡场镇", + "population": 43, + "area": 1150, + "areaCode": "0831", + "zipCode": "644500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706922572, + "parentId": 653116706914373, + "name": "筠连县", + "shortName": null, + "level": 3, + "code": "511527", + "pinyin": "JunLianXian", + "pinyinFirst": "JLX", + "capital": "筠连镇", + "population": 45, + "area": 1256, + "areaCode": "0831", + "zipCode": "645250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706922573, + "parentId": 653116706914373, + "name": "兴文县", + "shortName": null, + "level": 3, + "code": "511528", + "pinyin": "XingWenXian", + "pinyinFirst": "XWX", + "capital": "古宋镇", + "population": 48, + "area": 1373, + "areaCode": "0831", + "zipCode": "644400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116706922574, + "parentId": 653116706914373, + "name": "屏山县", + "shortName": null, + "level": 3, + "code": "511529", + "pinyin": "PingShanXian", + "pinyinFirst": "PSX", + "capital": "屏山镇", + "population": 31, + "area": 1504, + "areaCode": "0831", + "zipCode": "645350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707151941, + "parentId": 653116703445061, + "name": "广安市", + "shortName": null, + "level": 2, + "code": "511600", + "pinyin": "GuangAnShi", + "pinyinFirst": "GAS", + "capital": "广安区", + "population": 459, + "area": 6339, + "areaCode": "0826", + "zipCode": "638000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116707156037, + "parentId": 653116707151941, + "name": "广安区", + "shortName": null, + "level": 3, + "code": "511602", + "pinyin": "GuangAnQu", + "pinyinFirst": "GAQ", + "capital": "浓洄街道", + "population": 89, + "area": 1028, + "areaCode": "0826", + "zipCode": "638000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707156038, + "parentId": 653116707151941, + "name": "前锋区", + "shortName": null, + "level": 3, + "code": "511603", + "pinyin": "QianFengQu", + "pinyinFirst": "QFQ", + "capital": "大佛寺街道", + "population": 37, + "area": 506, + "areaCode": "0826", + "zipCode": "638019", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707156039, + "parentId": 653116707151941, + "name": "华蓥市", + "shortName": null, + "level": 3, + "code": "511681", + "pinyin": "HuaYingShi", + "pinyinFirst": "HYS", + "capital": "双河街道", + "population": 35, + "area": 464, + "areaCode": "0826", + "zipCode": "638600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707156040, + "parentId": 653116707151941, + "name": "岳池县", + "shortName": null, + "level": 3, + "code": "511621", + "pinyin": "YueChiXian", + "pinyinFirst": "YCX", + "capital": "九龙街道", + "population": 115, + "area": 1479, + "areaCode": "0826", + "zipCode": "638300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707156041, + "parentId": 653116707151941, + "name": "武胜县", + "shortName": null, + "level": 3, + "code": "511622", + "pinyin": "WuShengXian", + "pinyinFirst": "WSX", + "capital": "沿口镇", + "population": 82, + "area": 956, + "areaCode": "0826", + "zipCode": "638400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707156042, + "parentId": 653116707151941, + "name": "邻水县", + "shortName": null, + "level": 3, + "code": "511623", + "pinyin": "LinShuiXian", + "pinyinFirst": "LSX", + "capital": "鼎屏镇", + "population": 101, + "area": 1907, + "areaCode": "0826", + "zipCode": "638500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707442757, + "parentId": 653116703445061, + "name": "达州市", + "shortName": null, + "level": 2, + "code": "511700", + "pinyin": "DaZhouShi", + "pinyinFirst": "DZS", + "capital": "通川区", + "population": 659, + "area": 16605, + "areaCode": "0818", + "zipCode": "635000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116707446853, + "parentId": 653116707442757, + "name": "通川区", + "shortName": null, + "level": 3, + "code": "511702", + "pinyin": "TongChuanQu", + "pinyinFirst": "TCQ", + "capital": "东城街道", + "population": 59, + "area": 901, + "areaCode": "0818", + "zipCode": "635000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707446854, + "parentId": 653116707442757, + "name": "达川区", + "shortName": null, + "level": 3, + "code": "511703", + "pinyin": "DaChuanQu", + "pinyinFirst": "DCQ", + "capital": "三里坪街道", + "population": 116, + "area": 2245, + "areaCode": "0818", + "zipCode": "635000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707446855, + "parentId": 653116707442757, + "name": "万源市", + "shortName": null, + "level": 3, + "code": "511781", + "pinyin": "WanYuanShi", + "pinyinFirst": "WYS", + "capital": "古东关街道", + "population": 57, + "area": 4065, + "areaCode": "0818", + "zipCode": "636350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707446856, + "parentId": 653116707442757, + "name": "宣汉县", + "shortName": null, + "level": 3, + "code": "511722", + "pinyin": "XuanHanXian", + "pinyinFirst": "XHX", + "capital": "东乡街道", + "population": 128, + "area": 4271, + "areaCode": "0818", + "zipCode": "636150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707446857, + "parentId": 653116707442757, + "name": "开江县", + "shortName": null, + "level": 3, + "code": "511723", + "pinyin": "KaiJiangXian", + "pinyinFirst": "KJX", + "capital": "淙城街道", + "population": 58, + "area": 1033, + "areaCode": "0818", + "zipCode": "636250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707446858, + "parentId": 653116707442757, + "name": "大竹县", + "shortName": null, + "level": 3, + "code": "511724", + "pinyin": "DaZhuXian", + "pinyinFirst": "DZX", + "capital": "竹阳街道", + "population": 108, + "area": 2077, + "areaCode": "0818", + "zipCode": "635100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707446859, + "parentId": 653116707442757, + "name": "渠县", + "shortName": null, + "level": 3, + "code": "511725", + "pinyin": "QuXian", + "pinyinFirst": "QX", + "capital": "渠江街道", + "population": 132, + "area": 2013, + "areaCode": "0818", + "zipCode": "635200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707668037, + "parentId": 653116703445061, + "name": "雅安市", + "shortName": null, + "level": 2, + "code": "511800", + "pinyin": "YaAnShi", + "pinyinFirst": "YAS", + "capital": "雨城区", + "population": 153, + "area": 15046, + "areaCode": "0835", + "zipCode": "625000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116707672133, + "parentId": 653116707668037, + "name": "雨城区", + "shortName": null, + "level": 3, + "code": "511802", + "pinyin": "YuChengQu", + "pinyinFirst": "YCQ", + "capital": "青江街道", + "population": 34, + "area": 1063, + "areaCode": "0835", + "zipCode": "625000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707672134, + "parentId": 653116707668037, + "name": "名山区", + "shortName": null, + "level": 3, + "code": "511803", + "pinyin": "MingShanQu", + "pinyinFirst": "MSQ", + "capital": "蒙阳街道", + "population": 28, + "area": 618, + "areaCode": "0835", + "zipCode": "625100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707672135, + "parentId": 653116707668037, + "name": "荥经县", + "shortName": null, + "level": 3, + "code": "511822", + "pinyin": "YingJingXian", + "pinyinFirst": "YJX", + "capital": "严道街道", + "population": 15, + "area": 1777, + "areaCode": "0835", + "zipCode": "625200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707672136, + "parentId": 653116707668037, + "name": "汉源县", + "shortName": null, + "level": 3, + "code": "511823", + "pinyin": "HanYuanXian", + "pinyinFirst": "HYX", + "capital": "富林镇", + "population": 32, + "area": 2215, + "areaCode": "0835", + "zipCode": "625300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707672137, + "parentId": 653116707668037, + "name": "石棉县", + "shortName": null, + "level": 3, + "code": "511824", + "pinyin": "ShiMianXian", + "pinyinFirst": "SMX", + "capital": "新棉街道", + "population": 12, + "area": 2679, + "areaCode": "0835", + "zipCode": "625400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707672138, + "parentId": 653116707668037, + "name": "天全县", + "shortName": null, + "level": 3, + "code": "511825", + "pinyin": "TianQuanXian", + "pinyinFirst": "TQX", + "capital": "城厢镇", + "population": 15, + "area": 2390, + "areaCode": "0835", + "zipCode": "625500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707672139, + "parentId": 653116707668037, + "name": "芦山县", + "shortName": null, + "level": 3, + "code": "511826", + "pinyin": "LuShanXian", + "pinyinFirst": "LSX", + "capital": "芦阳街道", + "population": 12, + "area": 1191, + "areaCode": "0835", + "zipCode": "625600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707672140, + "parentId": 653116707668037, + "name": "宝兴县", + "shortName": null, + "level": 3, + "code": "511827", + "pinyin": "BaoXingXian", + "pinyinFirst": "BXX", + "capital": "穆坪镇", + "population": 6, + "area": 3114, + "areaCode": "0835", + "zipCode": "625700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707962949, + "parentId": 653116703445061, + "name": "巴中市", + "shortName": null, + "level": 2, + "code": "511900", + "pinyin": "BaZhongShi", + "pinyinFirst": "BZS", + "capital": "巴州区", + "population": 366, + "area": 12312, + "areaCode": "0827", + "zipCode": "636000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116707967045, + "parentId": 653116707962949, + "name": "巴州区", + "shortName": null, + "level": 3, + "code": "511902", + "pinyin": "BaZhouQu", + "pinyinFirst": "BZQ", + "capital": "东城街道", + "population": 77, + "area": 1407, + "areaCode": "0827", + "zipCode": "636600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707967046, + "parentId": 653116707962949, + "name": "恩阳区", + "shortName": null, + "level": 3, + "code": "511903", + "pinyin": "EnYangQu", + "pinyinFirst": "EYQ", + "capital": "登科街道", + "population": 57, + "area": 1177, + "areaCode": "0827", + "zipCode": "636063", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707967047, + "parentId": 653116707962949, + "name": "通江县", + "shortName": null, + "level": 3, + "code": "511921", + "pinyin": "TongJiangXian", + "pinyinFirst": "TJX", + "capital": "壁州街道", + "population": 72, + "area": 4116, + "areaCode": "0827", + "zipCode": "636700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707967048, + "parentId": 653116707962949, + "name": "南江县", + "shortName": null, + "level": 3, + "code": "511922", + "pinyin": "NanJiangXian", + "pinyinFirst": "NJX", + "capital": "集州街道", + "population": 65, + "area": 3383, + "areaCode": "0827", + "zipCode": "635600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116707967049, + "parentId": 653116707962949, + "name": "平昌县", + "shortName": null, + "level": 3, + "code": "511923", + "pinyin": "PingChangXian", + "pinyinFirst": "PCX", + "capital": "同州街道", + "population": 93, + "area": 2229, + "areaCode": "0827", + "zipCode": "636400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708261957, + "parentId": 653116703445061, + "name": "资阳市", + "shortName": null, + "level": 2, + "code": "512000", + "pinyin": "ZiYangShi", + "pinyinFirst": "ZYS", + "capital": "雁江区", + "population": 342, + "area": 5747, + "areaCode": "028", + "zipCode": "641300", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116708266053, + "parentId": 653116708261957, + "name": "雁江区", + "shortName": null, + "level": 3, + "code": "512002", + "pinyin": "YanJiangQu", + "pinyinFirst": "YJQ", + "capital": "宝莲街道", + "population": 107, + "area": 1632, + "areaCode": "028", + "zipCode": "641300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708266054, + "parentId": 653116708261957, + "name": "乐至县", + "shortName": null, + "level": 3, + "code": "512022", + "pinyin": "LeZhiXian", + "pinyinFirst": "LZX", + "capital": "天池街道", + "population": 80, + "area": 1425, + "areaCode": "028", + "zipCode": "641500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708266055, + "parentId": 653116708261957, + "name": "安岳县", + "shortName": null, + "level": 3, + "code": "512021", + "pinyin": "AnYueXian", + "pinyinFirst": "AYX", + "capital": "岳城街道", + "population": 156, + "area": 2690, + "areaCode": "028", + "zipCode": "642350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708536389, + "parentId": 653116703445061, + "name": "阿坝藏族羌族自治州", + "shortName": null, + "level": 2, + "code": "513200", + "pinyin": "ABaZangZuQiangZuZiZhiZhou", + "pinyinFirst": "ABZZQZZZZ", + "capital": "马尔康市", + "population": 90, + "area": 85131, + "areaCode": "0837", + "zipCode": "624000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116708540485, + "parentId": 653116708536389, + "name": "马尔康市", + "shortName": null, + "level": 3, + "code": "513201", + "pinyin": "MaErKangShi", + "pinyinFirst": "MEKS", + "capital": "马尔康镇", + "population": 5, + "area": 6633, + "areaCode": "0837", + "zipCode": "624000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708540486, + "parentId": 653116708536389, + "name": "汶川县", + "shortName": null, + "level": 3, + "code": "513221", + "pinyin": "WenChuanXian", + "pinyinFirst": "WCX", + "capital": "威州镇", + "population": 9, + "area": 4084, + "areaCode": "0837", + "zipCode": "623000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708540487, + "parentId": 653116708536389, + "name": "理县", + "shortName": null, + "level": 3, + "code": "513222", + "pinyin": "LiXian", + "pinyinFirst": "LX", + "capital": "杂谷脑镇", + "population": 4, + "area": 4318, + "areaCode": "0837", + "zipCode": "623100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708540488, + "parentId": 653116708536389, + "name": "茂县", + "shortName": null, + "level": 3, + "code": "513223", + "pinyin": "MaoXian", + "pinyinFirst": "MX", + "capital": "凤仪镇", + "population": 11, + "area": 3903, + "areaCode": "0837", + "zipCode": "623200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708540489, + "parentId": 653116708536389, + "name": "松潘县", + "shortName": null, + "level": 3, + "code": "513224", + "pinyin": "SongPanXian", + "pinyinFirst": "SPX", + "capital": "进安镇", + "population": 7, + "area": 9339, + "areaCode": "0837", + "zipCode": "623300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708540490, + "parentId": 653116708536389, + "name": "九寨沟县", + "shortName": null, + "level": 3, + "code": "513225", + "pinyin": "JiuZhaiGouXian", + "pinyinFirst": "JZGX", + "capital": "南坪镇", + "population": 7, + "area": 5290, + "areaCode": "0837", + "zipCode": "623400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708540491, + "parentId": 653116708536389, + "name": "金川县", + "shortName": null, + "level": 3, + "code": "513226", + "pinyin": "JinChuanXian", + "pinyinFirst": "JCX", + "capital": "勒乌镇", + "population": 7, + "area": 5550, + "areaCode": "0837", + "zipCode": "624100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708540492, + "parentId": 653116708536389, + "name": "小金县", + "shortName": null, + "level": 3, + "code": "513227", + "pinyin": "XiaoJinXian", + "pinyinFirst": "XJX", + "capital": "美兴镇", + "population": 8, + "area": 5571, + "areaCode": "0837", + "zipCode": "624200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708540493, + "parentId": 653116708536389, + "name": "黑水县", + "shortName": null, + "level": 3, + "code": "513228", + "pinyin": "HeiShuiXian", + "pinyinFirst": "HSX", + "capital": "芦花镇", + "population": 6, + "area": 4154, + "areaCode": "0837", + "zipCode": "623500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708540494, + "parentId": 653116708536389, + "name": "壤塘县", + "shortName": null, + "level": 3, + "code": "513230", + "pinyin": "RangTangXian", + "pinyinFirst": "RTX", + "capital": "岗木达镇", + "population": 5, + "area": 6836, + "areaCode": "0837", + "zipCode": "624300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708540495, + "parentId": 653116708536389, + "name": "阿坝县", + "shortName": null, + "level": 3, + "code": "513231", + "pinyin": "ABaXian", + "pinyinFirst": "ABX", + "capital": "阿坝镇", + "population": 8, + "area": 10435, + "areaCode": "0837", + "zipCode": "624600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708552773, + "parentId": 653116708536389, + "name": "若尔盖县", + "shortName": null, + "level": 3, + "code": "513232", + "pinyin": "RuoErGaiXian", + "pinyinFirst": "REGX", + "capital": "达扎寺镇", + "population": 8, + "area": 10620, + "areaCode": "0837", + "zipCode": "624500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708552774, + "parentId": 653116708536389, + "name": "红原县", + "shortName": null, + "level": 3, + "code": "513233", + "pinyin": "HongYuanXian", + "pinyinFirst": "HYX", + "capital": "邛溪镇", + "population": 5, + "area": 8398, + "areaCode": "0837", + "zipCode": "624400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708876357, + "parentId": 653116703445061, + "name": "甘孜藏族自治州", + "shortName": null, + "level": 2, + "code": "513300", + "pinyin": "GanZiZangZuZiZhiZhou", + "pinyinFirst": "GZZZZZZ", + "capital": "康定市", + "population": 110, + "area": 152629, + "areaCode": "0836", + "zipCode": "626000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116708880453, + "parentId": 653116708876357, + "name": "康定市", + "shortName": null, + "level": 3, + "code": "513301", + "pinyin": "KangDingShi", + "pinyinFirst": "KDS", + "capital": "炉城街道", + "population": 11, + "area": 11486, + "areaCode": "0836", + "zipCode": "626000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880454, + "parentId": 653116708876357, + "name": "泸定县", + "shortName": null, + "level": 3, + "code": "513322", + "pinyin": "LuDingXian", + "pinyinFirst": "LDX", + "capital": "泸桥镇", + "population": 9, + "area": 2165, + "areaCode": "0836", + "zipCode": "626100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880455, + "parentId": 653116708876357, + "name": "丹巴县", + "shortName": null, + "level": 3, + "code": "513323", + "pinyin": "DanBaXian", + "pinyinFirst": "DBX", + "capital": "章谷镇", + "population": 6, + "area": 4656, + "areaCode": "0836", + "zipCode": "626300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880456, + "parentId": 653116708876357, + "name": "九龙县", + "shortName": null, + "level": 3, + "code": "513324", + "pinyin": "JiuLongXian", + "pinyinFirst": "JLX", + "capital": "呷尔镇", + "population": 6, + "area": 6766, + "areaCode": "0836", + "zipCode": "626300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880457, + "parentId": 653116708876357, + "name": "雅江县", + "shortName": null, + "level": 3, + "code": "513325", + "pinyin": "YaJiangXian", + "pinyinFirst": "YJX", + "capital": "河口镇", + "population": 5, + "area": 7558, + "areaCode": "0836", + "zipCode": "627450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880458, + "parentId": 653116708876357, + "name": "道孚县", + "shortName": null, + "level": 3, + "code": "513326", + "pinyin": "DaoFuXian", + "pinyinFirst": "DFX", + "capital": "鲜水镇", + "population": 6, + "area": 7053, + "areaCode": "0836", + "zipCode": "626400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880459, + "parentId": 653116708876357, + "name": "炉霍县", + "shortName": null, + "level": 3, + "code": "513327", + "pinyin": "LuHuoXian", + "pinyinFirst": "LHX", + "capital": "新都镇", + "population": 5, + "area": 4601, + "areaCode": "0836", + "zipCode": "626500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880460, + "parentId": 653116708876357, + "name": "甘孜县", + "shortName": null, + "level": 3, + "code": "513328", + "pinyin": "GanZiXian", + "pinyinFirst": "GZX", + "capital": "甘孜镇", + "population": 6, + "area": 7303, + "areaCode": "0836", + "zipCode": "626700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880461, + "parentId": 653116708876357, + "name": "新龙县", + "shortName": null, + "level": 3, + "code": "513329", + "pinyin": "XinLongXian", + "pinyinFirst": "XLX", + "capital": "如龙镇", + "population": 5, + "area": 8570, + "areaCode": "0836", + "zipCode": "626800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880462, + "parentId": 653116708876357, + "name": "德格县", + "shortName": null, + "level": 3, + "code": "513330", + "pinyin": "DeGeXian", + "pinyinFirst": "DGX", + "capital": "更庆镇", + "population": 9, + "area": 11025, + "areaCode": "0836", + "zipCode": "627250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880463, + "parentId": 653116708876357, + "name": "白玉县", + "shortName": null, + "level": 3, + "code": "513331", + "pinyin": "BaiYuXian", + "pinyinFirst": "BYX", + "capital": "建设镇", + "population": 6, + "area": 10386, + "areaCode": "0836", + "zipCode": "627150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880464, + "parentId": 653116708876357, + "name": "石渠县", + "shortName": null, + "level": 3, + "code": "513332", + "pinyin": "ShiQuXian", + "pinyinFirst": "SQX", + "capital": "尼呷镇", + "population": 10, + "area": 24944, + "areaCode": "0836", + "zipCode": "627350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880465, + "parentId": 653116708876357, + "name": "色达县", + "shortName": null, + "level": 3, + "code": "513333", + "pinyin": "SeDaXian", + "pinyinFirst": "SDX", + "capital": "色柯镇", + "population": 6, + "area": 9332, + "areaCode": "0836", + "zipCode": "626600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880466, + "parentId": 653116708876357, + "name": "理塘县", + "shortName": null, + "level": 3, + "code": "513334", + "pinyin": "LiTangXian", + "pinyinFirst": "LTX", + "capital": "高城镇", + "population": 7, + "area": 13677, + "areaCode": "0836", + "zipCode": "627550", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880467, + "parentId": 653116708876357, + "name": "巴塘县", + "shortName": null, + "level": 3, + "code": "513335", + "pinyin": "BaTangXian", + "pinyinFirst": "BTX", + "capital": "夏邛镇", + "population": 5, + "area": 7852, + "areaCode": "0836", + "zipCode": "627650", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880468, + "parentId": 653116708876357, + "name": "乡城县", + "shortName": null, + "level": 3, + "code": "513336", + "pinyin": "XiangChengXian", + "pinyinFirst": "XCX", + "capital": "香巴拉镇", + "population": 3, + "area": 5016, + "areaCode": "0836", + "zipCode": "627850", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880469, + "parentId": 653116708876357, + "name": "稻城县", + "shortName": null, + "level": 3, + "code": "513337", + "pinyin": "DaoChengXian", + "pinyinFirst": "DCX", + "capital": "金珠镇", + "population": 3, + "area": 7323, + "areaCode": "0836", + "zipCode": "627750", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116708880470, + "parentId": 653116708876357, + "name": "得荣县", + "shortName": null, + "level": 3, + "code": "513338", + "pinyin": "DeRongXian", + "pinyinFirst": "DRX", + "capital": "松麦镇", + "population": 3, + "area": 2916, + "areaCode": "0836", + "zipCode": "627250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709253189, + "parentId": 653116703445061, + "name": "凉山彝族自治州", + "shortName": null, + "level": 2, + "code": "513400", + "pinyin": "LiangShanYiZuZiZhiZhou", + "pinyinFirst": "LSYZZZZ", + "capital": "西昌市", + "population": 531, + "area": 60423, + "areaCode": "0834", + "zipCode": "615000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116709253190, + "parentId": 653116709253189, + "name": "西昌市", + "shortName": null, + "level": 3, + "code": "513401", + "pinyin": "XiChangShi", + "pinyinFirst": "XCS", + "capital": "北城街道", + "population": 69, + "area": 2655, + "areaCode": "0834", + "zipCode": "615000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709253191, + "parentId": 653116709253189, + "name": "会理市", + "shortName": null, + "level": 3, + "code": "513402", + "pinyin": "HuiLiShi", + "pinyinFirst": "HLS", + "capital": "城北街道", + "population": 46, + "area": 4527, + "areaCode": "0834", + "zipCode": "615100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709253192, + "parentId": 653116709253189, + "name": "盐源县", + "shortName": null, + "level": 3, + "code": "513423", + "pinyin": "YanYuanXian", + "pinyinFirst": "YYX", + "capital": "盐井镇", + "population": 39, + "area": 8388, + "areaCode": "0834", + "zipCode": "615700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709253193, + "parentId": 653116709253189, + "name": "德昌县", + "shortName": null, + "level": 3, + "code": "513424", + "pinyin": "DeChangXian", + "pinyinFirst": "DCX", + "capital": "德州街道", + "population": 22, + "area": 2284, + "areaCode": "0834", + "zipCode": "615500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709253194, + "parentId": 653116709253189, + "name": "会东县", + "shortName": null, + "level": 3, + "code": "513426", + "pinyin": "HuiDongXian", + "pinyinFirst": "HDX", + "capital": "鱼城街道", + "population": 43, + "area": 3227, + "areaCode": "0834", + "zipCode": "615200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709253195, + "parentId": 653116709253189, + "name": "宁南县", + "shortName": null, + "level": 3, + "code": "513427", + "pinyin": "NingNanXian", + "pinyinFirst": "NNX", + "capital": "宁远镇", + "population": 20, + "area": 1667, + "areaCode": "0834", + "zipCode": "615400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709253196, + "parentId": 653116709253189, + "name": "普格县", + "shortName": null, + "level": 3, + "code": "513428", + "pinyin": "PuGeXian", + "pinyinFirst": "PGX", + "capital": "普基镇", + "population": 22, + "area": 1905, + "areaCode": "0834", + "zipCode": "615300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709253197, + "parentId": 653116709253189, + "name": "布拖县", + "shortName": null, + "level": 3, + "code": "513429", + "pinyin": "BuTuoXian", + "pinyinFirst": "BTX", + "capital": "特木里镇", + "population": 21, + "area": 1685, + "areaCode": "0834", + "zipCode": "615350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709253198, + "parentId": 653116709253189, + "name": "金阳县", + "shortName": null, + "level": 3, + "code": "513430", + "pinyin": "JinYangXian", + "pinyinFirst": "JYX", + "capital": "天地坝镇", + "population": 21, + "area": 1587, + "areaCode": "0834", + "zipCode": "615250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709253199, + "parentId": 653116709253189, + "name": "昭觉县", + "shortName": null, + "level": 3, + "code": "513431", + "pinyin": "ZhaoJueXian", + "pinyinFirst": "ZJX", + "capital": "新城镇", + "population": 34, + "area": 2699, + "areaCode": "0834", + "zipCode": "616150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709253200, + "parentId": 653116709253189, + "name": "喜德县", + "shortName": null, + "level": 3, + "code": "513432", + "pinyin": "XiDeXian", + "pinyinFirst": "XDX", + "capital": "光明镇", + "population": 22, + "area": 2206, + "areaCode": "0834", + "zipCode": "616750", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709253201, + "parentId": 653116709253189, + "name": "冕宁县", + "shortName": null, + "level": 3, + "code": "513433", + "pinyin": "MianNingXian", + "pinyinFirst": "MNX", + "capital": "高阳街道", + "population": 40, + "area": 4423, + "areaCode": "0834", + "zipCode": "615600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709257285, + "parentId": 653116709253189, + "name": "越西县", + "shortName": null, + "level": 3, + "code": "513434", + "pinyin": "YueXiXian", + "pinyinFirst": "YXX", + "capital": "越城镇", + "population": 37, + "area": 2257, + "areaCode": "0834", + "zipCode": "616650", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709257286, + "parentId": 653116709253189, + "name": "甘洛县", + "shortName": null, + "level": 3, + "code": "513435", + "pinyin": "GanLuoXian", + "pinyinFirst": "GLX", + "capital": "新市坝镇", + "population": 24, + "area": 2156, + "areaCode": "0834", + "zipCode": "616850", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709257287, + "parentId": 653116709253189, + "name": "美姑县", + "shortName": null, + "level": 3, + "code": "513436", + "pinyin": "MeiGuXian", + "pinyinFirst": "MGX", + "capital": "巴普镇", + "population": 28, + "area": 2573, + "areaCode": "0834", + "zipCode": "616450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709257288, + "parentId": 653116709253189, + "name": "雷波县", + "shortName": null, + "level": 3, + "code": "513437", + "pinyin": "LeiBoXian", + "pinyinFirst": "LBX", + "capital": "锦城镇", + "population": 28, + "area": 2932, + "areaCode": "0834", + "zipCode": "616550", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709257289, + "parentId": 653116709253189, + "name": "木里藏族自治县", + "shortName": null, + "level": 3, + "code": "513422", + "pinyin": "MuLiZangZuZiZhiXian", + "pinyinFirst": "MLZZZZX", + "capital": "乔瓦镇", + "population": 14, + "area": 13252, + "areaCode": "0834", + "zipCode": "615800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:42", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:16" + }, + { + "id": 653116709695557, + "parentId": 0, + "name": "贵州省", + "shortName": "黔、贵", + "level": 1, + "code": "520000", + "pinyin": "GuiZhouSheng", + "pinyinFirst": "GZS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116710842437, + "parentId": 653116709695557, + "name": "贵阳市", + "shortName": null, + "level": 2, + "code": "520100", + "pinyin": "GuiYangShi", + "pinyinFirst": "GYS", + "capital": "乌当区", + "population": 428, + "area": 8035, + "areaCode": "0851", + "zipCode": "550000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116710842438, + "parentId": 653116710842437, + "name": "乌当区", + "shortName": null, + "level": 3, + "code": "520112", + "pinyin": "WuDangQu", + "pinyinFirst": "WDQ", + "capital": "观溪路街道", + "population": 23, + "area": 686, + "areaCode": "0851", + "zipCode": "550018", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116710842439, + "parentId": 653116710842437, + "name": "南明区", + "shortName": null, + "level": 3, + "code": "520102", + "pinyin": "NanMingQu", + "pinyinFirst": "NMQ", + "capital": "新华路街道", + "population": 67, + "area": 271, + "areaCode": "0851", + "zipCode": "550001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116710842440, + "parentId": 653116710842437, + "name": "云岩区", + "shortName": null, + "level": 3, + "code": "520103", + "pinyin": "YunYanQu", + "pinyinFirst": "YYQ", + "capital": "大营路街道", + "population": 68, + "area": 94, + "areaCode": "0851", + "zipCode": "550001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116710842441, + "parentId": 653116710842437, + "name": "花溪区", + "shortName": null, + "level": 3, + "code": "520111", + "pinyin": "HuaXiQu", + "pinyinFirst": "HXQ", + "capital": "阳光街道", + "population": 54, + "area": 964, + "areaCode": "0851", + "zipCode": "550025", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116710842442, + "parentId": 653116710842437, + "name": "白云区", + "shortName": null, + "level": 3, + "code": "520113", + "pinyin": "BaiYunQu", + "pinyinFirst": "BYQ", + "capital": "泉湖街道", + "population": 23, + "area": 270, + "areaCode": "0851", + "zipCode": "550014", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116710842443, + "parentId": 653116710842437, + "name": "观山湖区", + "shortName": null, + "level": 3, + "code": "520115", + "pinyin": "GuanShanHuQu", + "pinyinFirst": "GSHQ", + "capital": "世纪城街道", + "population": 34, + "area": 309, + "areaCode": "0851", + "zipCode": "550009", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116710842444, + "parentId": 653116710842437, + "name": "清镇市", + "shortName": null, + "level": 3, + "code": "520181", + "pinyin": "QingZhenShi", + "pinyinFirst": "QZS", + "capital": "滨湖街道", + "population": 55, + "area": 1302, + "areaCode": "0851", + "zipCode": "551400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116710842445, + "parentId": 653116710842437, + "name": "开阳县", + "shortName": null, + "level": 3, + "code": "520121", + "pinyin": "KaiYangXian", + "pinyinFirst": "KYX", + "capital": "硒城街道", + "population": 46, + "area": 2026, + "areaCode": "0851", + "zipCode": "550300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116710842446, + "parentId": 653116710842437, + "name": "息烽县", + "shortName": null, + "level": 3, + "code": "520122", + "pinyin": "XiFengXian", + "pinyinFirst": "XFX", + "capital": "永阳街道", + "population": 28, + "area": 1037, + "areaCode": "0851", + "zipCode": "551100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116710842447, + "parentId": 653116710842437, + "name": "修文县", + "shortName": null, + "level": 3, + "code": "520123", + "pinyin": "XiuWenXian", + "pinyinFirst": "XWX", + "capital": "龙场街道", + "population": 33, + "area": 1076, + "areaCode": "0851", + "zipCode": "550200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116710920261, + "parentId": 653116709695557, + "name": "六盘水市", + "shortName": null, + "level": 2, + "code": "520200", + "pinyin": "LiuPanShuiShi", + "pinyinFirst": "LPSS", + "capital": "钟山区", + "population": 353, + "area": 9919, + "areaCode": "0858", + "zipCode": "553000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116710920262, + "parentId": 653116710920261, + "name": "钟山区", + "shortName": null, + "level": 3, + "code": "520201", + "pinyin": "ZhongShanQu", + "pinyinFirst": "ZSQ", + "capital": "凤凰街道", + "population": 68, + "area": 1034, + "areaCode": "0858", + "zipCode": "553000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116710920263, + "parentId": 653116710920261, + "name": "水城区", + "shortName": null, + "level": 3, + "code": "520204", + "pinyin": "ShuiChengQu", + "pinyinFirst": "SCQ", + "capital": "双水街道", + "population": 81, + "area": 3036, + "areaCode": "0858", + "zipCode": "553600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116710920264, + "parentId": 653116710920261, + "name": "盘州市", + "shortName": null, + "level": 3, + "code": "520281", + "pinyin": "PanZhouShi", + "pinyinFirst": "PZS", + "capital": "亦资街道", + "population": 131, + "area": 4057, + "areaCode": "0858", + "zipCode": "553500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116710920265, + "parentId": 653116710920261, + "name": "六枝特区", + "shortName": null, + "level": 3, + "code": "520203", + "pinyin": "LiuZhiTeQu", + "pinyinFirst": "LZTQ", + "capital": "九龙街道", + "population": 74, + "area": 1792, + "areaCode": "0858", + "zipCode": "553400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711026757, + "parentId": 653116709695557, + "name": "遵义市", + "shortName": null, + "level": 2, + "code": "520300", + "pinyin": "ZunYiShi", + "pinyinFirst": "ZYS", + "capital": "汇川区", + "population": 819, + "area": 30763, + "areaCode": "0851", + "zipCode": "563000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116711026758, + "parentId": 653116711026757, + "name": "汇川区", + "shortName": null, + "level": 3, + "code": "520303", + "pinyin": "HuiChuanQu", + "pinyinFirst": "HCQ", + "capital": "董公寺街道", + "population": 57, + "area": 1480, + "areaCode": "0851", + "zipCode": "563000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711026759, + "parentId": 653116711026757, + "name": "红花岗区", + "shortName": null, + "level": 3, + "code": "520302", + "pinyin": "HongHuaGangQu", + "pinyinFirst": "HHGQ", + "capital": "忠庄街道", + "population": 81, + "area": 1406, + "areaCode": "0851", + "zipCode": "563000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711026760, + "parentId": 653116711026757, + "name": "播州区", + "shortName": null, + "level": 3, + "code": "520304", + "pinyin": "BoZhouQu", + "pinyinFirst": "BZQ", + "capital": "南白街道", + "population": 88, + "area": 2510, + "areaCode": "0851", + "zipCode": "563100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711026761, + "parentId": 653116711026757, + "name": "赤水市", + "shortName": null, + "level": 3, + "code": "520381", + "pinyin": "ChiShuiShi", + "pinyinFirst": "CSS", + "capital": "市中街道", + "population": 32, + "area": 1801, + "areaCode": "0851", + "zipCode": "564700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711026762, + "parentId": 653116711026757, + "name": "仁怀市", + "shortName": null, + "level": 3, + "code": "520382", + "pinyin": "RenHuaiShi", + "pinyinFirst": "RHS", + "capital": "盐津街道", + "population": 73, + "area": 1788, + "areaCode": "0851", + "zipCode": "564500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711026763, + "parentId": 653116711026757, + "name": "桐梓县", + "shortName": null, + "level": 3, + "code": "520322", + "pinyin": "TongZiXian", + "pinyinFirst": "TZX", + "capital": "海校街道", + "population": 75, + "area": 3190, + "areaCode": "0851", + "zipCode": "563200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711026764, + "parentId": 653116711026757, + "name": "绥阳县", + "shortName": null, + "level": 3, + "code": "520323", + "pinyin": "SuiYangXian", + "pinyinFirst": "SYX", + "capital": "洋川街道", + "population": 57, + "area": 2566, + "areaCode": "0851", + "zipCode": "563300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711026765, + "parentId": 653116711026757, + "name": "正安县", + "shortName": null, + "level": 3, + "code": "520324", + "pinyin": "ZhengAnXian", + "pinyinFirst": "ZAX", + "capital": "凤仪街道", + "population": 66, + "area": 2595, + "areaCode": "0851", + "zipCode": "563400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711026766, + "parentId": 653116711026757, + "name": "凤冈县", + "shortName": null, + "level": 3, + "code": "520327", + "pinyin": "FengGangXian", + "pinyinFirst": "FGX", + "capital": "龙泉街道", + "population": 45, + "area": 1883, + "areaCode": "0851", + "zipCode": "564200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711026767, + "parentId": 653116711026757, + "name": "湄潭县", + "shortName": null, + "level": 3, + "code": "520328", + "pinyin": "MeiTanXian", + "pinyinFirst": "MTX", + "capital": "湄江街道", + "population": 51, + "area": 1845, + "areaCode": "0851", + "zipCode": "564100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711026768, + "parentId": 653116711026757, + "name": "余庆县", + "shortName": null, + "level": 3, + "code": "520329", + "pinyin": "YuQingXian", + "pinyinFirst": "YQX", + "capital": "白泥镇", + "population": 31, + "area": 1630, + "areaCode": "0851", + "zipCode": "564400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711026769, + "parentId": 653116711026757, + "name": "习水县", + "shortName": null, + "level": 3, + "code": "520330", + "pinyin": "XiShuiXian", + "pinyinFirst": "XSX", + "capital": "杉王街道", + "population": 78, + "area": 3128, + "areaCode": "0851", + "zipCode": "564600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711026770, + "parentId": 653116711026757, + "name": "道真仡佬族苗族自治县", + "shortName": null, + "level": 3, + "code": "520325", + "pinyin": "DaoZhenGeLaoZuMiaoZuZiZhiXian", + "pinyinFirst": "DZGLZMZZZX", + "capital": "尹珍街道", + "population": 35, + "area": 2156, + "areaCode": "0851", + "zipCode": "563500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711026771, + "parentId": 653116711026757, + "name": "务川仡佬族苗族自治县", + "shortName": null, + "level": 3, + "code": "520326", + "pinyin": "WuChuanGeLaoZuMiaoZuZiZhiXian", + "pinyinFirst": "WCGLZMZZZX", + "capital": "丹砂街道", + "population": 48, + "area": 2773, + "areaCode": "0851", + "zipCode": "564300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711186501, + "parentId": 653116709695557, + "name": "安顺市", + "shortName": null, + "level": 2, + "code": "520400", + "pinyin": "AnShunShi", + "pinyinFirst": "ASS", + "capital": "西秀区", + "population": 307, + "area": 9269, + "areaCode": "0851", + "zipCode": "561000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116711186502, + "parentId": 653116711186501, + "name": "西秀区", + "shortName": null, + "level": 3, + "code": "520402", + "pinyin": "XiXiuQu", + "pinyinFirst": "XXQ", + "capital": "东关街道", + "population": 94, + "area": 1705, + "areaCode": "0851", + "zipCode": "561000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711186503, + "parentId": 653116711186501, + "name": "平坝区", + "shortName": null, + "level": 3, + "code": "520403", + "pinyin": "PingBaQu", + "pinyinFirst": "PBQ", + "capital": "安平街道", + "population": 38, + "area": 999, + "areaCode": "0851", + "zipCode": "561100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711186504, + "parentId": 653116711186501, + "name": "普定县", + "shortName": null, + "level": 3, + "code": "520422", + "pinyin": "PuDingXian", + "pinyinFirst": "PDX", + "capital": "定南街道", + "population": 52, + "area": 1092, + "areaCode": "0851", + "zipCode": "562100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711186505, + "parentId": 653116711186501, + "name": "镇宁布依族苗族自治县", + "shortName": null, + "level": 3, + "code": "520423", + "pinyin": "ZhenNingBuYiZuMiaoZuZiZhiXian", + "pinyinFirst": "ZNBYZMZZZX", + "capital": "白马湖街道", + "population": 41, + "area": 1721, + "areaCode": "0851", + "zipCode": "561200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711186506, + "parentId": 653116711186501, + "name": "关岭布依族苗族自治县", + "shortName": null, + "level": 3, + "code": "520424", + "pinyin": "GuanLingBuYiZuMiaoZuZiZhiXian", + "pinyinFirst": "GLBYZMZZZX", + "capital": "关索街道", + "population": 41, + "area": 1468, + "areaCode": "0851", + "zipCode": "561300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711186507, + "parentId": 653116711186501, + "name": "紫云苗族布依族自治县", + "shortName": null, + "level": 3, + "code": "520425", + "pinyin": "ZiYunMiaoZuBuYiZuZiZhiXian", + "pinyinFirst": "ZYMZBYZZZX", + "capital": "松山街道", + "population": 41, + "area": 2284, + "areaCode": "0851", + "zipCode": "550800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711329861, + "parentId": 653116709695557, + "name": "毕节市", + "shortName": null, + "level": 2, + "code": "520500", + "pinyin": "BiJieShi", + "pinyinFirst": "BJS", + "capital": "七星关区", + "population": 938, + "area": 26852, + "areaCode": "0857", + "zipCode": "551700", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116711333957, + "parentId": 653116711329861, + "name": "七星关区", + "shortName": null, + "level": 3, + "code": "520502", + "pinyin": "QiXingGuanQu", + "pinyinFirst": "QXGQ", + "capital": "麻园街道", + "population": 169, + "area": 3412, + "areaCode": "0857", + "zipCode": "551700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711333958, + "parentId": 653116711329861, + "name": "黔西市", + "shortName": null, + "level": 3, + "code": "520581", + "pinyin": "QianXiShi", + "pinyinFirst": "QXS", + "capital": "莲城街道", + "population": 101, + "area": 2554, + "areaCode": "0857", + "zipCode": "551500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711333959, + "parentId": 653116711329861, + "name": "大方县", + "shortName": null, + "level": 3, + "code": "520521", + "pinyin": "DaFangXian", + "pinyinFirst": "DFX", + "capital": "红旗街道", + "population": 122, + "area": 3502, + "areaCode": "0857", + "zipCode": "551600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711333960, + "parentId": 653116711329861, + "name": "金沙县", + "shortName": null, + "level": 3, + "code": "520523", + "pinyin": "JinShaXian", + "pinyinFirst": "JSX", + "capital": "鼓场街道", + "population": 70, + "area": 2528, + "areaCode": "0857", + "zipCode": "551800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711333961, + "parentId": 653116711329861, + "name": "织金县", + "shortName": null, + "level": 3, + "code": "520524", + "pinyin": "ZhiJinXian", + "pinyinFirst": "ZJX", + "capital": "文腾街道", + "population": 125, + "area": 2867, + "areaCode": "0857", + "zipCode": "552100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711333962, + "parentId": 653116711329861, + "name": "纳雍县", + "shortName": null, + "level": 3, + "code": "520525", + "pinyin": "NaYongXian", + "pinyinFirst": "NYX", + "capital": "雍熙街道", + "population": 107, + "area": 2448, + "areaCode": "0857", + "zipCode": "553300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711333963, + "parentId": 653116711329861, + "name": "赫章县", + "shortName": null, + "level": 3, + "code": "520527", + "pinyin": "HeZhangXian", + "pinyinFirst": "HZX", + "capital": "双河街道", + "population": 88, + "area": 3245, + "areaCode": "0857", + "zipCode": "553200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711333964, + "parentId": 653116711329861, + "name": "威宁彝族回族苗族自治县", + "shortName": null, + "level": 3, + "code": "520526", + "pinyin": "WeiNingYiZuHuiZuMiaoZuZiZhiXian", + "pinyinFirst": "WNYZHZMZZZX", + "capital": "海边街道", + "population": 157, + "area": 6296, + "areaCode": "0857", + "zipCode": "553100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711485509, + "parentId": 653116709695557, + "name": "铜仁市", + "shortName": null, + "level": 2, + "code": "520600", + "pinyin": "TongRenShi", + "pinyinFirst": "TRS", + "capital": "碧江区", + "population": 446, + "area": 18002, + "areaCode": "0856", + "zipCode": "554300", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116711485510, + "parentId": 653116711485509, + "name": "碧江区", + "shortName": null, + "level": 3, + "code": "520602", + "pinyin": "BiJiangQu", + "pinyinFirst": "BJQ", + "capital": "锦江街道", + "population": 33, + "area": 1002, + "areaCode": "0856", + "zipCode": "554300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711485511, + "parentId": 653116711485509, + "name": "万山区", + "shortName": null, + "level": 3, + "code": "520603", + "pinyin": "WanShanQu", + "pinyinFirst": "WSQ", + "capital": "万山镇", + "population": 17, + "area": 849, + "areaCode": "0856", + "zipCode": "554200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711485512, + "parentId": 653116711485509, + "name": "江口县", + "shortName": null, + "level": 3, + "code": "520621", + "pinyin": "JiangKouXian", + "pinyinFirst": "JKX", + "capital": "双江街道", + "population": 25, + "area": 1869, + "areaCode": "0856", + "zipCode": "554400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711485513, + "parentId": 653116711485509, + "name": "石阡县", + "shortName": null, + "level": 3, + "code": "520623", + "pinyin": "ShiQianXian", + "pinyinFirst": "SQX", + "capital": "泉都街道", + "population": 42, + "area": 2172, + "areaCode": "0856", + "zipCode": "555100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711489605, + "parentId": 653116711485509, + "name": "思南县", + "shortName": null, + "level": 3, + "code": "520624", + "pinyin": "SiNanXian", + "pinyinFirst": "SNX", + "capital": "思唐街道", + "population": 69, + "area": 2231, + "areaCode": "0856", + "zipCode": "565100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711489606, + "parentId": 653116711485509, + "name": "德江县", + "shortName": null, + "level": 3, + "code": "520626", + "pinyin": "DeJiangXian", + "pinyinFirst": "DJX", + "capital": "安化街道", + "population": 55, + "area": 2072, + "areaCode": "0856", + "zipCode": "565200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711489607, + "parentId": 653116711485509, + "name": "玉屏侗族自治县", + "shortName": null, + "level": 3, + "code": "520622", + "pinyin": "YuPingDongZuZiZhiXian", + "pinyinFirst": "YPDZZZX", + "capital": "皂角坪街道", + "population": 17, + "area": 516, + "areaCode": "0856", + "zipCode": "554000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711489608, + "parentId": 653116711485509, + "name": "印江土家族苗族自治县", + "shortName": null, + "level": 3, + "code": "520625", + "pinyin": "YinJiangTuJiaZuMiaoZuZiZhiXian", + "pinyinFirst": "YJTJZMZZZX", + "capital": "峨岭街道", + "population": 46, + "area": 1961, + "areaCode": "0856", + "zipCode": "555200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711489609, + "parentId": 653116711485509, + "name": "沿河土家族自治县", + "shortName": null, + "level": 3, + "code": "520627", + "pinyin": "YanHeTuJiaZuZiZhiXian", + "pinyinFirst": "YHTJZZZX", + "capital": "团结街道", + "population": 69, + "area": 2469, + "areaCode": "0856", + "zipCode": "565300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711489610, + "parentId": 653116711485509, + "name": "松桃苗族自治县", + "shortName": null, + "level": 3, + "code": "520628", + "pinyin": "SongTaoMiaoZuZiZhiXian", + "pinyinFirst": "STMZZZX", + "capital": "蓼皋街道", + "population": 73, + "area": 2861, + "areaCode": "0856", + "zipCode": "554100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711637061, + "parentId": 653116709695557, + "name": "黔西南布依族苗族自治州", + "shortName": null, + "level": 2, + "code": "522300", + "pinyin": "QianXiNanBuYiZuMiaoZuZiZhiZhou", + "pinyinFirst": "QXNBYZMZZZZ", + "capital": "兴义市", + "population": 369, + "area": 16805, + "areaCode": "0859", + "zipCode": "562400", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116711641157, + "parentId": 653116711637061, + "name": "兴义市", + "shortName": null, + "level": 3, + "code": "522301", + "pinyin": "XingYiShi", + "pinyinFirst": "XYS", + "capital": "黄草街道", + "population": 93, + "area": 2911, + "areaCode": "0859", + "zipCode": "562400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711641158, + "parentId": 653116711637061, + "name": "兴仁市", + "shortName": null, + "level": 3, + "code": "522302", + "pinyin": "XingRenShi", + "pinyinFirst": "XRS", + "capital": "城北街道", + "population": 57, + "area": 1785, + "areaCode": "0859", + "zipCode": "562300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711641159, + "parentId": 653116711637061, + "name": "普安县", + "shortName": null, + "level": 3, + "code": "522323", + "pinyin": "PuAnXian", + "pinyinFirst": "PAX", + "capital": "南湖街道", + "population": 35, + "area": 1429, + "areaCode": "0859", + "zipCode": "561500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711641160, + "parentId": 653116711637061, + "name": "晴隆县", + "shortName": null, + "level": 3, + "code": "522324", + "pinyin": "QingLongXian", + "pinyinFirst": "QLX", + "capital": "东观街道", + "population": 34, + "area": 1327, + "areaCode": "0859", + "zipCode": "561400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711641161, + "parentId": 653116711637061, + "name": "贞丰县", + "shortName": null, + "level": 3, + "code": "522325", + "pinyin": "ZhenFengXian", + "pinyinFirst": "ZFX", + "capital": "永丰街道", + "population": 43, + "area": 1512, + "areaCode": "0859", + "zipCode": "562200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711641162, + "parentId": 653116711637061, + "name": "望谟县", + "shortName": null, + "level": 3, + "code": "522326", + "pinyin": "WangMoXian", + "pinyinFirst": "WMX", + "capital": "王母街道", + "population": 32, + "area": 3006, + "areaCode": "0859", + "zipCode": "552300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711641163, + "parentId": 653116711637061, + "name": "册亨县", + "shortName": null, + "level": 3, + "code": "522327", + "pinyin": "CeHengXian", + "pinyinFirst": "CHX", + "capital": "者楼街道", + "population": 24, + "area": 2597, + "areaCode": "0859", + "zipCode": "552200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711641164, + "parentId": 653116711637061, + "name": "安龙县", + "shortName": null, + "level": 3, + "code": "522328", + "pinyin": "AnLongXian", + "pinyinFirst": "ALX", + "capital": "栖凤街道", + "population": 49, + "area": 2238, + "areaCode": "0859", + "zipCode": "552400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817285, + "parentId": 653116709695557, + "name": "黔东南苗族侗族自治州", + "shortName": null, + "level": 2, + "code": "522600", + "pinyin": "QianDongNanMiaoZuDongZuZiZhiZhou", + "pinyinFirst": "QDNMZDZZZZ", + "capital": "凯里市", + "population": 485, + "area": 30339, + "areaCode": "0855", + "zipCode": "556000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116711817286, + "parentId": 653116711817285, + "name": "凯里市", + "shortName": null, + "level": 3, + "code": "522601", + "pinyin": "KaiLiShi", + "pinyinFirst": "KLS", + "capital": "大十字街道", + "population": 58, + "area": 1570, + "areaCode": "0855", + "zipCode": "556000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817287, + "parentId": 653116711817285, + "name": "黄平县", + "shortName": null, + "level": 3, + "code": "522622", + "pinyin": "HuangPingXian", + "pinyinFirst": "HPX", + "capital": "新州镇", + "population": 39, + "area": 1668, + "areaCode": "0855", + "zipCode": "556100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817288, + "parentId": 653116711817285, + "name": "施秉县", + "shortName": null, + "level": 3, + "code": "522623", + "pinyin": "ShiBingXian", + "pinyinFirst": "SBX", + "capital": "城关镇", + "population": 18, + "area": 1544, + "areaCode": "0855", + "zipCode": "556200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817289, + "parentId": 653116711817285, + "name": "三穗县", + "shortName": null, + "level": 3, + "code": "522624", + "pinyin": "SanSuiXian", + "pinyinFirst": "SSX", + "capital": "文笔街道", + "population": 23, + "area": 1036, + "areaCode": "0855", + "zipCode": "556500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817290, + "parentId": 653116711817285, + "name": "镇远县", + "shortName": null, + "level": 3, + "code": "522625", + "pinyin": "ZhenYuanXian", + "pinyinFirst": "ZYX", + "capital": "?阳镇", + "population": 28, + "area": 1878, + "areaCode": "0855", + "zipCode": "557700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817291, + "parentId": 653116711817285, + "name": "岑巩县", + "shortName": null, + "level": 3, + "code": "522626", + "pinyin": "CenGongXian", + "pinyinFirst": "CGX", + "capital": "?水街道", + "population": 24, + "area": 1487, + "areaCode": "0855", + "zipCode": "557800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817292, + "parentId": 653116711817285, + "name": "天柱县", + "shortName": null, + "level": 3, + "code": "522627", + "pinyin": "TianZhuXian", + "pinyinFirst": "TZX", + "capital": "凤城街道", + "population": 42, + "area": 2201, + "areaCode": "0855", + "zipCode": "556600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817293, + "parentId": 653116711817285, + "name": "锦屏县", + "shortName": null, + "level": 3, + "code": "522628", + "pinyin": "JinPingXian", + "pinyinFirst": "JPX", + "capital": "三江镇", + "population": 24, + "area": 1597, + "areaCode": "0855", + "zipCode": "556700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817294, + "parentId": 653116711817285, + "name": "剑河县", + "shortName": null, + "level": 3, + "code": "522629", + "pinyin": "JianHeXian", + "pinyinFirst": "JHX", + "capital": "仰阿莎街道", + "population": 28, + "area": 2165, + "areaCode": "0855", + "zipCode": "556400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817295, + "parentId": 653116711817285, + "name": "台江县", + "shortName": null, + "level": 3, + "code": "522630", + "pinyin": "TaiJiangXian", + "pinyinFirst": "TJX", + "capital": "台拱街道", + "population": 17, + "area": 1078, + "areaCode": "0855", + "zipCode": "556300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817296, + "parentId": 653116711817285, + "name": "黎平县", + "shortName": null, + "level": 3, + "code": "522631", + "pinyin": "LiPingXian", + "pinyinFirst": "LPX", + "capital": "德凤街道", + "population": 57, + "area": 4439, + "areaCode": "0855", + "zipCode": "557300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817297, + "parentId": 653116711817285, + "name": "榕江县", + "shortName": null, + "level": 3, + "code": "522632", + "pinyin": "RongJiangXian", + "pinyinFirst": "RJX", + "capital": "古州镇", + "population": 38, + "area": 3316, + "areaCode": "0855", + "zipCode": "557200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817298, + "parentId": 653116711817285, + "name": "从江县", + "shortName": null, + "level": 3, + "code": "522633", + "pinyin": "CongJiangXian", + "pinyinFirst": "CJX", + "capital": "丙梅街道", + "population": 39, + "area": 3245, + "areaCode": "0855", + "zipCode": "557400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817299, + "parentId": 653116711817285, + "name": "雷山县", + "shortName": null, + "level": 3, + "code": "522634", + "pinyin": "LeiShanXian", + "pinyinFirst": "LSX", + "capital": "丹江镇", + "population": 16, + "area": 1219, + "areaCode": "0855", + "zipCode": "557100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817300, + "parentId": 653116711817285, + "name": "麻江县", + "shortName": null, + "level": 3, + "code": "522635", + "pinyin": "MaJiangXian", + "pinyinFirst": "MJX", + "capital": "杏山街道", + "population": 17, + "area": 958, + "areaCode": "0855", + "zipCode": "557600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116711817301, + "parentId": 653116711817285, + "name": "丹寨县", + "shortName": null, + "level": 3, + "code": "522636", + "pinyin": "DanZhaiXian", + "pinyinFirst": "DZX", + "capital": "龙泉镇", + "population": 18, + "area": 938, + "areaCode": "0855", + "zipCode": "557500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116712058949, + "parentId": 653116709695557, + "name": "黔南布依族苗族自治州", + "shortName": null, + "level": 2, + "code": "522700", + "pinyin": "QianNanBuYiZuMiaoZuZiZhiZhou", + "pinyinFirst": "QNBYZMZZZZ", + "capital": "都匀市", + "population": 427, + "area": 26195, + "areaCode": "0854", + "zipCode": "558000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116712058950, + "parentId": 653116712058949, + "name": "都匀市", + "shortName": null, + "level": 3, + "code": "522701", + "pinyin": "DuYunShi", + "pinyinFirst": "DYS", + "capital": "广惠街道", + "population": 51, + "area": 2278, + "areaCode": "0854", + "zipCode": "558000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116712058951, + "parentId": 653116712058949, + "name": "福泉市", + "shortName": null, + "level": 3, + "code": "522702", + "pinyin": "FuQuanShi", + "pinyinFirst": "FQS", + "capital": "金山街道", + "population": 34, + "area": 1691, + "areaCode": "0854", + "zipCode": "550500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116712058952, + "parentId": 653116712058949, + "name": "荔波县", + "shortName": null, + "level": 3, + "code": "522722", + "pinyin": "LiBoXian", + "pinyinFirst": "LBX", + "capital": "玉屏街道", + "population": 18, + "area": 2432, + "areaCode": "0854", + "zipCode": "558400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116712058953, + "parentId": 653116712058949, + "name": "贵定县", + "shortName": null, + "level": 3, + "code": "522723", + "pinyin": "GuiDingXian", + "pinyinFirst": "GDX", + "capital": "金南街道", + "population": 30, + "area": 1631, + "areaCode": "0854", + "zipCode": "551300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116712058954, + "parentId": 653116712058949, + "name": "瓮安县", + "shortName": null, + "level": 3, + "code": "522725", + "pinyin": "WengAnXian", + "pinyinFirst": "WAX", + "capital": "雍阳街道", + "population": 50, + "area": 1974, + "areaCode": "0854", + "zipCode": "550400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116712058955, + "parentId": 653116712058949, + "name": "独山县", + "shortName": null, + "level": 3, + "code": "522726", + "pinyin": "DuShanXian", + "pinyinFirst": "DSX", + "capital": "井城街道", + "population": 36, + "area": 2442, + "areaCode": "0854", + "zipCode": "558200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116712058956, + "parentId": 653116712058949, + "name": "平塘县", + "shortName": null, + "level": 3, + "code": "522727", + "pinyin": "PingTangXian", + "pinyinFirst": "PTX", + "capital": "金盆街道", + "population": 34, + "area": 2816, + "areaCode": "0854", + "zipCode": "558300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116712058957, + "parentId": 653116712058949, + "name": "罗甸县", + "shortName": null, + "level": 3, + "code": "522728", + "pinyin": "LuoDianXian", + "pinyinFirst": "LDX", + "capital": "斛兴街道", + "population": 37, + "area": 3010, + "areaCode": "0854", + "zipCode": "550100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116712058958, + "parentId": 653116712058949, + "name": "长顺县", + "shortName": null, + "level": 3, + "code": "522729", + "pinyin": "ChangShunXian", + "pinyinFirst": "CSX", + "capital": "长寨街道", + "population": 27, + "area": 1555, + "areaCode": "0854", + "zipCode": "550700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116712058959, + "parentId": 653116712058949, + "name": "龙里县", + "shortName": null, + "level": 3, + "code": "522730", + "pinyin": "LongLiXian", + "pinyinFirst": "LLX", + "capital": "冠山街道", + "population": 24, + "area": 1518, + "areaCode": "0854", + "zipCode": "551200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116712058960, + "parentId": 653116712058949, + "name": "惠水县", + "shortName": null, + "level": 3, + "code": "522731", + "pinyin": "HuiShuiXian", + "pinyinFirst": "HSX", + "capital": "涟江街道", + "population": 48, + "area": 2464, + "areaCode": "0854", + "zipCode": "550600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116712058961, + "parentId": 653116712058949, + "name": "三都水族自治县", + "shortName": null, + "level": 3, + "code": "522732", + "pinyin": "SanDuShuiZuZiZhiXian", + "pinyinFirst": "SDSZZZX", + "capital": "三合街道", + "population": 38, + "area": 2384, + "areaCode": "0854", + "zipCode": "558100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:43", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:17" + }, + { + "id": 653116712271941, + "parentId": 0, + "name": "云南省", + "shortName": "滇、云", + "level": 1, + "code": "530000", + "pinyin": "YunNanSheng", + "pinyinFirst": "YNS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116713832517, + "parentId": 653116712271941, + "name": "昆明市", + "shortName": null, + "level": 2, + "code": "530100", + "pinyin": "KunMingShi", + "pinyinFirst": "KMS", + "capital": "呈贡区", + "population": 576, + "area": 21000, + "areaCode": "0871", + "zipCode": "650000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116713832518, + "parentId": 653116713832517, + "name": "呈贡区", + "shortName": null, + "level": 3, + "code": "530114", + "pinyin": "ChengGongQu", + "pinyinFirst": "CGQ", + "capital": "龙城街道", + "population": 23, + "area": 510, + "areaCode": "0871", + "zipCode": "650500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713832519, + "parentId": 653116713832517, + "name": "五华区", + "shortName": null, + "level": 3, + "code": "530102", + "pinyin": "WuHuaQu", + "pinyinFirst": "WHQ", + "capital": "华山街道", + "population": 67, + "area": 391, + "areaCode": "0871", + "zipCode": "650032", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713832520, + "parentId": 653116713832517, + "name": "盘龙区", + "shortName": null, + "level": 3, + "code": "530103", + "pinyin": "PanLongQu", + "pinyinFirst": "PLQ", + "capital": "拓东街道", + "population": 59, + "area": 869, + "areaCode": "0871", + "zipCode": "650051", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713832521, + "parentId": 653116713832517, + "name": "官渡区", + "shortName": null, + "level": 3, + "code": "530111", + "pinyin": "GuanDuQu", + "pinyinFirst": "GDQ", + "capital": "关上街道", + "population": 60, + "area": 614, + "areaCode": "0871", + "zipCode": "650200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713832522, + "parentId": 653116713832517, + "name": "西山区", + "shortName": null, + "level": 3, + "code": "530112", + "pinyin": "XiShanQu", + "pinyinFirst": "XSQ", + "capital": "西苑街道", + "population": 57, + "area": 881, + "areaCode": "0871", + "zipCode": "650100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713832523, + "parentId": 653116713832517, + "name": "东川区", + "shortName": null, + "level": 3, + "code": "530113", + "pinyin": "DongChuanQu", + "pinyinFirst": "DCQ", + "capital": "铜都街道", + "population": 32, + "area": 1897, + "areaCode": "0871", + "zipCode": "654100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713832524, + "parentId": 653116713832517, + "name": "晋宁区", + "shortName": null, + "level": 3, + "code": "530115", + "pinyin": "JinNingQu", + "pinyinFirst": "JNQ", + "capital": "昆阳街道", + "population": 29, + "area": 1337, + "areaCode": "0871", + "zipCode": "650600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713832525, + "parentId": 653116713832517, + "name": "安宁市", + "shortName": null, + "level": 3, + "code": "530181", + "pinyin": "AnNingShi", + "pinyinFirst": "ANS", + "capital": "连然街道", + "population": 28, + "area": 1302, + "areaCode": "0871", + "zipCode": "650300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713832526, + "parentId": 653116713832517, + "name": "富民县", + "shortName": null, + "level": 3, + "code": "530124", + "pinyin": "FuMinXian", + "pinyinFirst": "FMX", + "capital": "永定街道", + "population": 15, + "area": 994, + "areaCode": "0871", + "zipCode": "650400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713832527, + "parentId": 653116713832517, + "name": "宜良县", + "shortName": null, + "level": 3, + "code": "530125", + "pinyin": "YiLiangXian", + "pinyinFirst": "YLX", + "capital": "匡远街道", + "population": 44, + "area": 1914, + "areaCode": "0871", + "zipCode": "652100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713832528, + "parentId": 653116713832517, + "name": "嵩明县", + "shortName": null, + "level": 3, + "code": "530127", + "pinyin": "SongMingXian", + "pinyinFirst": "SMX", + "capital": "嵩阳街道", + "population": 31, + "area": 832, + "areaCode": "0871", + "zipCode": "651700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713832529, + "parentId": 653116713832517, + "name": "石林彝族自治县", + "shortName": null, + "level": 3, + "code": "530126", + "pinyin": "ShiLinYiZuZiZhiXian", + "pinyinFirst": "SLYZZZX", + "capital": "鹿阜街道", + "population": 25, + "area": 1719, + "areaCode": "0871", + "zipCode": "652200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713832530, + "parentId": 653116713832517, + "name": "禄劝彝族苗族自治县", + "shortName": null, + "level": 3, + "code": "530128", + "pinyin": "LuQuanYiZuMiaoZuZiZhiXian", + "pinyinFirst": "LQYZMZZZX", + "capital": "屏山街道", + "population": 49, + "area": 4234, + "areaCode": "0871", + "zipCode": "651500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713832531, + "parentId": 653116713832517, + "name": "寻甸回族彝族自治县", + "shortName": null, + "level": 3, + "code": "530129", + "pinyin": "XunDianHuiZuYiZuZiZhiXian", + "pinyinFirst": "XDHZYZZZX", + "capital": "仁德街道", + "population": 57, + "area": 3588, + "areaCode": "0871", + "zipCode": "655200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713914437, + "parentId": 653116712271941, + "name": "曲靖市", + "shortName": null, + "level": 2, + "code": "530300", + "pinyin": "QuJingShi", + "pinyinFirst": "QJS", + "capital": "麒麟区", + "population": 667, + "area": 29000, + "areaCode": "0874", + "zipCode": "655000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116713918533, + "parentId": 653116713914437, + "name": "麒麟区", + "shortName": null, + "level": 3, + "code": "530302", + "pinyin": "QiLinQu", + "pinyinFirst": "QLQ", + "capital": "南宁街道", + "population": 77, + "area": 1553, + "areaCode": "0874", + "zipCode": "655000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713918534, + "parentId": 653116713914437, + "name": "沾益区", + "shortName": null, + "level": 3, + "code": "530303", + "pinyin": "ZhanYiQu", + "pinyinFirst": "ZYQ", + "capital": "西平街道", + "population": 44, + "area": 2815, + "areaCode": "0874", + "zipCode": "655500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713918535, + "parentId": 653116713914437, + "name": "马龙区", + "shortName": null, + "level": 3, + "code": "530304", + "pinyin": "MaLongQu", + "pinyinFirst": "MLQ", + "capital": "通泉街道", + "population": 21, + "area": 1614, + "areaCode": "0874", + "zipCode": "655100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713918536, + "parentId": 653116713914437, + "name": "宣威市", + "shortName": null, + "level": 3, + "code": "530381", + "pinyin": "XuanWeiShi", + "pinyinFirst": "XWS", + "capital": "宛水街道", + "population": 155, + "area": 6146, + "areaCode": "0874", + "zipCode": "655400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713918537, + "parentId": 653116713914437, + "name": "陆良县", + "shortName": null, + "level": 3, + "code": "530322", + "pinyin": "LuLiangXian", + "pinyinFirst": "LLX", + "capital": "中枢街道", + "population": 70, + "area": 1989, + "areaCode": "0874", + "zipCode": "655600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713918538, + "parentId": 653116713914437, + "name": "师宗县", + "shortName": null, + "level": 3, + "code": "530323", + "pinyin": "ShiZongXian", + "pinyinFirst": "SZX", + "capital": "丹凤街道", + "population": 44, + "area": 2783, + "areaCode": "0874", + "zipCode": "655700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713918539, + "parentId": 653116713914437, + "name": "罗平县", + "shortName": null, + "level": 3, + "code": "530324", + "pinyin": "LuoPingXian", + "pinyinFirst": "LPX", + "capital": "罗雄街道", + "population": 66, + "area": 3015, + "areaCode": "0874", + "zipCode": "655800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713918540, + "parentId": 653116713914437, + "name": "富源县", + "shortName": null, + "level": 3, + "code": "530325", + "pinyin": "FuYuanXian", + "pinyinFirst": "FYX", + "capital": "中安街道", + "population": 84, + "area": 3251, + "areaCode": "0874", + "zipCode": "655500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116713918541, + "parentId": 653116713914437, + "name": "会泽县", + "shortName": null, + "level": 3, + "code": "530326", + "pinyin": "HuiZeXian", + "pinyinFirst": "HZX", + "capital": "古城街道", + "population": 107, + "area": 5884, + "areaCode": "0874", + "zipCode": "654200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714057797, + "parentId": 653116712271941, + "name": "玉溪市", + "shortName": null, + "level": 2, + "code": "530400", + "pinyin": "YuXiShi", + "pinyinFirst": "YXS", + "capital": "红塔区", + "population": 224, + "area": 15300, + "areaCode": "0877", + "zipCode": "653100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116714057798, + "parentId": 653116714057797, + "name": "红塔区", + "shortName": null, + "level": 3, + "code": "530402", + "pinyin": "HongTaQu", + "pinyinFirst": "HTQ", + "capital": "玉兴街道", + "population": 46, + "area": 1004, + "areaCode": "0877", + "zipCode": "653100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714057799, + "parentId": 653116714057797, + "name": "江川区", + "shortName": null, + "level": 3, + "code": "530403", + "pinyin": "JiangChuanQu", + "pinyinFirst": "JCQ", + "capital": "大街街道", + "population": 29, + "area": 850, + "areaCode": "0877", + "zipCode": "652600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714057800, + "parentId": 653116714057797, + "name": "澄江市", + "shortName": null, + "level": 3, + "code": "530481", + "pinyin": "ChengJiangShi", + "pinyinFirst": "CJS", + "capital": "凤麓街道", + "population": 17, + "area": 773, + "areaCode": "0877", + "zipCode": "652500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714057801, + "parentId": 653116714057797, + "name": "通海县", + "shortName": null, + "level": 3, + "code": "530423", + "pinyin": "TongHaiXian", + "pinyinFirst": "THX", + "capital": "秀山街道", + "population": 29, + "area": 721, + "areaCode": "0877", + "zipCode": "652700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714057802, + "parentId": 653116714057797, + "name": "华宁县", + "shortName": null, + "level": 3, + "code": "530424", + "pinyin": "HuaNingXian", + "pinyinFirst": "HNX", + "capital": "宁州街道", + "population": 21, + "area": 1313, + "areaCode": "0877", + "zipCode": "652800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714057803, + "parentId": 653116714057797, + "name": "易门县", + "shortName": null, + "level": 3, + "code": "530425", + "pinyin": "YiMenXian", + "pinyinFirst": "YMX", + "capital": "龙泉街道", + "population": 17, + "area": 1571, + "areaCode": "0877", + "zipCode": "651100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714057804, + "parentId": 653116714057797, + "name": "峨山彝族自治县", + "shortName": null, + "level": 3, + "code": "530426", + "pinyin": "EShanYiZuZiZhiXian", + "pinyinFirst": "ESYZZZX", + "capital": "双江街道", + "population": 16, + "area": 1972, + "areaCode": "0877", + "zipCode": "653200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714057805, + "parentId": 653116714057797, + "name": "新平彝族傣族自治县", + "shortName": null, + "level": 3, + "code": "530427", + "pinyin": "XinPingYiZuDaiZuZiZhiXian", + "pinyinFirst": "XPYZDZZZX", + "capital": "桂山街道", + "population": 28, + "area": 4223, + "areaCode": "0877", + "zipCode": "653400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714057806, + "parentId": 653116714057797, + "name": "元江哈尼族彝族傣族自治县", + "shortName": null, + "level": 3, + "code": "530428", + "pinyin": "YuanJiangHaNiZuYiZuDaiZuZiZhiXian", + "pinyinFirst": "YJHNZYZDZZZX", + "capital": "红河街道", + "population": 21, + "area": 2858, + "areaCode": "0877", + "zipCode": "653300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714176581, + "parentId": 653116712271941, + "name": "保山市", + "shortName": null, + "level": 2, + "code": "530500", + "pinyin": "BaoShanShi", + "pinyinFirst": "BSS", + "capital": "隆阳区", + "population": 264, + "area": 19637, + "areaCode": "0875", + "zipCode": "678000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116714180677, + "parentId": 653116714176581, + "name": "隆阳区", + "shortName": null, + "level": 3, + "code": "530502", + "pinyin": "LongYangQu", + "pinyinFirst": "LYQ", + "capital": "兰城街道", + "population": 94, + "area": 5011, + "areaCode": "0875", + "zipCode": "678000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714180678, + "parentId": 653116714176581, + "name": "腾冲市", + "shortName": null, + "level": 3, + "code": "530581", + "pinyin": "TengChongShi", + "pinyinFirst": "TCS", + "capital": "腾越镇", + "population": 69, + "area": 5845, + "areaCode": "0875", + "zipCode": "679100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714180679, + "parentId": 653116714176581, + "name": "施甸县", + "shortName": null, + "level": 3, + "code": "530521", + "pinyin": "ShiDianXian", + "pinyinFirst": "SDX", + "capital": "甸阳镇", + "population": 35, + "area": 2009, + "areaCode": "0875", + "zipCode": "678200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714180680, + "parentId": 653116714176581, + "name": "龙陵县", + "shortName": null, + "level": 3, + "code": "530523", + "pinyin": "LongLingXian", + "pinyinFirst": "LLX", + "capital": "龙山镇", + "population": 31, + "area": 2884, + "areaCode": "0875", + "zipCode": "678300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714180681, + "parentId": 653116714176581, + "name": "昌宁县", + "shortName": null, + "level": 3, + "code": "530524", + "pinyin": "ChangNingXian", + "pinyinFirst": "CNX", + "capital": "田园镇", + "population": 36, + "area": 3888, + "areaCode": "0875", + "zipCode": "678100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714299461, + "parentId": 653116712271941, + "name": "昭通市", + "shortName": null, + "level": 2, + "code": "530600", + "pinyin": "ZhaoTongShi", + "pinyinFirst": "ZTS", + "capital": "昭阳区", + "population": 629, + "area": 23000, + "areaCode": "0870", + "zipCode": "657000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116714303557, + "parentId": 653116714299461, + "name": "昭阳区", + "shortName": null, + "level": 3, + "code": "530602", + "pinyin": "ZhaoYangQu", + "pinyinFirst": "ZYQ", + "capital": "凤凰街道", + "population": 96, + "area": 2167, + "areaCode": "0870", + "zipCode": "657000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714303558, + "parentId": 653116714299461, + "name": "水富市", + "shortName": null, + "level": 3, + "code": "530681", + "pinyin": "ShuiFuShi", + "pinyinFirst": "SFS", + "capital": "云富街道", + "population": 11, + "area": 440, + "areaCode": "0870", + "zipCode": "657800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714303559, + "parentId": 653116714299461, + "name": "鲁甸县", + "shortName": null, + "level": 3, + "code": "530621", + "pinyin": "LuDianXian", + "pinyinFirst": "LDX", + "capital": "文屏镇", + "population": 48, + "area": 1508, + "areaCode": "0870", + "zipCode": "657100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714303560, + "parentId": 653116714299461, + "name": "巧家县", + "shortName": null, + "level": 3, + "code": "530622", + "pinyin": "QiaoJiaXian", + "pinyinFirst": "QJX", + "capital": "白鹤滩镇", + "population": 63, + "area": 3245, + "areaCode": "0870", + "zipCode": "654600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714303561, + "parentId": 653116714299461, + "name": "盐津县", + "shortName": null, + "level": 3, + "code": "530623", + "pinyin": "YanJinXian", + "pinyinFirst": "YJX", + "capital": "盐井镇", + "population": 40, + "area": 2092, + "areaCode": "0870", + "zipCode": "657500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714303562, + "parentId": 653116714299461, + "name": "大关县", + "shortName": null, + "level": 3, + "code": "530624", + "pinyin": "DaGuanXian", + "pinyinFirst": "DGX", + "capital": "翠华镇", + "population": 29, + "area": 1721, + "areaCode": "0870", + "zipCode": "657400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714303563, + "parentId": 653116714299461, + "name": "永善县", + "shortName": null, + "level": 3, + "code": "530625", + "pinyin": "YongShanXian", + "pinyinFirst": "YSX", + "capital": "溪落渡镇", + "population": 48, + "area": 2778, + "areaCode": "0870", + "zipCode": "657300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714303564, + "parentId": 653116714299461, + "name": "绥江县", + "shortName": null, + "level": 3, + "code": "530626", + "pinyin": "SuiJiangXian", + "pinyinFirst": "SJX", + "capital": "中城镇", + "population": 17, + "area": 749, + "areaCode": "0870", + "zipCode": "657700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714303565, + "parentId": 653116714299461, + "name": "镇雄县", + "shortName": null, + "level": 3, + "code": "530627", + "pinyin": "ZhenXiongXian", + "pinyinFirst": "ZXX", + "capital": "乌峰街道", + "population": 169, + "area": 3696, + "areaCode": "0870", + "zipCode": "657200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714303566, + "parentId": 653116714299461, + "name": "彝良县", + "shortName": null, + "level": 3, + "code": "530628", + "pinyin": "YiLiangXian", + "pinyinFirst": "YLX", + "capital": "角奎镇", + "population": 63, + "area": 2804, + "areaCode": "0870", + "zipCode": "657600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714303567, + "parentId": 653116714299461, + "name": "威信县", + "shortName": null, + "level": 3, + "code": "530629", + "pinyin": "WeiXinXian", + "pinyinFirst": "WXX", + "capital": "扎西镇", + "population": 45, + "area": 1398, + "areaCode": "0870", + "zipCode": "657900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714442821, + "parentId": 653116712271941, + "name": "丽江市", + "shortName": null, + "level": 2, + "code": "530700", + "pinyin": "LiJiangShi", + "pinyinFirst": "LJS", + "capital": "古城区", + "population": 123, + "area": 20600, + "areaCode": "0888", + "zipCode": "674100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116714446917, + "parentId": 653116714442821, + "name": "古城区", + "shortName": null, + "level": 3, + "code": "530702", + "pinyin": "GuChengQu", + "pinyinFirst": "GCQ", + "capital": "西安街道", + "population": 16, + "area": 1268, + "areaCode": "0888", + "zipCode": "674199", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714446918, + "parentId": 653116714442821, + "name": "永胜县", + "shortName": null, + "level": 3, + "code": "530722", + "pinyin": "YongShengXian", + "pinyinFirst": "YSX", + "capital": "永北镇", + "population": 41, + "area": 4950, + "areaCode": "0888", + "zipCode": "674200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714446919, + "parentId": 653116714442821, + "name": "华坪县", + "shortName": null, + "level": 3, + "code": "530723", + "pinyin": "HuaPingXian", + "pinyinFirst": "HPX", + "capital": "中心镇", + "population": 16, + "area": 2200, + "areaCode": "0888", + "zipCode": "674800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714446920, + "parentId": 653116714442821, + "name": "玉龙纳西族自治县", + "shortName": null, + "level": 3, + "code": "530721", + "pinyin": "YuLongNaXiZuZiZhiXian", + "pinyinFirst": "YLNXZZZX", + "capital": "黄山镇", + "population": 23, + "area": 6200, + "areaCode": "0888", + "zipCode": "674100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714446921, + "parentId": 653116714442821, + "name": "宁蒗彝族自治县", + "shortName": null, + "level": 3, + "code": "530724", + "pinyin": "NingLangYiZuZiZhiXian", + "pinyinFirst": "NLYZZZX", + "capital": "大兴镇", + "population": 28, + "area": 6062, + "areaCode": "0888", + "zipCode": "674300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714606661, + "parentId": 653116712271941, + "name": "普洱市", + "shortName": null, + "level": 2, + "code": "530800", + "pinyin": "PuErShi", + "pinyinFirst": "PES", + "capital": "思茅区", + "population": 254, + "area": 45100, + "areaCode": "0879", + "zipCode": "665000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116714606662, + "parentId": 653116714606661, + "name": "思茅区", + "shortName": null, + "level": 3, + "code": "530802", + "pinyin": "SiMaoQu", + "pinyinFirst": "SMQ", + "capital": "思茅街道", + "population": 24, + "area": 4093, + "areaCode": "0879", + "zipCode": "665099", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714606663, + "parentId": 653116714606661, + "name": "宁洱哈尼族彝族自治县", + "shortName": null, + "level": 3, + "code": "530821", + "pinyin": "NingErHaNiZuYiZuZiZhiXian", + "pinyinFirst": "NEHNZYZZZX", + "capital": "宁洱镇", + "population": 19, + "area": 3670, + "areaCode": "0879", + "zipCode": "665100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714606664, + "parentId": 653116714606661, + "name": "墨江哈尼族自治县", + "shortName": null, + "level": 3, + "code": "530822", + "pinyin": "MoJiangHaNiZuZiZhiXian", + "pinyinFirst": "MJHNZZZX", + "capital": "联珠镇", + "population": 37, + "area": 5312, + "areaCode": "0879", + "zipCode": "654800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714606665, + "parentId": 653116714606661, + "name": "景东彝族自治县", + "shortName": null, + "level": 3, + "code": "530823", + "pinyin": "JingDongYiZuZiZhiXian", + "pinyinFirst": "JDYZZZX", + "capital": "锦屏镇", + "population": 36, + "area": 4532, + "areaCode": "0879", + "zipCode": "676200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714606666, + "parentId": 653116714606661, + "name": "景谷傣族彝族自治县", + "shortName": null, + "level": 3, + "code": "530824", + "pinyin": "JingGuDaiZuYiZuZiZhiXian", + "pinyinFirst": "JGDZYZZZX", + "capital": "威远镇", + "population": 32, + "area": 7777, + "areaCode": "0879", + "zipCode": "666400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714606667, + "parentId": 653116714606661, + "name": "镇沅彝族哈尼族拉祜族自治县", + "shortName": null, + "level": 3, + "code": "530825", + "pinyin": "ZhenYuanYiZuHaNiZuLaHuZuZiZhiXian", + "pinyinFirst": "ZYYZHNZLHZZZX", + "capital": "恩乐镇", + "population": 21, + "area": 4148, + "areaCode": "0879", + "zipCode": "666500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714606668, + "parentId": 653116714606661, + "name": "江城哈尼族彝族自治县", + "shortName": null, + "level": 3, + "code": "530826", + "pinyin": "JiangChengHaNiZuYiZuZiZhiXian", + "pinyinFirst": "JCHNZYZZZX", + "capital": "勐烈镇", + "population": 12, + "area": 3429, + "areaCode": "0879", + "zipCode": "665900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714606669, + "parentId": 653116714606661, + "name": "孟连傣族拉祜族佤族自治县", + "shortName": null, + "level": 3, + "code": "530827", + "pinyin": "MengLianDaiZuLaHuZuWaZuZiZhiXian", + "pinyinFirst": "MLDZLHZWZZZX", + "capital": "娜允镇", + "population": 13, + "area": 1936, + "areaCode": "0879", + "zipCode": "665800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714606670, + "parentId": 653116714606661, + "name": "澜沧拉祜族自治县", + "shortName": null, + "level": 3, + "code": "530828", + "pinyin": "LanCangLaHuZuZiZhiXian", + "pinyinFirst": "LCLHZZZX", + "capital": "勐朗镇", + "population": 49, + "area": 8807, + "areaCode": "0879", + "zipCode": "665600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714606671, + "parentId": 653116714606661, + "name": "西盟佤族自治县", + "shortName": null, + "level": 3, + "code": "530829", + "pinyin": "XiMengWaZuZiZhiXian", + "pinyinFirst": "XMWZZZX", + "capital": "勐梭镇", + "population": 9, + "area": 1391, + "areaCode": "0879", + "zipCode": "665700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714778693, + "parentId": 653116712271941, + "name": "临沧市", + "shortName": null, + "level": 2, + "code": "530900", + "pinyin": "LinCangShi", + "pinyinFirst": "LCS", + "capital": "临翔区", + "population": 241, + "area": 24500, + "areaCode": "0883", + "zipCode": "677000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116714778694, + "parentId": 653116714778693, + "name": "临翔区", + "shortName": null, + "level": 3, + "code": "530902", + "pinyin": "LinXiangQu", + "pinyinFirst": "LXQ", + "capital": "凤翔街道", + "population": 33, + "area": 2652, + "areaCode": "0883", + "zipCode": "677000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714778695, + "parentId": 653116714778693, + "name": "凤庆县", + "shortName": null, + "level": 3, + "code": "530921", + "pinyin": "FengQingXian", + "pinyinFirst": "FQX", + "capital": "凤山镇", + "population": 44, + "area": 3451, + "areaCode": "0883", + "zipCode": "675900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714778696, + "parentId": 653116714778693, + "name": "云县", + "shortName": null, + "level": 3, + "code": "530922", + "pinyin": "YunXian", + "pinyinFirst": "YX", + "capital": "爱华镇", + "population": 44, + "area": 3760, + "areaCode": "0883", + "zipCode": "675800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714778697, + "parentId": 653116714778693, + "name": "永德县", + "shortName": null, + "level": 3, + "code": "530923", + "pinyin": "YongDeXian", + "pinyinFirst": "YDX", + "capital": "德党镇", + "population": 36, + "area": 3220, + "areaCode": "0883", + "zipCode": "677600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714778698, + "parentId": 653116714778693, + "name": "镇康县", + "shortName": null, + "level": 3, + "code": "530924", + "pinyin": "ZhenKangXian", + "pinyinFirst": "ZKX", + "capital": "南伞镇", + "population": 19, + "area": 2529, + "areaCode": "0883", + "zipCode": "677700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714778699, + "parentId": 653116714778693, + "name": "双江拉祜族佤族布朗族傣族自治县", + "shortName": null, + "level": 3, + "code": "530925", + "pinyin": "ShuangJiangLaHuZuWaZuBuLangZuDaiZuZiZhiXian", + "pinyinFirst": "SJLHZWZBLZDZZZX", + "capital": "勐勐镇", + "population": 18, + "area": 2157, + "areaCode": "0883", + "zipCode": "677300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714778700, + "parentId": 653116714778693, + "name": "耿马傣族佤族自治县", + "shortName": null, + "level": 3, + "code": "530926", + "pinyin": "GengMaDaiZuWaZuZiZhiXian", + "pinyinFirst": "GMDZWZZZX", + "capital": "耿马镇", + "population": 30, + "area": 3278, + "areaCode": "0883", + "zipCode": "677500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714778701, + "parentId": 653116714778693, + "name": "沧源佤族自治县", + "shortName": null, + "level": 3, + "code": "530927", + "pinyin": "CangYuanWaZuZiZhiXian", + "pinyinFirst": "CYWZZZX", + "capital": "勐董镇", + "population": 17, + "area": 2446, + "areaCode": "0883", + "zipCode": "677400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714950725, + "parentId": 653116712271941, + "name": "楚雄彝族自治州", + "shortName": null, + "level": 2, + "code": "532300", + "pinyin": "ChuXiongYiZuZiZhiZhou", + "pinyinFirst": "CXYZZZZ", + "capital": "楚雄市", + "population": 266, + "area": 29300, + "areaCode": "0878", + "zipCode": "675000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116714954821, + "parentId": 653116714950725, + "name": "楚雄市", + "shortName": null, + "level": 3, + "code": "532301", + "pinyin": "ChuXiongShi", + "pinyinFirst": "CXS", + "capital": "鹿城镇", + "population": 54, + "area": 4433, + "areaCode": "0878", + "zipCode": "675000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714954822, + "parentId": 653116714950725, + "name": "禄丰市", + "shortName": null, + "level": 3, + "code": "532302", + "pinyin": "LuFengShi", + "pinyinFirst": "LFS", + "capital": "金山镇", + "population": 42, + "area": 3631, + "areaCode": "0878", + "zipCode": "651200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714954823, + "parentId": 653116714950725, + "name": "双柏县", + "shortName": null, + "level": 3, + "code": "532322", + "pinyin": "ShuangBaiXian", + "pinyinFirst": "SBX", + "capital": "妥甸镇", + "population": 15, + "area": 4045, + "areaCode": "0878", + "zipCode": "675100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714954824, + "parentId": 653116714950725, + "name": "牟定县", + "shortName": null, + "level": 3, + "code": "532323", + "pinyin": "MouDingXian", + "pinyinFirst": "MDX", + "capital": "共和镇", + "population": 20, + "area": 1464, + "areaCode": "0878", + "zipCode": "675500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714954825, + "parentId": 653116714950725, + "name": "南华县", + "shortName": null, + "level": 3, + "code": "532324", + "pinyin": "NanHuaXian", + "pinyinFirst": "NHX", + "capital": "龙川镇", + "population": 24, + "area": 2343, + "areaCode": "0878", + "zipCode": "675200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714954826, + "parentId": 653116714950725, + "name": "姚安县", + "shortName": null, + "level": 3, + "code": "532325", + "pinyin": "YaoAnXian", + "pinyinFirst": "YAX", + "capital": "栋川镇", + "population": 21, + "area": 1803, + "areaCode": "0878", + "zipCode": "675300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714954827, + "parentId": 653116714950725, + "name": "大姚县", + "shortName": null, + "level": 3, + "code": "532326", + "pinyin": "DaYaoXian", + "pinyinFirst": "DYX", + "capital": "金碧镇", + "population": 28, + "area": 4146, + "areaCode": "0878", + "zipCode": "675400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714954828, + "parentId": 653116714950725, + "name": "永仁县", + "shortName": null, + "level": 3, + "code": "532327", + "pinyin": "YongRenXian", + "pinyinFirst": "YRX", + "capital": "永定镇", + "population": 11, + "area": 2150, + "areaCode": "0878", + "zipCode": "651400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714954829, + "parentId": 653116714950725, + "name": "元谋县", + "shortName": null, + "level": 3, + "code": "532328", + "pinyin": "YuanMouXian", + "pinyinFirst": "YMX", + "capital": "元马镇", + "population": 22, + "area": 2021, + "areaCode": "0878", + "zipCode": "651300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116714954830, + "parentId": 653116714950725, + "name": "武定县", + "shortName": null, + "level": 3, + "code": "532329", + "pinyin": "WuDingXian", + "pinyinFirst": "WDX", + "capital": "狮山镇", + "population": 28, + "area": 3322, + "areaCode": "0878", + "zipCode": "651600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715130949, + "parentId": 653116712271941, + "name": "红河哈尼族彝族自治州", + "shortName": null, + "level": 2, + "code": "532500", + "pinyin": "HongHeHaNiZuYiZuZiZhiZhou", + "pinyinFirst": "HHHNZYZZZZ", + "capital": "蒙自市", + "population": 468, + "area": 32500, + "areaCode": "0873", + "zipCode": "661400", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116715135045, + "parentId": 653116715130949, + "name": "蒙自市", + "shortName": null, + "level": 3, + "code": "532503", + "pinyin": "MengZiShi", + "pinyinFirst": "MZS", + "capital": "文澜街道", + "population": 43, + "area": 2228, + "areaCode": "0873", + "zipCode": "661100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715135046, + "parentId": 653116715130949, + "name": "个旧市", + "shortName": null, + "level": 3, + "code": "532501", + "pinyin": "GeJiuShi", + "pinyinFirst": "GJS", + "capital": "城区街道", + "population": 38, + "area": 1595, + "areaCode": "0873", + "zipCode": "661000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715135047, + "parentId": 653116715130949, + "name": "开远市", + "shortName": null, + "level": 3, + "code": "532502", + "pinyin": "KaiYuanShi", + "pinyinFirst": "KYS", + "capital": "乐白道街道", + "population": 29, + "area": 1940, + "areaCode": "0873", + "zipCode": "661600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715135048, + "parentId": 653116715130949, + "name": "弥勒市", + "shortName": null, + "level": 3, + "code": "532504", + "pinyin": "MiLeShi", + "pinyinFirst": "MLS", + "capital": "弥阳镇", + "population": 55, + "area": 4004, + "areaCode": "0873", + "zipCode": "652300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715135049, + "parentId": 653116715130949, + "name": "建水县", + "shortName": null, + "level": 3, + "code": "532524", + "pinyin": "JianShuiXian", + "pinyinFirst": "JSX", + "capital": "临安镇", + "population": 55, + "area": 3782, + "areaCode": "0873", + "zipCode": "654300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715135050, + "parentId": 653116715130949, + "name": "石屏县", + "shortName": null, + "level": 3, + "code": "532525", + "pinyin": "ShiPingXian", + "pinyinFirst": "SPX", + "capital": "异龙镇", + "population": 32, + "area": 3042, + "areaCode": "0873", + "zipCode": "662200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715135051, + "parentId": 653116715130949, + "name": "泸西县", + "shortName": null, + "level": 3, + "code": "532527", + "pinyin": "LuXiXian", + "pinyinFirst": "LXX", + "capital": "中枢镇", + "population": 45, + "area": 1674, + "areaCode": "0873", + "zipCode": "652400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715135052, + "parentId": 653116715130949, + "name": "元阳县", + "shortName": null, + "level": 3, + "code": "532528", + "pinyin": "YuanYangXian", + "pinyinFirst": "YYX", + "capital": "南沙镇", + "population": 46, + "area": 2260, + "areaCode": "0873", + "zipCode": "662400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715135053, + "parentId": 653116715130949, + "name": "红河县", + "shortName": null, + "level": 3, + "code": "532529", + "pinyin": "HongHeXian", + "pinyinFirst": "HHX", + "capital": "迤萨镇", + "population": 36, + "area": 2028, + "areaCode": "0873", + "zipCode": "654400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715135054, + "parentId": 653116715130949, + "name": "绿春县", + "shortName": null, + "level": 3, + "code": "532531", + "pinyin": "LvChunXian", + "pinyinFirst": "LCX", + "capital": "大兴镇", + "population": 25, + "area": 3097, + "areaCode": "0873", + "zipCode": "662500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715135055, + "parentId": 653116715130949, + "name": "屏边苗族自治县", + "shortName": null, + "level": 3, + "code": "532523", + "pinyin": "PingBianMiaoZuZiZhiXian", + "pinyinFirst": "PBMZZZX", + "capital": "玉屏镇", + "population": 16, + "area": 1906, + "areaCode": "0873", + "zipCode": "661200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715135056, + "parentId": 653116715130949, + "name": "金平苗族瑶族傣族自治县", + "shortName": null, + "level": 3, + "code": "532530", + "pinyin": "JinPingMiaoZuYaoZuDaiZuZiZhiXian", + "pinyinFirst": "JPMZYZDZZZX", + "capital": "金河镇", + "population": 40, + "area": 3602, + "areaCode": "0873", + "zipCode": "661500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715135057, + "parentId": 653116715130949, + "name": "河口瑶族自治县", + "shortName": null, + "level": 3, + "code": "532532", + "pinyin": "HeKouYaoZuZiZhiXian", + "pinyinFirst": "HKYZZZX", + "capital": "河口镇", + "population": 9, + "area": 1332, + "areaCode": "0873", + "zipCode": "661300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715335749, + "parentId": 653116712271941, + "name": "文山壮族苗族自治州", + "shortName": null, + "level": 2, + "code": "532600", + "pinyin": "WenShanZhuangZuMiaoZuZiZhiZhou", + "pinyinFirst": "WSZZMZZZZ", + "capital": "文山市", + "population": 398, + "area": 31500, + "areaCode": "0876", + "zipCode": "663000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116715339845, + "parentId": 653116715335749, + "name": "文山市", + "shortName": null, + "level": 3, + "code": "532601", + "pinyin": "WenShanShi", + "pinyinFirst": "WSS", + "capital": "卧龙街道", + "population": 53, + "area": 2928, + "areaCode": "0876", + "zipCode": "663000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715339846, + "parentId": 653116715335749, + "name": "砚山县", + "shortName": null, + "level": 3, + "code": "532622", + "pinyin": "YanShanXian", + "pinyinFirst": "YSX", + "capital": "江那镇", + "population": 54, + "area": 3822, + "areaCode": "0876", + "zipCode": "663100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715339847, + "parentId": 653116715335749, + "name": "西畴县", + "shortName": null, + "level": 3, + "code": "532623", + "pinyin": "XiChouXian", + "pinyinFirst": "XCX", + "capital": "西洒镇", + "population": 26, + "area": 1506, + "areaCode": "0876", + "zipCode": "663500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715339848, + "parentId": 653116715335749, + "name": "麻栗坡县", + "shortName": null, + "level": 3, + "code": "532624", + "pinyin": "MaLiPoXian", + "pinyinFirst": "MLPX", + "capital": "麻栗镇", + "population": 30, + "area": 2357, + "areaCode": "0876", + "zipCode": "663600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715339849, + "parentId": 653116715335749, + "name": "马关县", + "shortName": null, + "level": 3, + "code": "532625", + "pinyin": "MaGuanXian", + "pinyinFirst": "MGX", + "capital": "马白镇", + "population": 39, + "area": 2676, + "areaCode": "0876", + "zipCode": "663700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715339850, + "parentId": 653116715335749, + "name": "丘北县", + "shortName": null, + "level": 3, + "code": "532626", + "pinyin": "QiuBeiXian", + "pinyinFirst": "QBX", + "capital": "锦屏镇", + "population": 57, + "area": 5038, + "areaCode": "0876", + "zipCode": "663200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715339851, + "parentId": 653116715335749, + "name": "广南县", + "shortName": null, + "level": 3, + "code": "532627", + "pinyin": "GuangNanXian", + "pinyinFirst": "GNX", + "capital": "莲城镇", + "population": 92, + "area": 7810, + "areaCode": "0876", + "zipCode": "663300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715339852, + "parentId": 653116715335749, + "name": "富宁县", + "shortName": null, + "level": 3, + "code": "532628", + "pinyin": "FuNingXian", + "pinyinFirst": "FNX", + "capital": "新华镇", + "population": 46, + "area": 5352, + "areaCode": "0876", + "zipCode": "663400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715585605, + "parentId": 653116712271941, + "name": "西双版纳傣族自治州", + "shortName": null, + "level": 2, + "code": "532800", + "pinyin": "XiShuangBanNaDaiZuZiZhiZhou", + "pinyinFirst": "XSBNDZZZZ", + "capital": "景洪市", + "population": 101, + "area": 19100, + "areaCode": "0691", + "zipCode": "666100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116715585606, + "parentId": 653116715585605, + "name": "景洪市", + "shortName": null, + "level": 3, + "code": "532801", + "pinyin": "JingHongShi", + "pinyinFirst": "JHS", + "capital": "允景洪街道", + "population": 43, + "area": 6864, + "areaCode": "0691", + "zipCode": "666100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715585607, + "parentId": 653116715585605, + "name": "勐海县", + "shortName": null, + "level": 3, + "code": "532822", + "pinyin": "MengHaiXian", + "pinyinFirst": "MHX", + "capital": "勐海镇", + "population": 34, + "area": 5368, + "areaCode": "0691", + "zipCode": "666200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715585608, + "parentId": 653116715585605, + "name": "勐腊县", + "shortName": null, + "level": 3, + "code": "532823", + "pinyin": "MengLaXian", + "pinyinFirst": "MLX", + "capital": "勐腊镇", + "population": 25, + "area": 6861, + "areaCode": "0691", + "zipCode": "666300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715876421, + "parentId": 653116712271941, + "name": "大理白族自治州", + "shortName": null, + "level": 2, + "code": "532900", + "pinyin": "DaLiBaiZuZiZhiZhou", + "pinyinFirst": "DLBZZZZ", + "capital": "大理市", + "population": 365, + "area": 29500, + "areaCode": "0872", + "zipCode": "671000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116715880517, + "parentId": 653116715876421, + "name": "大理市", + "shortName": null, + "level": 3, + "code": "532901", + "pinyin": "DaLiShi", + "pinyinFirst": "DLS", + "capital": "下关街道", + "population": 65, + "area": 1784, + "areaCode": "0872", + "zipCode": "671000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715880518, + "parentId": 653116715876421, + "name": "祥云县", + "shortName": null, + "level": 3, + "code": "532923", + "pinyin": "XiangYunXian", + "pinyinFirst": "XYX", + "capital": "祥城镇", + "population": 48, + "area": 2425, + "areaCode": "0872", + "zipCode": "672100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715880519, + "parentId": 653116715876421, + "name": "宾川县", + "shortName": null, + "level": 3, + "code": "532924", + "pinyin": "BinChuanXian", + "pinyinFirst": "BCX", + "capital": "金牛镇", + "population": 37, + "area": 2563, + "areaCode": "0872", + "zipCode": "671600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715880520, + "parentId": 653116715876421, + "name": "弥渡县", + "shortName": null, + "level": 3, + "code": "532925", + "pinyin": "MiDuXian", + "pinyinFirst": "MDX", + "capital": "弥城镇", + "population": 33, + "area": 1534, + "areaCode": "0872", + "zipCode": "675600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715880521, + "parentId": 653116715876421, + "name": "永平县", + "shortName": null, + "level": 3, + "code": "532928", + "pinyin": "YongPingXian", + "pinyinFirst": "YPX", + "capital": "博南镇", + "population": 19, + "area": 2884, + "areaCode": "0872", + "zipCode": "672600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715880522, + "parentId": 653116715876421, + "name": "云龙县", + "shortName": null, + "level": 3, + "code": "532929", + "pinyin": "YunLongXian", + "pinyinFirst": "YLX", + "capital": "诺邓镇", + "population": 21, + "area": 4401, + "areaCode": "0872", + "zipCode": "672700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715880523, + "parentId": 653116715876421, + "name": "洱源县", + "shortName": null, + "level": 3, + "code": "532930", + "pinyin": "ErYuanXian", + "pinyinFirst": "EYX", + "capital": "茈碧湖镇", + "population": 30, + "area": 2614, + "areaCode": "0872", + "zipCode": "671200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715880524, + "parentId": 653116715876421, + "name": "剑川县", + "shortName": null, + "level": 3, + "code": "532931", + "pinyin": "JianChuanXian", + "pinyinFirst": "JCX", + "capital": "金华镇", + "population": 18, + "area": 2250, + "areaCode": "0872", + "zipCode": "671300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715880525, + "parentId": 653116715876421, + "name": "鹤庆县", + "shortName": null, + "level": 3, + "code": "532932", + "pinyin": "HeQingXian", + "pinyinFirst": "HQX", + "capital": "云鹤镇", + "population": 28, + "area": 2397, + "areaCode": "0872", + "zipCode": "671500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715880526, + "parentId": 653116715876421, + "name": "漾濞彝族自治县", + "shortName": null, + "level": 3, + "code": "532922", + "pinyin": "YangBiYiZuZiZhiXian", + "pinyinFirst": "YBYZZZX", + "capital": "苍山西镇", + "population": 11, + "area": 1860, + "areaCode": "0872", + "zipCode": "672500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715880527, + "parentId": 653116715876421, + "name": "南涧彝族自治县", + "shortName": null, + "level": 3, + "code": "532926", + "pinyin": "NanJianYiZuZiZhiXian", + "pinyinFirst": "NJYZZZX", + "capital": "南涧镇", + "population": 23, + "area": 1732, + "areaCode": "0872", + "zipCode": "675700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116715880528, + "parentId": 653116715876421, + "name": "巍山彝族回族自治县", + "shortName": null, + "level": 3, + "code": "532927", + "pinyin": "WeiShanYiZuHuiZuZiZhiXian", + "pinyinFirst": "WSYZHZZZX", + "capital": "南诏镇", + "population": 32, + "area": 2266, + "areaCode": "0872", + "zipCode": "672400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116716175429, + "parentId": 653116712271941, + "name": "德宏傣族景颇族自治州", + "shortName": null, + "level": 2, + "code": "533100", + "pinyin": "DeHongDaiZuJingPoZuZiZhiZhou", + "pinyinFirst": "DHDZJPZZZZ", + "capital": "芒市", + "population": 123, + "area": 11500, + "areaCode": "0692", + "zipCode": "678400", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116716179525, + "parentId": 653116716175429, + "name": "芒市", + "shortName": null, + "level": 3, + "code": "533103", + "pinyin": "MangShi", + "pinyinFirst": "MS", + "capital": "勐焕街道", + "population": 41, + "area": 2901, + "areaCode": "0692", + "zipCode": "678400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116716179526, + "parentId": 653116716175429, + "name": "瑞丽市", + "shortName": null, + "level": 3, + "code": "533102", + "pinyin": "RuiLiShi", + "pinyinFirst": "RLS", + "capital": "勐卯镇", + "population": 14, + "area": 945, + "areaCode": "0692", + "zipCode": "678600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116716179527, + "parentId": 653116716175429, + "name": "梁河县", + "shortName": null, + "level": 3, + "code": "533122", + "pinyin": "LiangHeXian", + "pinyinFirst": "LHX", + "capital": "遮岛镇", + "population": 17, + "area": 1159, + "areaCode": "0692", + "zipCode": "679200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116716179528, + "parentId": 653116716175429, + "name": "盈江县", + "shortName": null, + "level": 3, + "code": "533123", + "pinyin": "YingJiangXian", + "pinyinFirst": "YJX", + "capital": "平原镇", + "population": 31, + "area": 4429, + "areaCode": "0692", + "zipCode": "679300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116716179529, + "parentId": 653116716175429, + "name": "陇川县", + "shortName": null, + "level": 3, + "code": "533124", + "pinyin": "LongChuanXian", + "pinyinFirst": "LCX", + "capital": "章凤镇", + "population": 20, + "area": 1931, + "areaCode": "0692", + "zipCode": "678700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116716486725, + "parentId": 653116712271941, + "name": "怒江傈僳族自治州", + "shortName": null, + "level": 2, + "code": "533300", + "pinyin": "NuJiangLiSuZuZiZhiZhou", + "pinyinFirst": "NJLSZZZZ", + "capital": "泸水市", + "population": 56, + "area": 14700, + "areaCode": "0886", + "zipCode": "673100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116716486726, + "parentId": 653116716486725, + "name": "泸水市", + "shortName": null, + "level": 3, + "code": "533301", + "pinyin": "LuShuiShi", + "pinyinFirst": "LSS", + "capital": "六库镇", + "population": 19, + "area": 3088, + "areaCode": "0886", + "zipCode": "673299", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116716486727, + "parentId": 653116716486725, + "name": "福贡县", + "shortName": null, + "level": 3, + "code": "533323", + "pinyin": "FuGongXian", + "pinyinFirst": "FGX", + "capital": "上帕镇", + "population": 12, + "area": 2746, + "areaCode": "0886", + "zipCode": "673400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116716486728, + "parentId": 653116716486725, + "name": "贡山独龙族怒族自治县", + "shortName": null, + "level": 3, + "code": "533324", + "pinyin": "GongShanDuLongZuNuZuZiZhiXian", + "pinyinFirst": "GSDLZNZZZX", + "capital": "茨开镇", + "population": 3, + "area": 4379, + "areaCode": "0886", + "zipCode": "673500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116716486729, + "parentId": 653116716486725, + "name": "兰坪白族普米族自治县", + "shortName": null, + "level": 3, + "code": "533325", + "pinyin": "LanPingBaiZuPuMiZuZiZhiXian", + "pinyinFirst": "LPBZPMZZZX", + "capital": "金顶镇", + "population": 22, + "area": 4366, + "areaCode": "0886", + "zipCode": "671400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116716777541, + "parentId": 653116712271941, + "name": "迪庆藏族自治州", + "shortName": null, + "level": 2, + "code": "533400", + "pinyin": "DiQingZangZuZiZhiZhou", + "pinyinFirst": "DQZZZZZ", + "capital": "香格里拉市", + "population": 37, + "area": 23200, + "areaCode": "0887", + "zipCode": "674400", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116716781637, + "parentId": 653116716777541, + "name": "香格里拉市", + "shortName": null, + "level": 3, + "code": "533401", + "pinyin": "XiangGeLiLaShi", + "pinyinFirst": "XGLLS", + "capital": "建塘镇", + "population": 15, + "area": 11419, + "areaCode": "0887", + "zipCode": "674400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116716781638, + "parentId": 653116716777541, + "name": "德钦县", + "shortName": null, + "level": 3, + "code": "533422", + "pinyin": "DeQinXian", + "pinyinFirst": "DQX", + "capital": "升平镇", + "population": 6, + "area": 7291, + "areaCode": "0887", + "zipCode": "674500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116716781639, + "parentId": 653116716777541, + "name": "维西傈僳族自治县", + "shortName": null, + "level": 3, + "code": "533423", + "pinyin": "WeiXiLiSuZuZiZhiXian", + "pinyinFirst": "WXLSZZZX", + "capital": "保和镇", + "population": 16, + "area": 4477, + "areaCode": "0887", + "zipCode": "674600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:44", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116717166661, + "parentId": 0, + "name": "西藏自治区", + "shortName": "藏", + "level": 1, + "code": "540000", + "pinyin": "XiZangZiZhiQu", + "pinyinFirst": "XZZZQ", + "capital": null, + "population": null, + "area": null, + "areaCode": "", + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116718182469, + "parentId": 653116717166661, + "name": "拉萨市", + "shortName": null, + "level": 2, + "code": "540100", + "pinyin": "LaSaShi", + "pinyinFirst": "LSS", + "capital": "城关区", + "population": 56, + "area": 29640, + "areaCode": "0891", + "zipCode": "850000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116718182470, + "parentId": 653116718182469, + "name": "城关区", + "shortName": null, + "level": 3, + "code": "540102", + "pinyin": "ChengGuanQu", + "pinyinFirst": "CGQ", + "capital": "吉崩岗街道", + "population": 22, + "area": 520, + "areaCode": "0891", + "zipCode": "850000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718182471, + "parentId": 653116718182469, + "name": "堆龙德庆区", + "shortName": null, + "level": 3, + "code": "540103", + "pinyin": "DuiLongDeQingQu", + "pinyinFirst": "DLDQQ", + "capital": "东嘎街道", + "population": 6, + "area": 2670, + "areaCode": "0891", + "zipCode": "851400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718182472, + "parentId": 653116718182469, + "name": "达孜区", + "shortName": null, + "level": 3, + "code": "540104", + "pinyin": "DaZiQu", + "pinyinFirst": "DZQ", + "capital": "德庆镇", + "population": 3, + "area": 1360, + "areaCode": "0891", + "zipCode": "850100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718182473, + "parentId": 653116718182469, + "name": "林周县", + "shortName": null, + "level": 3, + "code": "540121", + "pinyin": "LinZhouXian", + "pinyinFirst": "LZX", + "capital": "甘丹曲果镇", + "population": 6, + "area": 4460, + "areaCode": "0891", + "zipCode": "851600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718182474, + "parentId": 653116718182469, + "name": "当雄县", + "shortName": null, + "level": 3, + "code": "540122", + "pinyin": "DangXiongXian", + "pinyinFirst": "DXX", + "capital": "当曲卡镇", + "population": 5, + "area": 10230, + "areaCode": "0891", + "zipCode": "851500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718182475, + "parentId": 653116718182469, + "name": "尼木县", + "shortName": null, + "level": 3, + "code": "540123", + "pinyin": "NiMuXian", + "pinyinFirst": "NMX", + "capital": "塔荣镇", + "population": 3, + "area": 3270, + "areaCode": "0891", + "zipCode": "851300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718182476, + "parentId": 653116718182469, + "name": "曲水县", + "shortName": null, + "level": 3, + "code": "540124", + "pinyin": "QuShuiXian", + "pinyinFirst": "QSX", + "capital": "曲水镇", + "population": 4, + "area": 1630, + "areaCode": "0891", + "zipCode": "850600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718182477, + "parentId": 653116718182469, + "name": "墨竹工卡县", + "shortName": null, + "level": 3, + "code": "540127", + "pinyin": "MoZhuGongKaXian", + "pinyinFirst": "MZGKX", + "capital": "工卡镇", + "population": 6, + "area": 5500, + "areaCode": "0891", + "zipCode": "850200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718256197, + "parentId": 653116717166661, + "name": "日喀则市", + "shortName": null, + "level": 2, + "code": "540200", + "pinyin": "RiKaZeShi", + "pinyinFirst": "RKZS", + "capital": "桑珠孜区", + "population": 81, + "area": 179240, + "areaCode": "0892", + "zipCode": "857000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116718256198, + "parentId": 653116718256197, + "name": "桑珠孜区", + "shortName": null, + "level": 3, + "code": "540202", + "pinyin": "SangZhuZiQu", + "pinyinFirst": "SZZQ", + "capital": "城南街道", + "population": 13, + "area": 3670, + "areaCode": "0892", + "zipCode": "857000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718256199, + "parentId": 653116718256197, + "name": "南木林县", + "shortName": null, + "level": 3, + "code": "540221", + "pinyin": "NanMuLinXian", + "pinyinFirst": "NMLX", + "capital": "南木林镇", + "population": 9, + "area": 8110, + "areaCode": "0892", + "zipCode": "857100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718256200, + "parentId": 653116718256197, + "name": "江孜县", + "shortName": null, + "level": 3, + "code": "540222", + "pinyin": "JiangZiXian", + "pinyinFirst": "JZX", + "capital": "江孜镇", + "population": 7, + "area": 3850, + "areaCode": "0892", + "zipCode": "857400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718256201, + "parentId": 653116718256197, + "name": "定日县", + "shortName": null, + "level": 3, + "code": "540223", + "pinyin": "DingRiXian", + "pinyinFirst": "DRX", + "capital": "协格尔镇", + "population": 6, + "area": 13860, + "areaCode": "0892", + "zipCode": "858200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718256202, + "parentId": 653116718256197, + "name": "萨迦县", + "shortName": null, + "level": 3, + "code": "540224", + "pinyin": "SaJiaXian", + "pinyinFirst": "SJX", + "capital": "萨迦镇", + "population": 5, + "area": 5750, + "areaCode": "0892", + "zipCode": "857800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718256203, + "parentId": 653116718256197, + "name": "拉孜县", + "shortName": null, + "level": 3, + "code": "540225", + "pinyin": "LaZiXian", + "pinyinFirst": "LZX", + "capital": "曲下镇", + "population": 6, + "area": 4490, + "areaCode": "0892", + "zipCode": "858100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718256204, + "parentId": 653116718256197, + "name": "昂仁县", + "shortName": null, + "level": 3, + "code": "540226", + "pinyin": "AngRenXian", + "pinyinFirst": "ARX", + "capital": "卡嘎镇", + "population": 6, + "area": 27460, + "areaCode": "0892", + "zipCode": "858500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718256205, + "parentId": 653116718256197, + "name": "谢通门县", + "shortName": null, + "level": 3, + "code": "540227", + "pinyin": "XieTongMenXian", + "pinyinFirst": "XTMX", + "capital": "卡嘎镇", + "population": 5, + "area": 13970, + "areaCode": "0892", + "zipCode": "858900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718256206, + "parentId": 653116718256197, + "name": "白朗县", + "shortName": null, + "level": 3, + "code": "540228", + "pinyin": "BaiLangXian", + "pinyinFirst": "BLX", + "capital": "洛江镇", + "population": 5, + "area": 2810, + "areaCode": "0892", + "zipCode": "857300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718256207, + "parentId": 653116718256197, + "name": "仁布县", + "shortName": null, + "level": 3, + "code": "540229", + "pinyin": "RenBuXian", + "pinyinFirst": "RBX", + "capital": "德吉林镇", + "population": 4, + "area": 2120, + "areaCode": "0892", + "zipCode": "857200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718256208, + "parentId": 653116718256197, + "name": "康马县", + "shortName": null, + "level": 3, + "code": "540230", + "pinyin": "KangMaXian", + "pinyinFirst": "KMX", + "capital": "康马镇", + "population": 2, + "area": 6160, + "areaCode": "0892", + "zipCode": "857500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718260293, + "parentId": 653116718256197, + "name": "定结县", + "shortName": null, + "level": 3, + "code": "540231", + "pinyin": "DingJieXian", + "pinyinFirst": "DJX", + "capital": "江嘎镇", + "population": 2, + "area": 5830, + "areaCode": "0892", + "zipCode": "857900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718260294, + "parentId": 653116718256197, + "name": "仲巴县", + "shortName": null, + "level": 3, + "code": "540232", + "pinyin": "ZhongBaXian", + "pinyinFirst": "ZBX", + "capital": "拉让乡", + "population": 3, + "area": 43600, + "areaCode": "0892", + "zipCode": "858800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718260295, + "parentId": 653116718256197, + "name": "亚东县", + "shortName": null, + "level": 3, + "code": "540233", + "pinyin": "YaDongXian", + "pinyinFirst": "YDX", + "capital": "下司马镇", + "population": 1, + "area": 4310, + "areaCode": "0892", + "zipCode": "857600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718260296, + "parentId": 653116718256197, + "name": "吉隆县", + "shortName": null, + "level": 3, + "code": "540234", + "pinyin": "JiLongXian", + "pinyinFirst": "JLX", + "capital": "宗嘎镇", + "population": 2, + "area": 9020, + "areaCode": "0892", + "zipCode": "858700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718260297, + "parentId": 653116718256197, + "name": "聂拉木县", + "shortName": null, + "level": 3, + "code": "540235", + "pinyin": "NieLaMuXian", + "pinyinFirst": "NLMX", + "capital": "聂拉木镇", + "population": 2, + "area": 7870, + "areaCode": "0892", + "zipCode": "858300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718260298, + "parentId": 653116718256197, + "name": "萨嘎县", + "shortName": null, + "level": 3, + "code": "540236", + "pinyin": "SaGaXian", + "pinyinFirst": "SGX", + "capital": "加加镇", + "population": 2, + "area": 12420, + "areaCode": "0892", + "zipCode": "857800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718260299, + "parentId": 653116718256197, + "name": "岗巴县", + "shortName": null, + "level": 3, + "code": "540237", + "pinyin": "GangBaXian", + "pinyinFirst": "GBX", + "capital": "岗巴镇", + "population": 1, + "area": 3940, + "areaCode": "0892", + "zipCode": "857700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718358597, + "parentId": 653116717166661, + "name": "昌都市", + "shortName": null, + "level": 2, + "code": "540300", + "pinyin": "ChangDuShi", + "pinyinFirst": "CDS", + "capital": "卡若区", + "population": 78, + "area": 109830, + "areaCode": "0895", + "zipCode": "854000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116718358598, + "parentId": 653116718358597, + "name": "卡若区", + "shortName": null, + "level": 3, + "code": "540302", + "pinyin": "KaRuoQu", + "pinyinFirst": "KRQ", + "capital": "城关镇", + "population": 12, + "area": 10800, + "areaCode": "0895", + "zipCode": "854000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718358599, + "parentId": 653116718358597, + "name": "江达县", + "shortName": null, + "level": 3, + "code": "540321", + "pinyin": "JiangDaXian", + "pinyinFirst": "JDX", + "capital": "江达镇", + "population": 10, + "area": 13150, + "areaCode": "0895", + "zipCode": "854100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718358600, + "parentId": 653116718358597, + "name": "贡觉县", + "shortName": null, + "level": 3, + "code": "540322", + "pinyin": "GongJueXian", + "pinyinFirst": "GJX", + "capital": "莫洛镇", + "population": 5, + "area": 6320, + "areaCode": "0895", + "zipCode": "854200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718358601, + "parentId": 653116718358597, + "name": "类乌齐县", + "shortName": null, + "level": 3, + "code": "540323", + "pinyin": "LeiWuQiXian", + "pinyinFirst": "LWQX", + "capital": "桑多镇", + "population": 6, + "area": 6340, + "areaCode": "0895", + "zipCode": "855600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718358602, + "parentId": 653116718358597, + "name": "丁青县", + "shortName": null, + "level": 3, + "code": "540324", + "pinyin": "DingQingXian", + "pinyinFirst": "DQX", + "capital": "丁青镇", + "population": 10, + "area": 12370, + "areaCode": "0895", + "zipCode": "855700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718358603, + "parentId": 653116718358597, + "name": "察雅县", + "shortName": null, + "level": 3, + "code": "540325", + "pinyin": "ChaYaXian", + "pinyinFirst": "CYX", + "capital": "烟多镇", + "population": 7, + "area": 8260, + "areaCode": "0895", + "zipCode": "854300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718358604, + "parentId": 653116718358597, + "name": "八宿县", + "shortName": null, + "level": 3, + "code": "540326", + "pinyin": "BaSuXian", + "pinyinFirst": "BSX", + "capital": "白玛镇", + "population": 5, + "area": 12330, + "areaCode": "0895", + "zipCode": "854600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718358605, + "parentId": 653116718358597, + "name": "左贡县", + "shortName": null, + "level": 3, + "code": "540327", + "pinyin": "ZuoGongXian", + "pinyinFirst": "ZGX", + "capital": "旺达镇", + "population": 5, + "area": 11840, + "areaCode": "0895", + "zipCode": "854400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718358606, + "parentId": 653116718358597, + "name": "芒康县", + "shortName": null, + "level": 3, + "code": "540328", + "pinyin": "MangKangXian", + "pinyinFirst": "MKX", + "capital": "嘎托镇", + "population": 9, + "area": 11580, + "areaCode": "0895", + "zipCode": "854500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718358607, + "parentId": 653116718358597, + "name": "洛隆县", + "shortName": null, + "level": 3, + "code": "540329", + "pinyin": "LuoLongXian", + "pinyinFirst": "LLX", + "capital": "孜托镇", + "population": 6, + "area": 8060, + "areaCode": "0895", + "zipCode": "855400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718358608, + "parentId": 653116718358597, + "name": "边坝县", + "shortName": null, + "level": 3, + "code": "540330", + "pinyin": "BianBaXian", + "pinyinFirst": "BBX", + "capital": "草卡镇", + "population": 4, + "area": 8780, + "areaCode": "0895", + "zipCode": "855500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718473285, + "parentId": 653116717166661, + "name": "林芝市", + "shortName": null, + "level": 2, + "code": "540400", + "pinyin": "LinZhiShi", + "pinyinFirst": "LZS", + "capital": "巴宜区", + "population": 20, + "area": 114870, + "areaCode": "0894", + "zipCode": "850400", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116718473286, + "parentId": 653116718473285, + "name": "巴宜区", + "shortName": null, + "level": 3, + "code": "540402", + "pinyin": "BaYiQu", + "pinyinFirst": "BYQ", + "capital": "八一镇", + "population": 5, + "area": 8560, + "areaCode": "0894", + "zipCode": "850400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718473287, + "parentId": 653116718473285, + "name": "米林市", + "shortName": null, + "level": 3, + "code": "540481", + "pinyin": "MiLinShi", + "pinyinFirst": "MLS", + "capital": "米林镇", + "population": 2, + "area": 9490, + "areaCode": "0894", + "zipCode": "850500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718473288, + "parentId": 653116718473285, + "name": "工布江达县", + "shortName": null, + "level": 3, + "code": "540421", + "pinyin": "GongBuJiangDaXian", + "pinyinFirst": "GBJDX", + "capital": "工布江达镇", + "population": 3, + "area": 12960, + "areaCode": "0894", + "zipCode": "850300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718473289, + "parentId": 653116718473285, + "name": "墨脱县", + "shortName": null, + "level": 3, + "code": "540423", + "pinyin": "MoTuoXian", + "pinyinFirst": "MTX", + "capital": "墨脱镇", + "population": 1, + "area": 31450, + "areaCode": "0894", + "zipCode": "855300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718473290, + "parentId": 653116718473285, + "name": "波密县", + "shortName": null, + "level": 3, + "code": "540424", + "pinyin": "BoMiXian", + "pinyinFirst": "BMX", + "capital": "扎木镇", + "population": 3, + "area": 16760, + "areaCode": "0894", + "zipCode": "855200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718473291, + "parentId": 653116718473285, + "name": "察隅县", + "shortName": null, + "level": 3, + "code": "540425", + "pinyin": "ChaYuXian", + "pinyinFirst": "CYX", + "capital": "竹瓦根镇", + "population": 3, + "area": 31530, + "areaCode": "0894", + "zipCode": "855100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718473292, + "parentId": 653116718473285, + "name": "朗县", + "shortName": null, + "level": 3, + "code": "540426", + "pinyin": "LangXian", + "pinyinFirst": "LX", + "capital": "朗镇", + "population": 2, + "area": 4120, + "areaCode": "0894", + "zipCode": "856500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718620741, + "parentId": 653116717166661, + "name": "山南市", + "shortName": null, + "level": 2, + "code": "540500", + "pinyin": "ShanNanShi", + "pinyinFirst": "SNS", + "capital": "乃东区", + "population": 36, + "area": 79090, + "areaCode": "0893", + "zipCode": "856000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116718624837, + "parentId": 653116718620741, + "name": "乃东区", + "shortName": null, + "level": 3, + "code": "540502", + "pinyin": "NaiDongQu", + "pinyinFirst": "NDQ", + "capital": "泽当街道", + "population": 7, + "area": 2180, + "areaCode": "0893", + "zipCode": "856100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718624838, + "parentId": 653116718620741, + "name": "错那市", + "shortName": null, + "level": 3, + "code": "540581", + "pinyin": "CuoNaShi", + "pinyinFirst": "CNS", + "capital": "麻麻门巴民族乡", + "population": 2, + "area": 35120, + "areaCode": "0893", + "zipCode": "856700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718624839, + "parentId": 653116718620741, + "name": "扎囊县", + "shortName": null, + "level": 3, + "code": "540521", + "pinyin": "ZaNangXian", + "pinyinFirst": "ZNX", + "capital": "扎塘镇", + "population": 4, + "area": 2150, + "areaCode": "0893", + "zipCode": "850800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718624840, + "parentId": 653116718620741, + "name": "贡嘎县", + "shortName": null, + "level": 3, + "code": "540522", + "pinyin": "GongGaXian", + "pinyinFirst": "GGX", + "capital": "吉雄镇", + "population": 5, + "area": 2390, + "areaCode": "0893", + "zipCode": "850700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718624841, + "parentId": 653116718620741, + "name": "桑日县", + "shortName": null, + "level": 3, + "code": "540523", + "pinyin": "SangRiXian", + "pinyinFirst": "SRX", + "capital": "桑日镇", + "population": 2, + "area": 2630, + "areaCode": "0893", + "zipCode": "856200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718624842, + "parentId": 653116718620741, + "name": "琼结县", + "shortName": null, + "level": 3, + "code": "540524", + "pinyin": "QiongJieXian", + "pinyinFirst": "QJX", + "capital": "琼结镇", + "population": 2, + "area": 1030, + "areaCode": "0893", + "zipCode": "856800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718624843, + "parentId": 653116718620741, + "name": "曲松县", + "shortName": null, + "level": 3, + "code": "540525", + "pinyin": "QuSongXian", + "pinyinFirst": "QSX", + "capital": "曲松镇", + "population": 2, + "area": 2070, + "areaCode": "0893", + "zipCode": "856300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718624844, + "parentId": 653116718620741, + "name": "措美县", + "shortName": null, + "level": 3, + "code": "540526", + "pinyin": "CuoMeiXian", + "pinyinFirst": "CMX", + "capital": "措美镇", + "population": 1, + "area": 4180, + "areaCode": "0893", + "zipCode": "856900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718624845, + "parentId": 653116718620741, + "name": "洛扎县", + "shortName": null, + "level": 3, + "code": "540527", + "pinyin": "LuoZaXian", + "pinyinFirst": "LZX", + "capital": "洛扎镇", + "population": 2, + "area": 4980, + "areaCode": "0893", + "zipCode": "856600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718624846, + "parentId": 653116718620741, + "name": "加查县", + "shortName": null, + "level": 3, + "code": "540528", + "pinyin": "JiaChaXian", + "pinyinFirst": "JCX", + "capital": "安绕镇", + "population": 2, + "area": 4390, + "areaCode": "0893", + "zipCode": "856400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718624847, + "parentId": 653116718620741, + "name": "隆子县", + "shortName": null, + "level": 3, + "code": "540529", + "pinyin": "LongZiXian", + "pinyinFirst": "LZX", + "capital": "隆子镇", + "population": 4, + "area": 10000, + "areaCode": "0893", + "zipCode": "856600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718624848, + "parentId": 653116718620741, + "name": "浪卡子县", + "shortName": null, + "level": 3, + "code": "540531", + "pinyin": "LangQiaZiXian", + "pinyinFirst": "LQZX", + "capital": "浪卡子镇", + "population": 4, + "area": 7970, + "areaCode": "0893", + "zipCode": "851100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718772293, + "parentId": 653116717166661, + "name": "那曲市", + "shortName": null, + "level": 2, + "code": "540600", + "pinyin": "NaQuShi", + "pinyinFirst": "NQS", + "capital": "色尼区", + "population": 54, + "area": 353000, + "areaCode": "0896", + "zipCode": "852000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116718776389, + "parentId": 653116718772293, + "name": "色尼区", + "shortName": null, + "level": 3, + "code": "540602", + "pinyin": "SeNiQu", + "pinyinFirst": "SNQ", + "capital": "那曲镇", + "population": 11, + "area": 16200, + "areaCode": "0896", + "zipCode": "852000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718776390, + "parentId": 653116718772293, + "name": "嘉黎县", + "shortName": null, + "level": 3, + "code": "540621", + "pinyin": "JiaLiXian", + "pinyinFirst": "JLX", + "capital": "阿扎镇", + "population": 4, + "area": 13070, + "areaCode": "0896", + "zipCode": "852400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718776391, + "parentId": 653116718772293, + "name": "比如县", + "shortName": null, + "level": 3, + "code": "540622", + "pinyin": "BiRuXian", + "pinyinFirst": "BRX", + "capital": "比如镇", + "population": 8, + "area": 11690, + "areaCode": "0896", + "zipCode": "852300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718776392, + "parentId": 653116718772293, + "name": "聂荣县", + "shortName": null, + "level": 3, + "code": "540623", + "pinyin": "NieRongXian", + "pinyinFirst": "NRX", + "capital": "聂荣镇", + "population": 4, + "area": 8990, + "areaCode": "0896", + "zipCode": "853500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718776393, + "parentId": 653116718772293, + "name": "安多县", + "shortName": null, + "level": 3, + "code": "540624", + "pinyin": "AnDuoXian", + "pinyinFirst": "ADX", + "capital": "帕那镇", + "population": 4, + "area": 43530, + "areaCode": "0896", + "zipCode": "853400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718776394, + "parentId": 653116718772293, + "name": "申扎县", + "shortName": null, + "level": 3, + "code": "540625", + "pinyin": "ShenZaXian", + "pinyinFirst": "SZX", + "capital": "申扎镇", + "population": 2, + "area": 25650, + "areaCode": "0896", + "zipCode": "853100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718776395, + "parentId": 653116718772293, + "name": "索县", + "shortName": null, + "level": 3, + "code": "540626", + "pinyin": "SuoXian", + "pinyinFirst": "SX", + "capital": "亚拉镇", + "population": 5, + "area": 5860, + "areaCode": "0896", + "zipCode": "852200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718776396, + "parentId": 653116718772293, + "name": "班戈县", + "shortName": null, + "level": 3, + "code": "540627", + "pinyin": "BanGeXian", + "pinyinFirst": "BGX", + "capital": "普保镇", + "population": 4, + "area": 28430, + "areaCode": "0896", + "zipCode": "852500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718776397, + "parentId": 653116718772293, + "name": "巴青县", + "shortName": null, + "level": 3, + "code": "540628", + "pinyin": "BaQingXian", + "pinyinFirst": "BQX", + "capital": "拉西镇", + "population": 6, + "area": 9810, + "areaCode": "0896", + "zipCode": "852100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718776398, + "parentId": 653116718772293, + "name": "尼玛县", + "shortName": null, + "level": 3, + "code": "540629", + "pinyin": "NiMaXian", + "pinyinFirst": "NMX", + "capital": "尼玛镇", + "population": 3, + "area": 75640, + "areaCode": "0896", + "zipCode": "852600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718776399, + "parentId": 653116718772293, + "name": "双湖县", + "shortName": null, + "level": 3, + "code": "540630", + "pinyin": "ShuangHuXian", + "pinyinFirst": "SHX", + "capital": "多玛乡", + "population": 1, + "area": 114130, + "areaCode": "0896", + "zipCode": "852600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718940229, + "parentId": 653116717166661, + "name": "阿里地区", + "shortName": null, + "level": 2, + "code": "542500", + "pinyin": "ALiDiQu", + "pinyinFirst": "ALDQ", + "capital": "噶尔县", + "population": 11, + "area": 337170, + "areaCode": "0897", + "zipCode": "859000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116718940230, + "parentId": 653116718940229, + "name": "噶尔县", + "shortName": null, + "level": 3, + "code": "542523", + "pinyin": "GaErXian", + "pinyinFirst": "GEX", + "capital": "狮泉河镇", + "population": 2, + "area": 18080, + "areaCode": "0897", + "zipCode": "859400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718940231, + "parentId": 653116718940229, + "name": "普兰县", + "shortName": null, + "level": 3, + "code": "542521", + "pinyin": "PuLanXian", + "pinyinFirst": "PLX", + "capital": "普兰镇", + "population": 1, + "area": 13190, + "areaCode": "0897", + "zipCode": "859500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718940232, + "parentId": 653116718940229, + "name": "札达县", + "shortName": null, + "level": 3, + "code": "542522", + "pinyin": "ZhaDaXian", + "pinyinFirst": "ZDX", + "capital": "托林镇", + "population": 1, + "area": 24600, + "areaCode": "0897", + "zipCode": "859600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718940233, + "parentId": 653116718940229, + "name": "日土县", + "shortName": null, + "level": 3, + "code": "542524", + "pinyin": "RiTuXian", + "pinyinFirst": "RTX", + "capital": "日土镇", + "population": 1, + "area": 77120, + "areaCode": "0897", + "zipCode": "859700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718940234, + "parentId": 653116718940229, + "name": "革吉县", + "shortName": null, + "level": 3, + "code": "542525", + "pinyin": "GeJiXian", + "pinyinFirst": "GJX", + "capital": "革吉镇", + "population": 2, + "area": 45710, + "areaCode": "0897", + "zipCode": "859100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718940235, + "parentId": 653116718940229, + "name": "改则县", + "shortName": null, + "level": 3, + "code": "542526", + "pinyin": "GaiZeXian", + "pinyinFirst": "GZX", + "capital": "改则镇", + "population": 3, + "area": 135580, + "areaCode": "0897", + "zipCode": "859200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116718940236, + "parentId": 653116718940229, + "name": "措勤县", + "shortName": null, + "level": 3, + "code": "542527", + "pinyin": "CuoQinXian", + "pinyinFirst": "CQX", + "capital": "措勤镇", + "population": 2, + "area": 22890, + "areaCode": "0897", + "zipCode": "859300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:45", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:18" + }, + { + "id": 653116719128645, + "parentId": 0, + "name": "陕西省", + "shortName": "陕、秦", + "level": 1, + "code": "610000", + "pinyin": "ShanXiSheng", + "pinyinFirst": "SXS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116720214085, + "parentId": 653116719128645, + "name": "西安市", + "shortName": null, + "level": 2, + "code": "610100", + "pinyin": "XiAnShi", + "pinyinFirst": "XAS", + "capital": "未央区", + "population": 957, + "area": 10106, + "areaCode": "029", + "zipCode": "710000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116720214086, + "parentId": 653116720214085, + "name": "未央区", + "shortName": null, + "level": 3, + "code": "610112", + "pinyin": "WeiYangQu", + "pinyinFirst": "WYQ", + "capital": "张家堡街道", + "population": 98, + "area": 263, + "areaCode": "029", + "zipCode": "710014", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720214087, + "parentId": 653116720214085, + "name": "新城区", + "shortName": null, + "level": 3, + "code": "610102", + "pinyin": "XinChengQu", + "pinyinFirst": "XCQ", + "capital": "西一路街道", + "population": 54, + "area": 30, + "areaCode": "029", + "zipCode": "710004", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720214088, + "parentId": 653116720214085, + "name": "碑林区", + "shortName": null, + "level": 3, + "code": "610103", + "pinyin": "BeiLinQu", + "pinyinFirst": "BLQ", + "capital": "南院门街道", + "population": 73, + "area": 23, + "areaCode": "029", + "zipCode": "710001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720214089, + "parentId": 653116720214085, + "name": "莲湖区", + "shortName": null, + "level": 3, + "code": "610104", + "pinyin": "LianHuQu", + "pinyinFirst": "LHQ", + "capital": "北院门街道", + "population": 76, + "area": 39, + "areaCode": "029", + "zipCode": "710003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720214090, + "parentId": 653116720214085, + "name": "灞桥区", + "shortName": null, + "level": 3, + "code": "610111", + "pinyin": "BaQiaoQu", + "pinyinFirst": "BQQ", + "capital": "纺织城街道", + "population": 66, + "area": 324, + "areaCode": "029", + "zipCode": "710038", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720214091, + "parentId": 653116720214085, + "name": "雁塔区", + "shortName": null, + "level": 3, + "code": "610113", + "pinyin": "YanTaQu", + "pinyinFirst": "YTQ", + "capital": "小寨路街道", + "population": 128, + "area": 152, + "areaCode": "029", + "zipCode": "710061", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720214092, + "parentId": 653116720214085, + "name": "阎良区", + "shortName": null, + "level": 3, + "code": "610114", + "pinyin": "YanLiangQu", + "pinyinFirst": "YLQ", + "capital": "凤凰路街道", + "population": 27, + "area": 244, + "areaCode": "029", + "zipCode": "710087", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720214093, + "parentId": 653116720214085, + "name": "临潼区", + "shortName": null, + "level": 3, + "code": "610115", + "pinyin": "LinTongQu", + "pinyinFirst": "LTQ", + "capital": "骊山街道", + "population": 73, + "area": 916, + "areaCode": "029", + "zipCode": "710600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720214094, + "parentId": 653116720214085, + "name": "长安区", + "shortName": null, + "level": 3, + "code": "610116", + "pinyin": "ChangAnQu", + "pinyinFirst": "CAQ", + "capital": "韦曲街道", + "population": 126, + "area": 1594, + "areaCode": "029", + "zipCode": "710100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720214095, + "parentId": 653116720214085, + "name": "高陵区", + "shortName": null, + "level": 3, + "code": "610117", + "pinyin": "GaoLingQu", + "pinyinFirst": "GLQ", + "capital": "鹿苑街道", + "population": 37, + "area": 288, + "areaCode": "029", + "zipCode": "710200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720214096, + "parentId": 653116720214085, + "name": "鄠邑区", + "shortName": null, + "level": 3, + "code": "610118", + "pinyin": "HuYiQu", + "pinyinFirst": "HYQ", + "capital": "甘亭街道", + "population": 64, + "area": 1281, + "areaCode": "029", + "zipCode": "710300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720214097, + "parentId": 653116720214085, + "name": "蓝田县", + "shortName": null, + "level": 3, + "code": "610122", + "pinyin": "LanTianXian", + "pinyinFirst": "LTX", + "capital": "蓝关街道", + "population": 66, + "area": 2006, + "areaCode": "029", + "zipCode": "710500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720214098, + "parentId": 653116720214085, + "name": "周至县", + "shortName": null, + "level": 3, + "code": "610124", + "pinyin": "ZhouZhiXian", + "pinyinFirst": "ZZX", + "capital": "二曲街道", + "population": 70, + "area": 2946, + "areaCode": "029", + "zipCode": "710400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720291909, + "parentId": 653116719128645, + "name": "铜川市", + "shortName": null, + "level": 2, + "code": "610200", + "pinyin": "TongChuanShi", + "pinyinFirst": "TCS", + "capital": "耀州区", + "population": 79, + "area": 3881, + "areaCode": "0919", + "zipCode": "727000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116720291910, + "parentId": 653116720291909, + "name": "耀州区", + "shortName": null, + "level": 3, + "code": "610204", + "pinyin": "YaoZhouQu", + "pinyinFirst": "YZQ", + "capital": "永安路街道", + "population": 35, + "area": 1608, + "areaCode": "0919", + "zipCode": "727100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720291911, + "parentId": 653116720291909, + "name": "王益区", + "shortName": null, + "level": 3, + "code": "610202", + "pinyin": "WangYiQu", + "pinyinFirst": "WYQ", + "capital": "红旗街街道", + "population": 17, + "area": 156, + "areaCode": "0919", + "zipCode": "727000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720291912, + "parentId": 653116720291909, + "name": "印台区", + "shortName": null, + "level": 3, + "code": "610203", + "pinyin": "YinTaiQu", + "pinyinFirst": "YTQ", + "capital": "城关街道", + "population": 18, + "area": 609, + "areaCode": "0919", + "zipCode": "727000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720291913, + "parentId": 653116720291909, + "name": "宜君县", + "shortName": null, + "level": 3, + "code": "610222", + "pinyin": "YiJunXian", + "pinyinFirst": "YJX", + "capital": "宜阳街道", + "population": 9, + "area": 1508, + "areaCode": "0919", + "zipCode": "727200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720398405, + "parentId": 653116719128645, + "name": "宝鸡市", + "shortName": null, + "level": 2, + "code": "610300", + "pinyin": "BaoJiShi", + "pinyinFirst": "BJS", + "capital": "金台区", + "population": 377, + "area": 18120, + "areaCode": "0917", + "zipCode": "721000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116720398406, + "parentId": 653116720398405, + "name": "金台区", + "shortName": null, + "level": 3, + "code": "610303", + "pinyin": "JinTaiQu", + "pinyinFirst": "JTQ", + "capital": "中山东路街道", + "population": 37, + "area": 311, + "areaCode": "0917", + "zipCode": "721000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720398407, + "parentId": 653116720398405, + "name": "渭滨区", + "shortName": null, + "level": 3, + "code": "610302", + "pinyin": "WeiBinQu", + "pinyinFirst": "WBQ", + "capital": "金陵街道", + "population": 43, + "area": 842, + "areaCode": "0917", + "zipCode": "721000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720398408, + "parentId": 653116720398405, + "name": "陈仓区", + "shortName": null, + "level": 3, + "code": "610304", + "pinyin": "ChenCangQu", + "pinyinFirst": "CCQ", + "capital": "虢镇街道", + "population": 60, + "area": 2472, + "areaCode": "0917", + "zipCode": "721300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720398409, + "parentId": 653116720398405, + "name": "凤翔区", + "shortName": null, + "level": 3, + "code": "610305", + "pinyin": "FengXiangQu", + "pinyinFirst": "FXQ", + "capital": "城关镇", + "population": 52, + "area": 1229, + "areaCode": "0917", + "zipCode": "721400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720398410, + "parentId": 653116720398405, + "name": "岐山县", + "shortName": null, + "level": 3, + "code": "610323", + "pinyin": "QiShanXian", + "pinyinFirst": "QSX", + "capital": "凤鸣镇", + "population": 46, + "area": 855, + "areaCode": "0917", + "zipCode": "722400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720398411, + "parentId": 653116720398405, + "name": "扶风县", + "shortName": null, + "level": 3, + "code": "610324", + "pinyin": "FuFengXian", + "pinyinFirst": "FFX", + "capital": "城关街道", + "population": 44, + "area": 703, + "areaCode": "0917", + "zipCode": "722200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720398412, + "parentId": 653116720398405, + "name": "眉县", + "shortName": null, + "level": 3, + "code": "610326", + "pinyin": "MeiXian", + "pinyinFirst": "MX", + "capital": "首善街道", + "population": 32, + "area": 858, + "areaCode": "0917", + "zipCode": "722300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720398413, + "parentId": 653116720398405, + "name": "陇县", + "shortName": null, + "level": 3, + "code": "610327", + "pinyin": "LongXian", + "pinyinFirst": "LX", + "capital": "城关镇", + "population": 27, + "area": 2279, + "areaCode": "0917", + "zipCode": "721200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720402501, + "parentId": 653116720398405, + "name": "千阳县", + "shortName": null, + "level": 3, + "code": "610328", + "pinyin": "QianYangXian", + "pinyinFirst": "QYX", + "capital": "城关镇", + "population": 13, + "area": 999, + "areaCode": "0917", + "zipCode": "721100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720402502, + "parentId": 653116720398405, + "name": "麟游县", + "shortName": null, + "level": 3, + "code": "610329", + "pinyin": "LinYouXian", + "pinyinFirst": "LYX", + "capital": "九成宫镇", + "population": 9, + "area": 1708, + "areaCode": "0917", + "zipCode": "721500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720402503, + "parentId": 653116720398405, + "name": "凤县", + "shortName": null, + "level": 3, + "code": "610330", + "pinyin": "FengXian", + "pinyinFirst": "FX", + "capital": "双石铺镇", + "population": 9, + "area": 3148, + "areaCode": "0917", + "zipCode": "721700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720402504, + "parentId": 653116720398405, + "name": "太白县", + "shortName": null, + "level": 3, + "code": "610331", + "pinyin": "TaiBaiXian", + "pinyinFirst": "TBX", + "capital": "嘴头镇", + "population": 5, + "area": 2716, + "areaCode": "0917", + "zipCode": "721600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720537669, + "parentId": 653116719128645, + "name": "咸阳市", + "shortName": null, + "level": 2, + "code": "610400", + "pinyin": "XianYangShi", + "pinyinFirst": "XYS", + "capital": "秦都区", + "population": 543, + "area": 10323, + "areaCode": "029", + "zipCode": "712000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116720537670, + "parentId": 653116720537669, + "name": "秦都区", + "shortName": null, + "level": 3, + "code": "610402", + "pinyin": "QinDuQu", + "pinyinFirst": "QDQ", + "capital": "人民路街道", + "population": 54, + "area": 259, + "areaCode": "029", + "zipCode": "712000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720537671, + "parentId": 653116720537669, + "name": "杨陵区", + "shortName": null, + "level": 3, + "code": "610403", + "pinyin": "YangLingQu", + "pinyinFirst": "YLQ", + "capital": "杨陵街道", + "population": 19, + "area": 133, + "areaCode": "029", + "zipCode": "712100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720537672, + "parentId": 653116720537669, + "name": "渭城区", + "shortName": null, + "level": 3, + "code": "610404", + "pinyin": "WeiChengQu", + "pinyinFirst": "WCQ", + "capital": "渭阳街道", + "population": 42, + "area": 269, + "areaCode": "029", + "zipCode": "712000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720537673, + "parentId": 653116720537669, + "name": "兴平市", + "shortName": null, + "level": 3, + "code": "610481", + "pinyin": "XingPingShi", + "pinyinFirst": "XPS", + "capital": "东城街道", + "population": 60, + "area": 509, + "areaCode": "029", + "zipCode": "713100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720537674, + "parentId": 653116720537669, + "name": "彬州市", + "shortName": null, + "level": 3, + "code": "610482", + "pinyin": "BinZhouShi", + "pinyinFirst": "BZS", + "capital": "城关街道", + "population": 36, + "area": 1181, + "areaCode": "029", + "zipCode": "713500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720537675, + "parentId": 653116720537669, + "name": "三原县", + "shortName": null, + "level": 3, + "code": "610422", + "pinyin": "SanYuanXian", + "pinyinFirst": "SYX", + "capital": "城关街道", + "population": 41, + "area": 577, + "areaCode": "029", + "zipCode": "713800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720537676, + "parentId": 653116720537669, + "name": "泾阳县", + "shortName": null, + "level": 3, + "code": "610423", + "pinyin": "JingYangXian", + "pinyinFirst": "JYX", + "capital": "泾干街道", + "population": 53, + "area": 777, + "areaCode": "029", + "zipCode": "713700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720537677, + "parentId": 653116720537669, + "name": "乾县", + "shortName": null, + "level": 3, + "code": "610424", + "pinyin": "QianXian", + "pinyinFirst": "QX", + "capital": "城关街道", + "population": 59, + "area": 1000, + "areaCode": "029", + "zipCode": "713300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720537678, + "parentId": 653116720537669, + "name": "礼泉县", + "shortName": null, + "level": 3, + "code": "610425", + "pinyin": "LiQuanXian", + "pinyinFirst": "LQX", + "capital": "城关街道", + "population": 47, + "area": 1011, + "areaCode": "029", + "zipCode": "713200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720537679, + "parentId": 653116720537669, + "name": "永寿县", + "shortName": null, + "level": 3, + "code": "610426", + "pinyin": "YongShouXian", + "pinyinFirst": "YSX", + "capital": "监军街道", + "population": 20, + "area": 888, + "areaCode": "029", + "zipCode": "713400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720537680, + "parentId": 653116720537669, + "name": "长武县", + "shortName": null, + "level": 3, + "code": "610428", + "pinyin": "ChangWuXian", + "pinyinFirst": "CWX", + "capital": "昭仁街道", + "population": 19, + "area": 570, + "areaCode": "029", + "zipCode": "713600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720537681, + "parentId": 653116720537669, + "name": "旬邑县", + "shortName": null, + "level": 3, + "code": "610429", + "pinyin": "XunYiXian", + "pinyinFirst": "XYX", + "capital": "城关街道", + "population": 29, + "area": 1774, + "areaCode": "029", + "zipCode": "711300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720537682, + "parentId": 653116720537669, + "name": "淳化县", + "shortName": null, + "level": 3, + "code": "610430", + "pinyin": "ChunHuaXian", + "pinyinFirst": "CHX", + "capital": "城关街道", + "population": 19, + "area": 983, + "areaCode": "029", + "zipCode": "711200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720537683, + "parentId": 653116720537669, + "name": "武功县", + "shortName": null, + "level": 3, + "code": "610431", + "pinyin": "WuGongXian", + "pinyinFirst": "WGX", + "capital": "普集街道", + "population": 44, + "area": 392, + "areaCode": "029", + "zipCode": "712200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720672837, + "parentId": 653116719128645, + "name": "渭南市", + "shortName": null, + "level": 2, + "code": "610500", + "pinyin": "WeiNanShi", + "pinyinFirst": "WNS", + "capital": "临渭区", + "population": 543, + "area": 13033, + "areaCode": "0913", + "zipCode": "714000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116720676933, + "parentId": 653116720672837, + "name": "临渭区", + "shortName": null, + "level": 3, + "code": "610502", + "pinyin": "LinWeiQu", + "pinyinFirst": "LWQ", + "capital": "杜桥街道", + "population": 95, + "area": 1262, + "areaCode": "0913", + "zipCode": "714000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720676934, + "parentId": 653116720672837, + "name": "韩城市", + "shortName": null, + "level": 3, + "code": "610581", + "pinyin": "HanChengShi", + "pinyinFirst": "HCS", + "capital": "新城街道", + "population": 40, + "area": 1596, + "areaCode": "0913", + "zipCode": "715400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720676935, + "parentId": 653116720672837, + "name": "华阴市", + "shortName": null, + "level": 3, + "code": "610582", + "pinyin": "HuaYinShi", + "pinyinFirst": "HYS", + "capital": "太华路街道", + "population": 24, + "area": 675, + "areaCode": "0913", + "zipCode": "714200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720676936, + "parentId": 653116720672837, + "name": "华州区", + "shortName": null, + "level": 3, + "code": "610503", + "pinyin": "HuaZhouQu", + "pinyinFirst": "HZQ", + "capital": "华州街道", + "population": 32, + "area": 1128, + "areaCode": "0913", + "zipCode": "714100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720676937, + "parentId": 653116720672837, + "name": "潼关县", + "shortName": null, + "level": 3, + "code": "610522", + "pinyin": "TongGuanXian", + "pinyinFirst": "TGX", + "capital": "城关街道", + "population": 15, + "area": 429, + "areaCode": "0913", + "zipCode": "714300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720676938, + "parentId": 653116720672837, + "name": "大荔县", + "shortName": null, + "level": 3, + "code": "610523", + "pinyin": "DaLiXian", + "pinyinFirst": "DLX", + "capital": "城关街道", + "population": 72, + "area": 1696, + "areaCode": "0913", + "zipCode": "715100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720676939, + "parentId": 653116720672837, + "name": "合阳县", + "shortName": null, + "level": 3, + "code": "610524", + "pinyin": "HeYangXian", + "pinyinFirst": "HYX", + "capital": "城关街道", + "population": 44, + "area": 1308, + "areaCode": "0913", + "zipCode": "715300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720676940, + "parentId": 653116720672837, + "name": "澄城县", + "shortName": null, + "level": 3, + "code": "610525", + "pinyin": "ChengChengXian", + "pinyinFirst": "CCX", + "capital": "城关街道", + "population": 37, + "area": 1123, + "areaCode": "0913", + "zipCode": "715200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720676941, + "parentId": 653116720672837, + "name": "蒲城县", + "shortName": null, + "level": 3, + "code": "610526", + "pinyin": "PuChengXian", + "pinyinFirst": "PCX", + "capital": "城关街道", + "population": 77, + "area": 1582, + "areaCode": "0913", + "zipCode": "715500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720676942, + "parentId": 653116720672837, + "name": "白水县", + "shortName": null, + "level": 3, + "code": "610527", + "pinyin": "BaiShuiXian", + "pinyinFirst": "BSX", + "capital": "城关街道", + "population": 28, + "area": 988, + "areaCode": "0913", + "zipCode": "715600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720676943, + "parentId": 653116720672837, + "name": "富平县", + "shortName": null, + "level": 3, + "code": "610528", + "pinyin": "FuPingXian", + "pinyinFirst": "FPX", + "capital": "城关街道", + "population": 79, + "area": 1246, + "areaCode": "0913", + "zipCode": "711700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720816197, + "parentId": 653116719128645, + "name": "延安市", + "shortName": null, + "level": 2, + "code": "610600", + "pinyin": "YanAnShi", + "pinyinFirst": "YAS", + "capital": "宝塔区", + "population": 234, + "area": 37044, + "areaCode": "0911", + "zipCode": "716000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116720820293, + "parentId": 653116720816197, + "name": "宝塔区", + "shortName": null, + "level": 3, + "code": "610602", + "pinyin": "BaoTaQu", + "pinyinFirst": "BTQ", + "capital": "宝塔山街道", + "population": 48, + "area": 3538, + "areaCode": "0911", + "zipCode": "716000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720820294, + "parentId": 653116720816197, + "name": "安塞区", + "shortName": null, + "level": 3, + "code": "610603", + "pinyin": "AnSaiQu", + "pinyinFirst": "ASQ", + "capital": "真武洞街道", + "population": 20, + "area": 2951, + "areaCode": "0911", + "zipCode": "717400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720820295, + "parentId": 653116720816197, + "name": "子长市", + "shortName": null, + "level": 3, + "code": "610681", + "pinyin": "ZiChangShi", + "pinyinFirst": "ZCS", + "capital": "瓦窑堡街道", + "population": 27, + "area": 2405, + "areaCode": "0911", + "zipCode": "717300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720820296, + "parentId": 653116720816197, + "name": "志丹县", + "shortName": null, + "level": 3, + "code": "610625", + "pinyin": "ZhiDanXian", + "pinyinFirst": "ZDX", + "capital": "保安街道", + "population": 16, + "area": 3790, + "areaCode": "0911", + "zipCode": "717500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720820297, + "parentId": 653116720816197, + "name": "延长县", + "shortName": null, + "level": 3, + "code": "610621", + "pinyin": "YanChangXian", + "pinyinFirst": "YCX", + "capital": "七里村街道", + "population": 15, + "area": 2362, + "areaCode": "0911", + "zipCode": "717100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720820298, + "parentId": 653116720816197, + "name": "延川县", + "shortName": null, + "level": 3, + "code": "610622", + "pinyin": "YanChuanXian", + "pinyinFirst": "YCX", + "capital": "大禹街道", + "population": 19, + "area": 1987, + "areaCode": "0911", + "zipCode": "717200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720820299, + "parentId": 653116720816197, + "name": "吴起县", + "shortName": null, + "level": 3, + "code": "610626", + "pinyin": "WuQiXian", + "pinyinFirst": "WQX", + "capital": "吴起街道", + "population": 15, + "area": 3789, + "areaCode": "0911", + "zipCode": "717600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720820300, + "parentId": 653116720816197, + "name": "甘泉县", + "shortName": null, + "level": 3, + "code": "610627", + "pinyin": "GanQuanXian", + "pinyinFirst": "GQX", + "capital": "美水街道", + "population": 9, + "area": 2276, + "areaCode": "0911", + "zipCode": "716100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720820301, + "parentId": 653116720816197, + "name": "富县", + "shortName": null, + "level": 3, + "code": "610628", + "pinyin": "FuXian", + "pinyinFirst": "FX", + "capital": "茶坊街道", + "population": 16, + "area": 4180, + "areaCode": "0911", + "zipCode": "727500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720820302, + "parentId": 653116720816197, + "name": "洛川县", + "shortName": null, + "level": 3, + "code": "610629", + "pinyin": "LuoChuanXian", + "pinyinFirst": "LCX", + "capital": "凤栖街道", + "population": 22, + "area": 1791, + "areaCode": "0911", + "zipCode": "727400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720820303, + "parentId": 653116720816197, + "name": "宜川县", + "shortName": null, + "level": 3, + "code": "610630", + "pinyin": "YiChuanXian", + "pinyinFirst": "YCX", + "capital": "丹州街道", + "population": 12, + "area": 2937, + "areaCode": "0911", + "zipCode": "716200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720820304, + "parentId": 653116720816197, + "name": "黄龙县", + "shortName": null, + "level": 3, + "code": "610631", + "pinyin": "HuangLongXian", + "pinyinFirst": "HLX", + "capital": "石堡镇", + "population": 5, + "area": 2751, + "areaCode": "0911", + "zipCode": "715700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116720820305, + "parentId": 653116720816197, + "name": "黄陵县", + "shortName": null, + "level": 3, + "code": "610632", + "pinyin": "HuangLingXian", + "pinyinFirst": "HLX", + "capital": "桥山街道", + "population": 12, + "area": 2287, + "areaCode": "0911", + "zipCode": "727300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721004613, + "parentId": 653116719128645, + "name": "汉中市", + "shortName": null, + "level": 2, + "code": "610700", + "pinyin": "HanZhongShi", + "pinyinFirst": "HZS", + "capital": "汉台区", + "population": 381, + "area": 27093, + "areaCode": "0916", + "zipCode": "723000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116721008709, + "parentId": 653116721004613, + "name": "汉台区", + "shortName": null, + "level": 3, + "code": "610702", + "pinyin": "HanTaiQu", + "pinyinFirst": "HTQ", + "capital": "中山街道", + "population": 57, + "area": 546, + "areaCode": "0916", + "zipCode": "723000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721008710, + "parentId": 653116721004613, + "name": "南郑区", + "shortName": null, + "level": 3, + "code": "610703", + "pinyin": "NanZhengQu", + "pinyinFirst": "NZQ", + "capital": "汉山街道", + "population": 56, + "area": 2808, + "areaCode": "0916", + "zipCode": "723100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721008711, + "parentId": 653116721004613, + "name": "城固县", + "shortName": null, + "level": 3, + "code": "610722", + "pinyin": "ChengGuXian", + "pinyinFirst": "CGX", + "capital": "博望街道", + "population": 54, + "area": 2217, + "areaCode": "0916", + "zipCode": "723200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721008712, + "parentId": 653116721004613, + "name": "洋县", + "shortName": null, + "level": 3, + "code": "610723", + "pinyin": "YangXian", + "pinyinFirst": "YX", + "capital": "洋州街道", + "population": 45, + "area": 3194, + "areaCode": "0916", + "zipCode": "723300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721008713, + "parentId": 653116721004613, + "name": "西乡县", + "shortName": null, + "level": 3, + "code": "610724", + "pinyin": "XiXiangXian", + "pinyinFirst": "XXX", + "capital": "城北街道", + "population": 41, + "area": 3229, + "areaCode": "0916", + "zipCode": "723500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721008714, + "parentId": 653116721004613, + "name": "勉县", + "shortName": null, + "level": 3, + "code": "610725", + "pinyin": "MianXian", + "pinyinFirst": "MX", + "capital": "勉阳街道", + "population": 41, + "area": 2390, + "areaCode": "0916", + "zipCode": "724200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721008715, + "parentId": 653116721004613, + "name": "宁强县", + "shortName": null, + "level": 3, + "code": "610726", + "pinyin": "NingQiangXian", + "pinyinFirst": "NQX", + "capital": "汉源街道", + "population": 32, + "area": 3256, + "areaCode": "0916", + "zipCode": "724400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721008716, + "parentId": 653116721004613, + "name": "略阳县", + "shortName": null, + "level": 3, + "code": "610727", + "pinyin": "LveYangXian", + "pinyinFirst": "LYX", + "capital": "兴州街道", + "population": 18, + "area": 2826, + "areaCode": "0916", + "zipCode": "724300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721008717, + "parentId": 653116721004613, + "name": "镇巴县", + "shortName": null, + "level": 3, + "code": "610728", + "pinyin": "ZhenBaXian", + "pinyinFirst": "ZBX", + "capital": "泾洋街道", + "population": 28, + "area": 3407, + "areaCode": "0916", + "zipCode": "723600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721008718, + "parentId": 653116721004613, + "name": "留坝县", + "shortName": null, + "level": 3, + "code": "610729", + "pinyin": "LiuBaXian", + "pinyinFirst": "LBX", + "capital": "紫柏街道", + "population": 4, + "area": 1951, + "areaCode": "0916", + "zipCode": "724100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721008719, + "parentId": 653116721004613, + "name": "佛坪县", + "shortName": null, + "level": 3, + "code": "610730", + "pinyin": "FoPingXian", + "pinyinFirst": "FPX", + "capital": "袁家庄街道", + "population": 3, + "area": 1269, + "areaCode": "0916", + "zipCode": "723400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721201221, + "parentId": 653116719128645, + "name": "榆林市", + "shortName": null, + "level": 2, + "code": "610800", + "pinyin": "YuLinShi", + "pinyinFirst": "YLS", + "capital": "榆阳区", + "population": 385, + "area": 42923, + "areaCode": "0912", + "zipCode": "719000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116721201222, + "parentId": 653116721201221, + "name": "榆阳区", + "shortName": null, + "level": 3, + "code": "610802", + "pinyin": "YuYangQu", + "pinyinFirst": "YYQ", + "capital": "青山路街道", + "population": 61, + "area": 6797, + "areaCode": "0912", + "zipCode": "719000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721201223, + "parentId": 653116721201221, + "name": "横山区", + "shortName": null, + "level": 3, + "code": "610803", + "pinyin": "HengShanQu", + "pinyinFirst": "HSQ", + "capital": "夏州街道", + "population": 38, + "area": 4299, + "areaCode": "0912", + "zipCode": "719100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721201224, + "parentId": 653116721201221, + "name": "神木市", + "shortName": null, + "level": 3, + "code": "610881", + "pinyin": "ShenMuShi", + "pinyinFirst": "SMS", + "capital": "麟州街道", + "population": 46, + "area": 7481, + "areaCode": "0912", + "zipCode": "719300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721201225, + "parentId": 653116721201221, + "name": "府谷县", + "shortName": null, + "level": 3, + "code": "610822", + "pinyin": "FuGuXian", + "pinyinFirst": "FGX", + "capital": "府谷镇", + "population": 25, + "area": 3202, + "areaCode": "0912", + "zipCode": "719400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721201226, + "parentId": 653116721201221, + "name": "靖边县", + "shortName": null, + "level": 3, + "code": "610824", + "pinyin": "JingBianXian", + "pinyinFirst": "JBX", + "capital": "张家畔街道", + "population": 36, + "area": 4975, + "areaCode": "0912", + "zipCode": "718500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721201227, + "parentId": 653116721201221, + "name": "定边县", + "shortName": null, + "level": 3, + "code": "610825", + "pinyin": "DingBianXian", + "pinyinFirst": "DBX", + "capital": "定边街道", + "population": 36, + "area": 6821, + "areaCode": "0912", + "zipCode": "718600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721201228, + "parentId": 653116721201221, + "name": "绥德县", + "shortName": null, + "level": 3, + "code": "610826", + "pinyin": "SuiDeXian", + "pinyinFirst": "SDX", + "capital": "名州镇", + "population": 35, + "area": 1853, + "areaCode": "0912", + "zipCode": "718000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721201229, + "parentId": 653116721201221, + "name": "米脂县", + "shortName": null, + "level": 3, + "code": "610827", + "pinyin": "MiZhiXian", + "pinyinFirst": "MZX", + "capital": "银州街道", + "population": 22, + "area": 1168, + "areaCode": "0912", + "zipCode": "718100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721201230, + "parentId": 653116721201221, + "name": "佳县", + "shortName": null, + "level": 3, + "code": "610828", + "pinyin": "JiaXian", + "pinyinFirst": "JX", + "capital": "佳州街道", + "population": 27, + "area": 2029, + "areaCode": "0912", + "zipCode": "719200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721201231, + "parentId": 653116721201221, + "name": "吴堡县", + "shortName": null, + "level": 3, + "code": "610829", + "pinyin": "WuBaoXian", + "pinyinFirst": "WBX", + "capital": "宋家川街道", + "population": 8, + "area": 421, + "areaCode": "0912", + "zipCode": "718200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721201232, + "parentId": 653116721201221, + "name": "清涧县", + "shortName": null, + "level": 3, + "code": "610830", + "pinyin": "QingJianXian", + "pinyinFirst": "QJX", + "capital": "宽洲镇", + "population": 21, + "area": 1850, + "areaCode": "0912", + "zipCode": "718300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721201233, + "parentId": 653116721201221, + "name": "子洲县", + "shortName": null, + "level": 3, + "code": "610831", + "pinyin": "ZiZhouXian", + "pinyinFirst": "ZZX", + "capital": "双湖峪街道", + "population": 30, + "area": 2027, + "areaCode": "0912", + "zipCode": "718400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721414213, + "parentId": 653116719128645, + "name": "安康市", + "shortName": null, + "level": 2, + "code": "610900", + "pinyin": "AnKangShi", + "pinyinFirst": "AKS", + "capital": "汉滨区", + "population": 304, + "area": 23535, + "areaCode": "0915", + "zipCode": "725000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116721418309, + "parentId": 653116721414213, + "name": "汉滨区", + "shortName": null, + "level": 3, + "code": "610902", + "pinyin": "HanBinQu", + "pinyinFirst": "HBQ", + "capital": "老城街道", + "population": 102, + "area": 3644, + "areaCode": "0915", + "zipCode": "725000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721418310, + "parentId": 653116721414213, + "name": "旬阳市", + "shortName": null, + "level": 3, + "code": "610981", + "pinyin": "XunYangShi", + "pinyinFirst": "XYS", + "capital": "城关镇", + "population": 45, + "area": 3541, + "areaCode": "0915", + "zipCode": "725700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721418311, + "parentId": 653116721414213, + "name": "汉阴县", + "shortName": null, + "level": 3, + "code": "610921", + "pinyin": "HanYinXian", + "pinyinFirst": "HYX", + "capital": "城关镇", + "population": 31, + "area": 1365, + "areaCode": "0915", + "zipCode": "725100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721418312, + "parentId": 653116721414213, + "name": "石泉县", + "shortName": null, + "level": 3, + "code": "610922", + "pinyin": "ShiQuanXian", + "pinyinFirst": "SQX", + "capital": "城关镇", + "population": 18, + "area": 1516, + "areaCode": "0915", + "zipCode": "725200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721418313, + "parentId": 653116721414213, + "name": "宁陕县", + "shortName": null, + "level": 3, + "code": "610923", + "pinyin": "NingShanXian", + "pinyinFirst": "NSX", + "capital": "城关镇", + "population": 7, + "area": 3664, + "areaCode": "0915", + "zipCode": "711600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721418314, + "parentId": 653116721414213, + "name": "紫阳县", + "shortName": null, + "level": 3, + "code": "610924", + "pinyin": "ZiYangXian", + "pinyinFirst": "ZYX", + "capital": "城关镇", + "population": 33, + "area": 2244, + "areaCode": "0915", + "zipCode": "725300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721418315, + "parentId": 653116721414213, + "name": "岚皋县", + "shortName": null, + "level": 3, + "code": "610925", + "pinyin": "LanGaoXian", + "pinyinFirst": "LGX", + "capital": "城关镇", + "population": 17, + "area": 1957, + "areaCode": "0915", + "zipCode": "725400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721418316, + "parentId": 653116721414213, + "name": "平利县", + "shortName": null, + "level": 3, + "code": "610926", + "pinyin": "PingLiXian", + "pinyinFirst": "PLX", + "capital": "城关镇", + "population": 23, + "area": 2648, + "areaCode": "0915", + "zipCode": "725500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721418317, + "parentId": 653116721414213, + "name": "镇坪县", + "shortName": null, + "level": 3, + "code": "610927", + "pinyin": "ZhenPingXian", + "pinyinFirst": "ZPX", + "capital": "城关镇", + "population": 6, + "area": 1502, + "areaCode": "0915", + "zipCode": "725600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721418318, + "parentId": 653116721414213, + "name": "白河县", + "shortName": null, + "level": 3, + "code": "610929", + "pinyin": "BaiHeXian", + "pinyinFirst": "BHX", + "capital": "城关镇", + "population": 21, + "area": 1454, + "areaCode": "0915", + "zipCode": "725800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721700933, + "parentId": 653116719128645, + "name": "商洛市", + "shortName": null, + "level": 2, + "code": "611000", + "pinyin": "ShangLuoShi", + "pinyinFirst": "SLS", + "capital": "商州区", + "population": 250, + "area": 19581, + "areaCode": "0914", + "zipCode": "726000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116721705029, + "parentId": 653116721700933, + "name": "商州区", + "shortName": null, + "level": 3, + "code": "611002", + "pinyin": "ShangZhouQu", + "pinyinFirst": "SZQ", + "capital": "城关街道", + "population": 56, + "area": 2645, + "areaCode": "0914", + "zipCode": "726000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721705030, + "parentId": 653116721700933, + "name": "洛南县", + "shortName": null, + "level": 3, + "code": "611021", + "pinyin": "LuoNanXian", + "pinyinFirst": "LNX", + "capital": "城关街道", + "population": 46, + "area": 2833, + "areaCode": "0914", + "zipCode": "726100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721705031, + "parentId": 653116721700933, + "name": "丹凤县", + "shortName": null, + "level": 3, + "code": "611022", + "pinyin": "DanFengXian", + "pinyinFirst": "DFX", + "capital": "龙驹寨街道", + "population": 31, + "area": 2407, + "areaCode": "0914", + "zipCode": "726200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721705032, + "parentId": 653116721700933, + "name": "商南县", + "shortName": null, + "level": 3, + "code": "611023", + "pinyin": "ShangNanXian", + "pinyinFirst": "SNX", + "capital": "城关街道", + "population": 25, + "area": 2314, + "areaCode": "0914", + "zipCode": "726300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721705033, + "parentId": 653116721700933, + "name": "山阳县", + "shortName": null, + "level": 3, + "code": "611024", + "pinyin": "ShanYangXian", + "pinyinFirst": "SYX", + "capital": "城关街道", + "population": 47, + "area": 3531, + "areaCode": "0914", + "zipCode": "726400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721705034, + "parentId": 653116721700933, + "name": "镇安县", + "shortName": null, + "level": 3, + "code": "611025", + "pinyin": "ZhenAnXian", + "pinyinFirst": "ZAX", + "capital": "永乐街道", + "population": 30, + "area": 3488, + "areaCode": "0914", + "zipCode": "711500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721705035, + "parentId": 653116721700933, + "name": "柞水县", + "shortName": null, + "level": 3, + "code": "611026", + "pinyin": "ZuoShuiXian", + "pinyinFirst": "ZSX", + "capital": "乾佑街道", + "population": 16, + "area": 2363, + "areaCode": "0914", + "zipCode": "711400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:19" + }, + { + "id": 653116721934405, + "parentId": 0, + "name": "甘肃省", + "shortName": "甘、陇", + "level": 1, + "code": "620000", + "pinyin": "GanSuSheng", + "pinyinFirst": "GSS", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116722978885, + "parentId": 653116721934405, + "name": "兰州市", + "shortName": null, + "level": 2, + "code": "620100", + "pinyin": "LanZhouShi", + "pinyinFirst": "LZS", + "capital": "城关区", + "population": 332, + "area": 13083, + "areaCode": "0931", + "zipCode": "730000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116722978886, + "parentId": 653116722978885, + "name": "城关区", + "shortName": null, + "level": 3, + "code": "620102", + "pinyin": "ChengGuanQu", + "pinyinFirst": "CGQ", + "capital": "张掖路街道", + "population": 96, + "area": 222, + "areaCode": "0931", + "zipCode": "730030", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116722978887, + "parentId": 653116722978885, + "name": "七里河区", + "shortName": null, + "level": 3, + "code": "620103", + "pinyin": "QiLiHeQu", + "pinyinFirst": "QLHQ", + "capital": "西湖街道", + "population": 48, + "area": 420, + "areaCode": "0931", + "zipCode": "730050", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116722978888, + "parentId": 653116722978885, + "name": "西固区", + "shortName": null, + "level": 3, + "code": "620104", + "pinyin": "XiGuQu", + "pinyinFirst": "XGQ", + "capital": "福利路街道", + "population": 32, + "area": 383, + "areaCode": "0931", + "zipCode": "730060", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116722978889, + "parentId": 653116722978885, + "name": "安宁区", + "shortName": null, + "level": 3, + "code": "620105", + "pinyin": "AnNingQu", + "pinyinFirst": "ANQ", + "capital": "安宁西路街道", + "population": 22, + "area": 86, + "areaCode": "0931", + "zipCode": "730070", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116722978890, + "parentId": 653116722978885, + "name": "红古区", + "shortName": null, + "level": 3, + "code": "620111", + "pinyin": "HongGuQu", + "pinyinFirst": "HGQ", + "capital": "华龙街道", + "population": 14, + "area": 519, + "areaCode": "0931", + "zipCode": "730080", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116722978891, + "parentId": 653116722978885, + "name": "永登县", + "shortName": null, + "level": 3, + "code": "620121", + "pinyin": "YongDengXian", + "pinyinFirst": "YDX", + "capital": "城关镇", + "population": 54, + "area": 5652, + "areaCode": "0931", + "zipCode": "730300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116722978892, + "parentId": 653116722978885, + "name": "皋兰县", + "shortName": null, + "level": 3, + "code": "620122", + "pinyin": "GaoLanXian", + "pinyinFirst": "GLX", + "capital": "石洞镇", + "population": 20, + "area": 2556, + "areaCode": "0931", + "zipCode": "730200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116722978893, + "parentId": 653116722978885, + "name": "榆中县", + "shortName": null, + "level": 3, + "code": "620123", + "pinyin": "YuZhongXian", + "pinyinFirst": "YZX", + "capital": "城关镇", + "population": 46, + "area": 3245, + "areaCode": "0931", + "zipCode": "730100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723068997, + "parentId": 653116721934405, + "name": "嘉峪关市", + "shortName": null, + "level": 2, + "code": "620200", + "pinyin": "JiaYuGuanShi", + "pinyinFirst": "JYGS", + "capital": "体育大道东路", + "population": 21, + "area": 2935, + "areaCode": "0937", + "zipCode": "735100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723167301, + "parentId": 653116721934405, + "name": "金昌市", + "shortName": null, + "level": 2, + "code": "620300", + "pinyin": "JinChangShi", + "pinyinFirst": "JCS", + "capital": "金川区", + "population": 45, + "area": 8927, + "areaCode": "0935", + "zipCode": "737100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116723171397, + "parentId": 653116723167301, + "name": "金川区", + "shortName": null, + "level": 3, + "code": "620302", + "pinyin": "JinChuanQu", + "pinyinFirst": "JCQ", + "capital": "广州路街道", + "population": 21, + "area": 3060, + "areaCode": "0935", + "zipCode": "737100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723171398, + "parentId": 653116723167301, + "name": "永昌县", + "shortName": null, + "level": 3, + "code": "620321", + "pinyin": "YongChangXian", + "pinyinFirst": "YCX", + "capital": "城关镇", + "population": 24, + "area": 5867, + "areaCode": "0935", + "zipCode": "737200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723261509, + "parentId": 653116721934405, + "name": "白银市", + "shortName": null, + "level": 2, + "code": "620400", + "pinyin": "BaiYinShi", + "pinyinFirst": "BYS", + "capital": "白银区", + "population": 181, + "area": 21210, + "areaCode": "0943", + "zipCode": "730900", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116723261510, + "parentId": 653116723261509, + "name": "白银区", + "shortName": null, + "level": 3, + "code": "620402", + "pinyin": "BaiYinQu", + "pinyinFirst": "BYQ", + "capital": "人民路街道", + "population": 29, + "area": 1372, + "areaCode": "0943", + "zipCode": "730900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723261511, + "parentId": 653116723261509, + "name": "平川区", + "shortName": null, + "level": 3, + "code": "620403", + "pinyin": "PingChuanQu", + "pinyinFirst": "PCQ", + "capital": "兴平路街道", + "population": 21, + "area": 2126, + "areaCode": "0943", + "zipCode": "730913", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723261512, + "parentId": 653116723261509, + "name": "靖远县", + "shortName": null, + "level": 3, + "code": "620421", + "pinyin": "JingYuanXian", + "pinyinFirst": "JYX", + "capital": "乌兰镇", + "population": 50, + "area": 5790, + "areaCode": "0943", + "zipCode": "730600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723261513, + "parentId": 653116723261509, + "name": "会宁县", + "shortName": null, + "level": 3, + "code": "620422", + "pinyin": "HuiNingXian", + "pinyinFirst": "HNX", + "capital": "会师镇", + "population": 57, + "area": 6439, + "areaCode": "0943", + "zipCode": "730700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723261514, + "parentId": 653116723261509, + "name": "景泰县", + "shortName": null, + "level": 3, + "code": "620423", + "pinyin": "JingTaiXian", + "pinyinFirst": "JTX", + "capital": "一条山镇", + "population": 24, + "area": 5483, + "areaCode": "0943", + "zipCode": "730400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723376197, + "parentId": 653116721934405, + "name": "天水市", + "shortName": null, + "level": 2, + "code": "620500", + "pinyin": "TianShuiShi", + "pinyinFirst": "TSS", + "capital": "秦州区", + "population": 372, + "area": 14431, + "areaCode": "0938", + "zipCode": "741000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116723376198, + "parentId": 653116723376197, + "name": "秦州区", + "shortName": null, + "level": 3, + "code": "620502", + "pinyin": "QinZhouQu", + "pinyinFirst": "QZQ", + "capital": "大城街道", + "population": 70, + "area": 2442, + "areaCode": "0938", + "zipCode": "741000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723376199, + "parentId": 653116723376197, + "name": "麦积区", + "shortName": null, + "level": 3, + "code": "620503", + "pinyin": "MaiJiQu", + "pinyinFirst": "MJQ", + "capital": "道北街道", + "population": 62, + "area": 3480, + "areaCode": "0938", + "zipCode": "741020", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723376200, + "parentId": 653116723376197, + "name": "清水县", + "shortName": null, + "level": 3, + "code": "620521", + "pinyin": "QingShuiXian", + "pinyinFirst": "QSX", + "capital": "永清镇", + "population": 33, + "area": 2012, + "areaCode": "0938", + "zipCode": "741400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723376201, + "parentId": 653116723376197, + "name": "秦安县", + "shortName": null, + "level": 3, + "code": "620522", + "pinyin": "QinAnXian", + "pinyinFirst": "QAX", + "capital": "兴国镇", + "population": 59, + "area": 1602, + "areaCode": "0938", + "zipCode": "741600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723376202, + "parentId": 653116723376197, + "name": "甘谷县", + "shortName": null, + "level": 3, + "code": "620523", + "pinyin": "GanGuXian", + "pinyinFirst": "GGX", + "capital": "大像山镇", + "population": 54, + "area": 1573, + "areaCode": "0938", + "zipCode": "741200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723376203, + "parentId": 653116723376197, + "name": "武山县", + "shortName": null, + "level": 3, + "code": "620524", + "pinyin": "WuShanXian", + "pinyinFirst": "WSX", + "capital": "城关镇", + "population": 47, + "area": 2011, + "areaCode": "0938", + "zipCode": "741300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723376204, + "parentId": 653116723376197, + "name": "张家川回族自治县", + "shortName": null, + "level": 3, + "code": "620525", + "pinyin": "ZhangJiaChuanHuiZuZiZhiXian", + "pinyinFirst": "ZJCHZZZX", + "capital": "张家川镇", + "population": 37, + "area": 1311, + "areaCode": "0938", + "zipCode": "741500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723478597, + "parentId": 653116721934405, + "name": "武威市", + "shortName": null, + "level": 2, + "code": "620600", + "pinyin": "WuWeiShi", + "pinyinFirst": "WWS", + "capital": "凉州区", + "population": 189, + "area": 33238, + "areaCode": "0935", + "zipCode": "733000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116723482693, + "parentId": 653116723478597, + "name": "凉州区", + "shortName": null, + "level": 3, + "code": "620602", + "pinyin": "LiangZhouQu", + "pinyinFirst": "LZQ", + "capital": "东大街街道", + "population": 104, + "area": 5081, + "areaCode": "0935", + "zipCode": "733000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723482694, + "parentId": 653116723478597, + "name": "民勤县", + "shortName": null, + "level": 3, + "code": "620621", + "pinyin": "MinQinXian", + "pinyinFirst": "MQX", + "capital": "三雷镇", + "population": 26, + "area": 15907, + "areaCode": "0935", + "zipCode": "733300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723482695, + "parentId": 653116723478597, + "name": "古浪县", + "shortName": null, + "level": 3, + "code": "620622", + "pinyin": "GuLangXian", + "pinyinFirst": "GLX", + "capital": "古浪镇", + "population": 38, + "area": 5103, + "areaCode": "0935", + "zipCode": "733100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723482696, + "parentId": 653116723478597, + "name": "天祝藏族自治县", + "shortName": null, + "level": 3, + "code": "620623", + "pinyin": "TianZhuZangZuZiZhiXian", + "pinyinFirst": "TZZZZZX", + "capital": "华藏寺镇", + "population": 20, + "area": 7147, + "areaCode": "0935", + "zipCode": "733200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723617861, + "parentId": 653116721934405, + "name": "张掖市", + "shortName": null, + "level": 2, + "code": "620700", + "pinyin": "ZhangYeShi", + "pinyinFirst": "ZYS", + "capital": "甘州区", + "population": 131, + "area": 40826, + "areaCode": "0936", + "zipCode": "734000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116723617862, + "parentId": 653116723617861, + "name": "甘州区", + "shortName": null, + "level": 3, + "code": "620702", + "pinyin": "GanZhouQu", + "pinyinFirst": "GZQ", + "capital": "南街街道", + "population": 52, + "area": 4240, + "areaCode": "0936", + "zipCode": "734000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723617863, + "parentId": 653116723617861, + "name": "民乐县", + "shortName": null, + "level": 3, + "code": "620722", + "pinyin": "MinYueXian", + "pinyinFirst": "MYX", + "capital": "洪水镇", + "population": 25, + "area": 3687, + "areaCode": "0936", + "zipCode": "734500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723617864, + "parentId": 653116723617861, + "name": "临泽县", + "shortName": null, + "level": 3, + "code": "620723", + "pinyin": "LinZeXian", + "pinyinFirst": "LZX", + "capital": "沙河镇", + "population": 15, + "area": 2729, + "areaCode": "0936", + "zipCode": "734200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723617865, + "parentId": 653116723617861, + "name": "高台县", + "shortName": null, + "level": 3, + "code": "620724", + "pinyin": "GaoTaiXian", + "pinyinFirst": "GTX", + "capital": "城关镇", + "population": 16, + "area": 4312, + "areaCode": "0936", + "zipCode": "734300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723617866, + "parentId": 653116723617861, + "name": "山丹县", + "shortName": null, + "level": 3, + "code": "620725", + "pinyin": "ShanDanXian", + "pinyinFirst": "SDX", + "capital": "清泉镇", + "population": 20, + "area": 5402, + "areaCode": "0936", + "zipCode": "734100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723617867, + "parentId": 653116723617861, + "name": "肃南裕固族自治县", + "shortName": null, + "level": 3, + "code": "620721", + "pinyin": "SuNanYuGuZuZiZhiXian", + "pinyinFirst": "SNYGZZZX", + "capital": "红湾寺镇", + "population": 4, + "area": 20456, + "areaCode": "0936", + "zipCode": "734400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723740741, + "parentId": 653116721934405, + "name": "平凉市", + "shortName": null, + "level": 2, + "code": "620800", + "pinyin": "PingLiangShi", + "pinyinFirst": "PLS", + "capital": "崆峒区", + "population": 234, + "area": 11169, + "areaCode": "0933", + "zipCode": "744000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116723744837, + "parentId": 653116723740741, + "name": "崆峒区", + "shortName": null, + "level": 3, + "code": "620802", + "pinyin": "KongTongQu", + "pinyinFirst": "KTQ", + "capital": "西郊街道", + "population": 53, + "area": 1936, + "areaCode": "0933", + "zipCode": "744000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723744838, + "parentId": 653116723740741, + "name": "华亭市", + "shortName": null, + "level": 3, + "code": "620881", + "pinyin": "HuaTingShi", + "pinyinFirst": "HTS", + "capital": "东华镇", + "population": 19, + "area": 1183, + "areaCode": "0933", + "zipCode": "744100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723744839, + "parentId": 653116723740741, + "name": "泾川县", + "shortName": null, + "level": 3, + "code": "620821", + "pinyin": "JingChuanXian", + "pinyinFirst": "JCX", + "capital": "城关镇", + "population": 35, + "area": 1409, + "areaCode": "0933", + "zipCode": "744300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723744840, + "parentId": 653116723740741, + "name": "灵台县", + "shortName": null, + "level": 3, + "code": "620822", + "pinyin": "LingTaiXian", + "pinyinFirst": "LTX", + "capital": "中台镇", + "population": 23, + "area": 2038, + "areaCode": "0933", + "zipCode": "744400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723744841, + "parentId": 653116723740741, + "name": "崇信县", + "shortName": null, + "level": 3, + "code": "620823", + "pinyin": "ChongXinXian", + "pinyinFirst": "CXX", + "capital": "锦屏镇", + "population": 10, + "area": 852, + "areaCode": "0933", + "zipCode": "744200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723744842, + "parentId": 653116723740741, + "name": "庄浪县", + "shortName": null, + "level": 3, + "code": "620825", + "pinyin": "ZhuangLangXian", + "pinyinFirst": "ZLX", + "capital": "水洛镇", + "population": 45, + "area": 1558, + "areaCode": "0933", + "zipCode": "744600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723744843, + "parentId": 653116723740741, + "name": "静宁县", + "shortName": null, + "level": 3, + "code": "620826", + "pinyin": "JingNingXian", + "pinyinFirst": "JNX", + "capital": "城关镇", + "population": 48, + "area": 2193, + "areaCode": "0933", + "zipCode": "743400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723871813, + "parentId": 653116721934405, + "name": "酒泉市", + "shortName": null, + "level": 2, + "code": "620900", + "pinyin": "JiuQuanShi", + "pinyinFirst": "JQS", + "capital": "肃州区", + "population": 101, + "area": 189997, + "areaCode": "0937", + "zipCode": "735000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116723875909, + "parentId": 653116723871813, + "name": "肃州区", + "shortName": null, + "level": 3, + "code": "620902", + "pinyin": "SuZhouQu", + "pinyinFirst": "SZQ", + "capital": "西北街街道", + "population": 42, + "area": 3386, + "areaCode": "0937", + "zipCode": "735000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723875910, + "parentId": 653116723871813, + "name": "玉门市", + "shortName": null, + "level": 3, + "code": "620981", + "pinyin": "YuMenShi", + "pinyinFirst": "YMS", + "capital": "玉门镇", + "population": 16, + "area": 13389, + "areaCode": "0937", + "zipCode": "735200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723875911, + "parentId": 653116723871813, + "name": "敦煌市", + "shortName": null, + "level": 3, + "code": "620982", + "pinyin": "DunHuangShi", + "pinyinFirst": "DHS", + "capital": "沙州镇", + "population": 14, + "area": 31200, + "areaCode": "0937", + "zipCode": "736200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723875912, + "parentId": 653116723871813, + "name": "金塔县", + "shortName": null, + "level": 3, + "code": "620921", + "pinyin": "JinTaXian", + "pinyinFirst": "JTX", + "capital": "金塔镇", + "population": 14, + "area": 18800, + "areaCode": "0937", + "zipCode": "735300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723875913, + "parentId": 653116723871813, + "name": "瓜州县", + "shortName": null, + "level": 3, + "code": "620922", + "pinyin": "GuaZhouXian", + "pinyinFirst": "GZX", + "capital": "渊泉镇", + "population": 13, + "area": 24100, + "areaCode": "0937", + "zipCode": "736100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723875914, + "parentId": 653116723871813, + "name": "肃北蒙古族自治县", + "shortName": null, + "level": 3, + "code": "620923", + "pinyin": "SuBeiMengGuZuZiZhiXian", + "pinyinFirst": "SBMGZZZX", + "capital": "党城湾镇", + "population": 1, + "area": 66748, + "areaCode": "0937", + "zipCode": "736300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116723875915, + "parentId": 653116723871813, + "name": "阿克塞哈萨克族自治县", + "shortName": null, + "level": 3, + "code": "620924", + "pinyin": "AKeSaiHaSaKeZuZiZhiXian", + "pinyinFirst": "AKSHSKZZZX", + "capital": "红柳湾镇", + "population": 1, + "area": 32374, + "areaCode": "0937", + "zipCode": "736400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724027461, + "parentId": 653116721934405, + "name": "庆阳市", + "shortName": null, + "level": 2, + "code": "621000", + "pinyin": "QingYangShi", + "pinyinFirst": "QYS", + "capital": "西峰区", + "population": 270, + "area": 27119, + "areaCode": "0934", + "zipCode": "745000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116724031557, + "parentId": 653116724027461, + "name": "西峰区", + "shortName": null, + "level": 3, + "code": "621002", + "pinyin": "XiFengQu", + "pinyinFirst": "XFQ", + "capital": "南街街道", + "population": 40, + "area": 996, + "areaCode": "0934", + "zipCode": "745000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724031558, + "parentId": 653116724027461, + "name": "庆城县", + "shortName": null, + "level": 3, + "code": "621021", + "pinyin": "QingChengXian", + "pinyinFirst": "QCX", + "capital": "庆城镇", + "population": 29, + "area": 2673, + "areaCode": "0934", + "zipCode": "745100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724031559, + "parentId": 653116724027461, + "name": "环县", + "shortName": null, + "level": 3, + "code": "621022", + "pinyin": "HuanXian", + "pinyinFirst": "HX", + "capital": "环城镇", + "population": 37, + "area": 9236, + "areaCode": "0934", + "zipCode": "745700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724031560, + "parentId": 653116724027461, + "name": "华池县", + "shortName": null, + "level": 3, + "code": "621023", + "pinyin": "HuaChiXian", + "pinyinFirst": "HCX", + "capital": "柔远镇", + "population": 14, + "area": 3776, + "areaCode": "0934", + "zipCode": "745600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724031561, + "parentId": 653116724027461, + "name": "合水县", + "shortName": null, + "level": 3, + "code": "621024", + "pinyin": "HeShuiXian", + "pinyinFirst": "HSX", + "capital": "西华池镇", + "population": 18, + "area": 2976, + "areaCode": "0934", + "zipCode": "745400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724031562, + "parentId": 653116724027461, + "name": "正宁县", + "shortName": null, + "level": 3, + "code": "621025", + "pinyin": "ZhengNingXian", + "pinyinFirst": "ZNX", + "capital": "山河镇", + "population": 24, + "area": 1329, + "areaCode": "0934", + "zipCode": "745300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724031563, + "parentId": 653116724027461, + "name": "宁县", + "shortName": null, + "level": 3, + "code": "621026", + "pinyin": "NingXian", + "pinyinFirst": "NX", + "capital": "新宁镇", + "population": 56, + "area": 2633, + "areaCode": "0934", + "zipCode": "745200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724031564, + "parentId": 653116724027461, + "name": "镇原县", + "shortName": null, + "level": 3, + "code": "621027", + "pinyin": "ZhenYuanXian", + "pinyinFirst": "ZYX", + "capital": "城关镇", + "population": 53, + "area": 3500, + "areaCode": "0934", + "zipCode": "744500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724183109, + "parentId": 653116721934405, + "name": "定西市", + "shortName": null, + "level": 2, + "code": "621100", + "pinyin": "DingXiShi", + "pinyinFirst": "DXS", + "capital": "安定区", + "population": 304, + "area": 20330, + "areaCode": "0932", + "zipCode": "743000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116724183110, + "parentId": 653116724183109, + "name": "安定区", + "shortName": null, + "level": 3, + "code": "621102", + "pinyin": "AnDingQu", + "pinyinFirst": "ADQ", + "capital": "永定路街道", + "population": 47, + "area": 4225, + "areaCode": "0932", + "zipCode": "743000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724183111, + "parentId": 653116724183109, + "name": "通渭县", + "shortName": null, + "level": 3, + "code": "621121", + "pinyin": "TongWeiXian", + "pinyinFirst": "TWX", + "capital": "平襄镇", + "population": 44, + "area": 2899, + "areaCode": "0932", + "zipCode": "743300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724183112, + "parentId": 653116724183109, + "name": "陇西县", + "shortName": null, + "level": 3, + "code": "621122", + "pinyin": "LongXiXian", + "pinyinFirst": "LXX", + "capital": "巩昌镇", + "population": 53, + "area": 2657, + "areaCode": "0932", + "zipCode": "748100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724183113, + "parentId": 653116724183109, + "name": "渭源县", + "shortName": null, + "level": 3, + "code": "621123", + "pinyin": "WeiYuanXian", + "pinyinFirst": "WYX", + "capital": "清源镇", + "population": 35, + "area": 2034, + "areaCode": "0932", + "zipCode": "748200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724183114, + "parentId": 653116724183109, + "name": "临洮县", + "shortName": null, + "level": 3, + "code": "621124", + "pinyin": "LinTaoXian", + "pinyinFirst": "LTX", + "capital": "洮阳镇", + "population": 55, + "area": 2851, + "areaCode": "0932", + "zipCode": "730500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724183115, + "parentId": 653116724183109, + "name": "漳县", + "shortName": null, + "level": 3, + "code": "621125", + "pinyin": "ZhangXian", + "pinyinFirst": "ZX", + "capital": "武阳镇", + "population": 21, + "area": 2164, + "areaCode": "0932", + "zipCode": "748300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724183116, + "parentId": 653116724183109, + "name": "岷县", + "shortName": null, + "level": 3, + "code": "621126", + "pinyin": "MinXian", + "pinyinFirst": "MX", + "capital": "岷阳镇", + "population": 50, + "area": 3500, + "areaCode": "0932", + "zipCode": "748400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724355141, + "parentId": 653116721934405, + "name": "陇南市", + "shortName": null, + "level": 2, + "code": "621200", + "pinyin": "LongNanShi", + "pinyinFirst": "LNS", + "capital": "武都区", + "population": 286, + "area": 27838, + "areaCode": "0939", + "zipCode": "746000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116724355142, + "parentId": 653116724355141, + "name": "武都区", + "shortName": null, + "level": 3, + "code": "621202", + "pinyin": "WuDuQu", + "pinyinFirst": "WDQ", + "capital": "城关镇", + "population": 60, + "area": 4642, + "areaCode": "0939", + "zipCode": "746000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724355143, + "parentId": 653116724355141, + "name": "成县", + "shortName": null, + "level": 3, + "code": "621221", + "pinyin": "ChengXian", + "pinyinFirst": "CX", + "capital": "城关镇", + "population": 27, + "area": 1678, + "areaCode": "0939", + "zipCode": "742500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724355144, + "parentId": 653116724355141, + "name": "文县", + "shortName": null, + "level": 3, + "code": "621222", + "pinyin": "WenXian", + "pinyinFirst": "WX", + "capital": "城关镇", + "population": 24, + "area": 5002, + "areaCode": "0939", + "zipCode": "746400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724355145, + "parentId": 653116724355141, + "name": "宕昌县", + "shortName": null, + "level": 3, + "code": "621223", + "pinyin": "DangChangXian", + "pinyinFirst": "DCX", + "capital": "城关镇", + "population": 30, + "area": 3315, + "areaCode": "0939", + "zipCode": "748500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724355146, + "parentId": 653116724355141, + "name": "康县", + "shortName": null, + "level": 3, + "code": "621224", + "pinyin": "KangXian", + "pinyinFirst": "KX", + "capital": "城关镇", + "population": 20, + "area": 2968, + "areaCode": "0939", + "zipCode": "746500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724359237, + "parentId": 653116724355141, + "name": "西和县", + "shortName": null, + "level": 3, + "code": "621225", + "pinyin": "XiHeXian", + "pinyinFirst": "XHX", + "capital": "汉源镇", + "population": 44, + "area": 1862, + "areaCode": "0939", + "zipCode": "742100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724359238, + "parentId": 653116724355141, + "name": "礼县", + "shortName": null, + "level": 3, + "code": "621226", + "pinyin": "LiXian", + "pinyinFirst": "LX", + "capital": "城关镇", + "population": 54, + "area": 4264, + "areaCode": "0939", + "zipCode": "742200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724359239, + "parentId": 653116724355141, + "name": "徽县", + "shortName": null, + "level": 3, + "code": "621227", + "pinyin": "HuiXian", + "pinyinFirst": "HX", + "capital": "城关镇", + "population": 23, + "area": 2699, + "areaCode": "0939", + "zipCode": "742300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724359240, + "parentId": 653116724355141, + "name": "两当县", + "shortName": null, + "level": 3, + "code": "621228", + "pinyin": "LiangDangXian", + "pinyinFirst": "LDX", + "capital": "城关镇", + "population": 5, + "area": 1408, + "areaCode": "0939", + "zipCode": "742400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724551749, + "parentId": 653116721934405, + "name": "临夏回族自治州", + "shortName": null, + "level": 2, + "code": "622900", + "pinyin": "LinXiaHuiZuZiZhiZhou", + "pinyinFirst": "LXHZZZZ", + "capital": "临夏市", + "population": 241, + "area": 8169, + "areaCode": "0930", + "zipCode": "731100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116724551750, + "parentId": 653116724551749, + "name": "临夏市", + "shortName": null, + "level": 3, + "code": "622901", + "pinyin": "LinXiaShi", + "pinyinFirst": "LXS", + "capital": "城南街道", + "population": 28, + "area": 89, + "areaCode": "0930", + "zipCode": "731100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724551751, + "parentId": 653116724551749, + "name": "临夏县", + "shortName": null, + "level": 3, + "code": "622921", + "pinyin": "LinXiaXian", + "pinyinFirst": "LXX", + "capital": "韩集镇", + "population": 42, + "area": 1213, + "areaCode": "0930", + "zipCode": "731800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724551752, + "parentId": 653116724551749, + "name": "康乐县", + "shortName": null, + "level": 3, + "code": "622922", + "pinyin": "KangLeXian", + "pinyinFirst": "KLX", + "capital": "附城镇", + "population": 30, + "area": 1083, + "areaCode": "0930", + "zipCode": "731500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724551753, + "parentId": 653116724551749, + "name": "永靖县", + "shortName": null, + "level": 3, + "code": "622923", + "pinyin": "YongJingXian", + "pinyinFirst": "YJX", + "capital": "刘家峡镇", + "population": 21, + "area": 1864, + "areaCode": "0930", + "zipCode": "731600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724551754, + "parentId": 653116724551749, + "name": "广河县", + "shortName": null, + "level": 3, + "code": "622924", + "pinyin": "GuangHeXian", + "pinyinFirst": "GHX", + "capital": "城关镇", + "population": 30, + "area": 538, + "areaCode": "0930", + "zipCode": "731300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724551755, + "parentId": 653116724551749, + "name": "和政县", + "shortName": null, + "level": 3, + "code": "622925", + "pinyin": "HeZhengXian", + "pinyinFirst": "HZX", + "capital": "城关镇", + "population": 24, + "area": 960, + "areaCode": "0930", + "zipCode": "731200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724551756, + "parentId": 653116724551749, + "name": "东乡族自治县", + "shortName": null, + "level": 3, + "code": "622926", + "pinyin": "DongXiangZuZiZhiXian", + "pinyinFirst": "DXZZZX", + "capital": "锁南镇", + "population": 38, + "area": 1512, + "areaCode": "0930", + "zipCode": "731400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724551757, + "parentId": 653116724551749, + "name": "积石山保安族东乡族撒拉族自治县", + "shortName": null, + "level": 3, + "code": "622927", + "pinyin": "JiShiShanBaoAnZuDongXiangZuSaLaZuZiZhiXian", + "pinyinFirst": "JSSBAZDXZSLZZZX", + "capital": "吹麻滩镇", + "population": 28, + "area": 910, + "areaCode": "0930", + "zipCode": "731700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724760645, + "parentId": 653116721934405, + "name": "甘南藏族自治州", + "shortName": null, + "level": 2, + "code": "623000", + "pinyin": "GanNanZangZuZiZhiZhou", + "pinyinFirst": "GNZZZZZ", + "capital": "合作市", + "population": 75, + "area": 38521, + "areaCode": "0941", + "zipCode": "747000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116724760646, + "parentId": 653116724760645, + "name": "合作市", + "shortName": null, + "level": 3, + "code": "623001", + "pinyin": "HeZuoShi", + "pinyinFirst": "HZS", + "capital": "坚木克尔街道", + "population": 9, + "area": 2670, + "areaCode": "0941", + "zipCode": "747000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724760647, + "parentId": 653116724760645, + "name": "临潭县", + "shortName": null, + "level": 3, + "code": "623021", + "pinyin": "LinTanXian", + "pinyinFirst": "LTX", + "capital": "城关镇", + "population": 16, + "area": 1557, + "areaCode": "0941", + "zipCode": "747500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724760648, + "parentId": 653116724760645, + "name": "卓尼县", + "shortName": null, + "level": 3, + "code": "623022", + "pinyin": "ZhuoNiXian", + "pinyinFirst": "ZNX", + "capital": "柳林镇", + "population": 11, + "area": 5420, + "areaCode": "0941", + "zipCode": "747600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724760649, + "parentId": 653116724760645, + "name": "舟曲县", + "shortName": null, + "level": 3, + "code": "623023", + "pinyin": "ZhouQuXian", + "pinyinFirst": "ZQX", + "capital": "城关镇", + "population": 14, + "area": 3010, + "areaCode": "0941", + "zipCode": "746300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724760650, + "parentId": 653116724760645, + "name": "迭部县", + "shortName": null, + "level": 3, + "code": "623024", + "pinyin": "DieBuXian", + "pinyinFirst": "DBX", + "capital": "电尕镇", + "population": 6, + "area": 5148, + "areaCode": "0941", + "zipCode": "747400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724760651, + "parentId": 653116724760645, + "name": "玛曲县", + "shortName": null, + "level": 3, + "code": "623025", + "pinyin": "MaQuXian", + "pinyinFirst": "MQX", + "capital": "尼玛镇", + "population": 6, + "area": 10190, + "areaCode": "0941", + "zipCode": "747300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724760652, + "parentId": 653116724760645, + "name": "碌曲县", + "shortName": null, + "level": 3, + "code": "623026", + "pinyin": "LuQuXian", + "pinyinFirst": "LQX", + "capital": "玛艾镇", + "population": 4, + "area": 4260, + "areaCode": "0941", + "zipCode": "747200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724760653, + "parentId": 653116724760645, + "name": "夏河县", + "shortName": null, + "level": 3, + "code": "623027", + "pinyin": "XiaHeXian", + "pinyinFirst": "XHX", + "capital": "拉卜楞镇", + "population": 9, + "area": 6266, + "areaCode": "0941", + "zipCode": "747100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:46", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:20" + }, + { + "id": 653116724973637, + "parentId": 0, + "name": "青海省", + "shortName": "青", + "level": 1, + "code": "630000", + "pinyin": "QingHaiSheng", + "pinyinFirst": "QHS", + "capital": null, + "population": null, + "area": null, + "areaCode": "", + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116726079557, + "parentId": 653116724973637, + "name": "西宁市", + "shortName": null, + "level": 2, + "code": "630100", + "pinyin": "XiNingShi", + "pinyinFirst": "XNS", + "capital": "城中区", + "population": 209, + "area": 7524, + "areaCode": "0971", + "zipCode": "810000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116726079558, + "parentId": 653116726079557, + "name": "城中区", + "shortName": null, + "level": 3, + "code": "630103", + "pinyin": "ChengZhongQu", + "pinyinFirst": "CZQ", + "capital": "饮马街街道", + "population": 25, + "area": 151, + "areaCode": "0971", + "zipCode": "810000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726079559, + "parentId": 653116726079557, + "name": "城东区", + "shortName": null, + "level": 3, + "code": "630102", + "pinyin": "ChengDongQu", + "pinyinFirst": "CDQ", + "capital": "大众街街道", + "population": 26, + "area": 135, + "areaCode": "0971", + "zipCode": "810007", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726079560, + "parentId": 653116726079557, + "name": "城西区", + "shortName": null, + "level": 3, + "code": "630104", + "pinyin": "ChengXiQu", + "pinyinFirst": "CXQ", + "capital": "五四大街街道", + "population": 26, + "area": 57, + "areaCode": "0971", + "zipCode": "810001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726079561, + "parentId": 653116726079557, + "name": "城北区", + "shortName": null, + "level": 3, + "code": "630105", + "pinyin": "ChengBeiQu", + "pinyinFirst": "CBQ", + "capital": "朝阳街道", + "population": 24, + "area": 138, + "areaCode": "0971", + "zipCode": "810003", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726079562, + "parentId": 653116726079557, + "name": "湟中区", + "shortName": null, + "level": 3, + "code": "630106", + "pinyin": "HuangZhongQu", + "pinyinFirst": "HZQ", + "capital": "鲁沙尔镇", + "population": 47, + "area": 2444, + "areaCode": "0971", + "zipCode": "811600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726079563, + "parentId": 653116726079557, + "name": "湟源县", + "shortName": null, + "level": 3, + "code": "630123", + "pinyin": "HuangYuanXian", + "pinyinFirst": "HYX", + "capital": "城关镇", + "population": 13, + "area": 1509, + "areaCode": "0971", + "zipCode": "812100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726079564, + "parentId": 653116726079557, + "name": "大通回族土族自治县", + "shortName": null, + "level": 3, + "code": "630121", + "pinyin": "DaTongHuiZuTuZuZiZhiXian", + "pinyinFirst": "DTHZTZZZX", + "capital": "桥头镇", + "population": 47, + "area": 3090, + "areaCode": "0971", + "zipCode": "810100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726140997, + "parentId": 653116724973637, + "name": "海东市", + "shortName": null, + "level": 2, + "code": "630200", + "pinyin": "HaiDongShi", + "pinyinFirst": "HDS", + "capital": "乐都区", + "population": 173, + "area": 13202, + "areaCode": "0972", + "zipCode": "810700", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116726140998, + "parentId": 653116726140997, + "name": "乐都区", + "shortName": null, + "level": 3, + "code": "630202", + "pinyin": "LeDouQu", + "pinyinFirst": "LDQ", + "capital": "碾伯镇", + "population": 29, + "area": 2600, + "areaCode": "0972", + "zipCode": "810700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726140999, + "parentId": 653116726140997, + "name": "平安区", + "shortName": null, + "level": 3, + "code": "630203", + "pinyin": "PingAnQu", + "pinyinFirst": "PAQ", + "capital": "平安镇", + "population": 13, + "area": 735, + "areaCode": "0972", + "zipCode": "810600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726141000, + "parentId": 653116726140997, + "name": "民和回族土族自治县", + "shortName": null, + "level": 3, + "code": "630222", + "pinyin": "MinHeHuiZuTuZuZiZhiXian", + "pinyinFirst": "MHHZTZZZX", + "capital": "川口镇", + "population": 44, + "area": 1890, + "areaCode": "0972", + "zipCode": "810800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726141001, + "parentId": 653116726140997, + "name": "互助土族自治县", + "shortName": null, + "level": 3, + "code": "630223", + "pinyin": "HuZhuTuZuZiZhiXian", + "pinyinFirst": "HZTZZZX", + "capital": "威远镇", + "population": 40, + "area": 3423, + "areaCode": "0972", + "zipCode": "810500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726141002, + "parentId": 653116726140997, + "name": "化隆回族自治县", + "shortName": null, + "level": 3, + "code": "630224", + "pinyin": "HuaLongHuiZuZiZhiXian", + "pinyinFirst": "HLHZZZX", + "capital": "巴燕镇", + "population": 31, + "area": 2740, + "areaCode": "0972", + "zipCode": "810900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726141003, + "parentId": 653116726140997, + "name": "循化撒拉族自治县", + "shortName": null, + "level": 3, + "code": "630225", + "pinyin": "XunHuaSaLaZuZiZhiXian", + "pinyinFirst": "XHSLZZZX", + "capital": "积石镇", + "population": 17, + "area": 1814, + "areaCode": "0972", + "zipCode": "811100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726239301, + "parentId": 653116724973637, + "name": "海北藏族自治州", + "shortName": null, + "level": 2, + "code": "632200", + "pinyin": "HaiBeiZangZuZiZhiZhou", + "pinyinFirst": "HBZZZZZ", + "capital": "海晏县西海镇", + "population": 30, + "area": 34443, + "areaCode": "0970", + "zipCode": "812200", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116726239302, + "parentId": 653116726239301, + "name": "海晏县", + "shortName": null, + "level": 3, + "code": "632223", + "pinyin": "HaiYanXian", + "pinyinFirst": "HYX", + "capital": "三角城镇", + "population": 4, + "area": 4443, + "areaCode": "0970", + "zipCode": "812200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726239303, + "parentId": 653116726239301, + "name": "祁连县", + "shortName": null, + "level": 3, + "code": "632222", + "pinyin": "QiLianXian", + "pinyinFirst": "QLX", + "capital": "八宝镇", + "population": 5, + "area": 14000, + "areaCode": "0970", + "zipCode": "810400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726239304, + "parentId": 653116726239301, + "name": "刚察县", + "shortName": null, + "level": 3, + "code": "632224", + "pinyin": "GangChaXian", + "pinyinFirst": "GCX", + "capital": "沙柳河镇", + "population": 5, + "area": 9600, + "areaCode": "0970", + "zipCode": "812300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726239305, + "parentId": 653116726239301, + "name": "门源回族自治县", + "shortName": null, + "level": 3, + "code": "632221", + "pinyin": "MenYuanHuiZuZiZhiXian", + "pinyinFirst": "MYHZZZX", + "capital": "浩门镇", + "population": 16, + "area": 6400, + "areaCode": "0970", + "zipCode": "810300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726337605, + "parentId": 653116724973637, + "name": "黄南藏族自治州", + "shortName": null, + "level": 2, + "code": "632300", + "pinyin": "HuangNanZangZuZiZhiZhou", + "pinyinFirst": "HNZZZZZ", + "capital": "同仁市", + "population": 28, + "area": 17809, + "areaCode": "0973", + "zipCode": "811300", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116726337606, + "parentId": 653116726337605, + "name": "同仁市", + "shortName": null, + "level": 3, + "code": "632301", + "pinyin": "TongRenShi", + "pinyinFirst": "TRS", + "capital": "隆务镇", + "population": 10, + "area": 3465, + "areaCode": "0973", + "zipCode": "811300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726337607, + "parentId": 653116726337605, + "name": "尖扎县", + "shortName": null, + "level": 3, + "code": "632322", + "pinyin": "JianZaXian", + "pinyinFirst": "JZX", + "capital": "马克唐镇", + "population": 6, + "area": 1600, + "areaCode": "0973", + "zipCode": "811200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726337608, + "parentId": 653116726337605, + "name": "泽库县", + "shortName": null, + "level": 3, + "code": "632323", + "pinyin": "ZeKuXian", + "pinyinFirst": "ZKX", + "capital": "泽曲镇", + "population": 8, + "area": 6494, + "areaCode": "0973", + "zipCode": "811400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726337609, + "parentId": 653116726337605, + "name": "河南蒙古族自治县", + "shortName": null, + "level": 3, + "code": "632324", + "pinyin": "HeNanMengGuZuZiZhiXian", + "pinyinFirst": "HNMGZZZX", + "capital": "优干宁镇", + "population": 4, + "area": 6250, + "areaCode": "0973", + "zipCode": "811500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726427717, + "parentId": 653116724973637, + "name": "海南藏族自治州", + "shortName": null, + "level": 2, + "code": "632500", + "pinyin": "HaiNanZangZuZiZhiZhou", + "pinyinFirst": "HNZZZZZ", + "capital": "共和县", + "population": 47, + "area": 43493, + "areaCode": "0974", + "zipCode": "813000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116726431813, + "parentId": 653116726427717, + "name": "共和县", + "shortName": null, + "level": 3, + "code": "632521", + "pinyin": "GongHeXian", + "pinyinFirst": "GHX", + "capital": "恰卜恰镇", + "population": 13, + "area": 16624, + "areaCode": "0974", + "zipCode": "813000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726431814, + "parentId": 653116726427717, + "name": "同德县", + "shortName": null, + "level": 3, + "code": "632522", + "pinyin": "TongDeXian", + "pinyinFirst": "TDX", + "capital": "尕巴松多镇", + "population": 6, + "area": 4600, + "areaCode": "0974", + "zipCode": "813200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726431815, + "parentId": 653116726427717, + "name": "贵德县", + "shortName": null, + "level": 3, + "code": "632523", + "pinyin": "GuiDeXian", + "pinyinFirst": "GDX", + "capital": "河阴镇", + "population": 11, + "area": 3600, + "areaCode": "0974", + "zipCode": "811700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726431816, + "parentId": 653116726427717, + "name": "兴海县", + "shortName": null, + "level": 3, + "code": "632524", + "pinyin": "XingHaiXian", + "pinyinFirst": "XHX", + "capital": "子科滩镇", + "population": 8, + "area": 12183, + "areaCode": "0974", + "zipCode": "813300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726431817, + "parentId": 653116726427717, + "name": "贵南县", + "shortName": null, + "level": 3, + "code": "632525", + "pinyin": "GuiNanXian", + "pinyinFirst": "GNX", + "capital": "茫曲镇", + "population": 8, + "area": 6486, + "areaCode": "0974", + "zipCode": "813100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726554693, + "parentId": 653116724973637, + "name": "果洛藏族自治州", + "shortName": null, + "level": 2, + "code": "632600", + "pinyin": "GuoLuoZangZuZiZhiZhou", + "pinyinFirst": "GLZZZZZ", + "capital": "玛沁县", + "population": 20, + "area": 74367, + "areaCode": "0975", + "zipCode": "814000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116726554694, + "parentId": 653116726554693, + "name": "玛沁县", + "shortName": null, + "level": 3, + "code": "632621", + "pinyin": "MaQinXian", + "pinyinFirst": "MQX", + "capital": "大武镇", + "population": 5, + "area": 13500, + "areaCode": "0975", + "zipCode": "814000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726554695, + "parentId": 653116726554693, + "name": "班玛县", + "shortName": null, + "level": 3, + "code": "632622", + "pinyin": "BanMaXian", + "pinyinFirst": "BMX", + "capital": "赛来塘镇", + "population": 3, + "area": 6452, + "areaCode": "0975", + "zipCode": "814300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726554696, + "parentId": 653116726554693, + "name": "甘德县", + "shortName": null, + "level": 3, + "code": "632623", + "pinyin": "GanDeXian", + "pinyinFirst": "GDX", + "capital": "柯曲镇", + "population": 4, + "area": 7125, + "areaCode": "0975", + "zipCode": "814100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726554697, + "parentId": 653116726554693, + "name": "达日县", + "shortName": null, + "level": 3, + "code": "632624", + "pinyin": "DaRiXian", + "pinyinFirst": "DRX", + "capital": "吉迈镇", + "population": 4, + "area": 14495, + "areaCode": "0975", + "zipCode": "814200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726554698, + "parentId": 653116726554693, + "name": "久治县", + "shortName": null, + "level": 3, + "code": "632625", + "pinyin": "JiuZhiXian", + "pinyinFirst": "JZX", + "capital": "智青松多镇", + "population": 3, + "area": 8300, + "areaCode": "0975", + "zipCode": "624700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726554699, + "parentId": 653116726554693, + "name": "玛多县", + "shortName": null, + "level": 3, + "code": "632626", + "pinyin": "MaDuoXian", + "pinyinFirst": "MDX", + "capital": "玛查理镇", + "population": 2, + "area": 24495, + "areaCode": "0975", + "zipCode": "813500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726693957, + "parentId": 653116724973637, + "name": "玉树藏族自治州", + "shortName": null, + "level": 2, + "code": "632700", + "pinyin": "YuShuZangZuZiZhiZhou", + "pinyinFirst": "YSZZZZZ", + "capital": "玉树市", + "population": 42, + "area": 204891, + "areaCode": "0976", + "zipCode": "815000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116726693958, + "parentId": 653116726693957, + "name": "玉树市", + "shortName": null, + "level": 3, + "code": "632701", + "pinyin": "YuShuShi", + "pinyinFirst": "YSS", + "capital": "西杭街道", + "population": 11, + "area": 15413, + "areaCode": "0976", + "zipCode": "815000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726693959, + "parentId": 653116726693957, + "name": "杂多县", + "shortName": null, + "level": 3, + "code": "632722", + "pinyin": "ZaDuoXian", + "pinyinFirst": "ZDX", + "capital": "萨呼腾镇", + "population": 7, + "area": 35520, + "areaCode": "0976", + "zipCode": "815300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726693960, + "parentId": 653116726693957, + "name": "称多县", + "shortName": null, + "level": 3, + "code": "632723", + "pinyin": "ChengDuoXian", + "pinyinFirst": "CDX", + "capital": "称文镇", + "population": 6, + "area": 14615, + "areaCode": "0976", + "zipCode": "815100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726693961, + "parentId": 653116726693957, + "name": "治多县", + "shortName": null, + "level": 3, + "code": "632724", + "pinyin": "ZhiDuoXian", + "pinyinFirst": "ZDX", + "capital": "加吉博洛镇", + "population": 3, + "area": 80648, + "areaCode": "0976", + "zipCode": "815400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726693962, + "parentId": 653116726693957, + "name": "囊谦县", + "shortName": null, + "level": 3, + "code": "632725", + "pinyin": "NangQianXian", + "pinyinFirst": "NQX", + "capital": "香达镇", + "population": 10, + "area": 12061, + "areaCode": "0976", + "zipCode": "815200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726693963, + "parentId": 653116726693957, + "name": "曲麻莱县", + "shortName": null, + "level": 3, + "code": "632726", + "pinyin": "QuMaLaiXian", + "pinyinFirst": "QMLX", + "capital": "约改镇", + "population": 3, + "area": 46634, + "areaCode": "0976", + "zipCode": "815500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726845509, + "parentId": 653116724973637, + "name": "海西蒙古族藏族自治州☆", + "shortName": null, + "level": 2, + "code": "632800", + "pinyin": "HaiXiMengGuZuZangZuZiZhiZhou☆", + "pinyinFirst": "HXMGZZZZZZ☆", + "capital": "德令哈市", + "population": 40, + "area": 300854, + "areaCode": "0977", + "zipCode": "817000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116726845510, + "parentId": 653116726845509, + "name": "德令哈市", + "shortName": null, + "level": 3, + "code": "632802", + "pinyin": "DeLingHaShi", + "pinyinFirst": "DLHS", + "capital": "河西街道", + "population": 7, + "area": 27766, + "areaCode": "0977", + "zipCode": "817000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726845511, + "parentId": 653116726845509, + "name": "格尔木市", + "shortName": null, + "level": 3, + "code": "632801", + "pinyin": "GeErMuShi", + "pinyinFirst": "GEMS", + "capital": "昆仑路街道", + "population": 14, + "area": 119174, + "areaCode": "0979", + "zipCode": "816000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726845512, + "parentId": 653116726845509, + "name": "茫崖市", + "shortName": null, + "level": 3, + "code": "632803", + "pinyin": "MangYaShi", + "pinyinFirst": "MYS", + "capital": "花土沟镇", + "population": 5, + "area": 49890, + "areaCode": "0977", + "zipCode": "817500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726845513, + "parentId": 653116726845509, + "name": "乌兰县", + "shortName": null, + "level": 3, + "code": "632821", + "pinyin": "WuLanXian", + "pinyinFirst": "WLX", + "capital": "希里沟镇", + "population": 3, + "area": 12250, + "areaCode": "0977", + "zipCode": "817100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726845514, + "parentId": 653116726845509, + "name": "都兰县", + "shortName": null, + "level": 3, + "code": "632822", + "pinyin": "DuLanXian", + "pinyinFirst": "DLX", + "capital": "察汗乌苏镇", + "population": 7, + "area": 45265, + "areaCode": "0977", + "zipCode": "816100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726845515, + "parentId": 653116726845509, + "name": "天峻县", + "shortName": null, + "level": 3, + "code": "632823", + "pinyin": "TianJunXian", + "pinyinFirst": "TJX", + "capital": "新源镇", + "population": 2, + "area": 25613, + "areaCode": "0977", + "zipCode": "817200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:47", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116726992965, + "parentId": 0, + "name": "宁夏回族自治区", + "shortName": "宁", + "level": 1, + "code": "640000", + "pinyin": "NingXiaHuiZuZiZhiQu", + "pinyinFirst": "NXHZZZQ", + "capital": null, + "population": null, + "area": null, + "areaCode": null, + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116728541253, + "parentId": 653116726992965, + "name": "银川市", + "shortName": null, + "level": 2, + "code": "640100", + "pinyin": "YinChuanShi", + "pinyinFirst": "YCS", + "capital": "金凤区", + "population": 199, + "area": 8874, + "areaCode": "0951", + "zipCode": "750000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116728541254, + "parentId": 653116728541253, + "name": "金凤区", + "shortName": null, + "level": 3, + "code": "640106", + "pinyin": "JinFengQu", + "pinyinFirst": "JFQ", + "capital": "长城中路街道", + "population": 41, + "area": 345, + "areaCode": "0951", + "zipCode": "750011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728541255, + "parentId": 653116728541253, + "name": "兴庆区", + "shortName": null, + "level": 3, + "code": "640104", + "pinyin": "XingQingQu", + "pinyinFirst": "XQQ", + "capital": "文化街街道", + "population": 59, + "area": 828, + "areaCode": "0951", + "zipCode": "750001", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728541256, + "parentId": 653116728541253, + "name": "西夏区", + "shortName": null, + "level": 3, + "code": "640105", + "pinyin": "XiXiaQu", + "pinyinFirst": "XXQ", + "capital": "贺兰山西路街道", + "population": 25, + "area": 1130, + "areaCode": "0951", + "zipCode": "750021", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728541257, + "parentId": 653116728541253, + "name": "灵武市", + "shortName": null, + "level": 3, + "code": "640181", + "pinyin": "LingWuShi", + "pinyinFirst": "LWS", + "capital": "东塔镇", + "population": 25, + "area": 3846, + "areaCode": "0951", + "zipCode": "750400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728541258, + "parentId": 653116728541253, + "name": "永宁县", + "shortName": null, + "level": 3, + "code": "640121", + "pinyin": "YongNingXian", + "pinyinFirst": "YNX", + "capital": "团结西路街道", + "population": 25, + "area": 1194, + "areaCode": "0951", + "zipCode": "750100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728541259, + "parentId": 653116728541253, + "name": "贺兰县", + "shortName": null, + "level": 3, + "code": "640122", + "pinyin": "HeLanXian", + "pinyinFirst": "HLX", + "capital": "习岗镇", + "population": 25, + "area": 1531, + "areaCode": "0951", + "zipCode": "750200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728627269, + "parentId": 653116726992965, + "name": "石嘴山市", + "shortName": null, + "level": 2, + "code": "640200", + "pinyin": "ShiZuiShanShi", + "pinyinFirst": "SZSS", + "capital": "大武口区", + "population": 75, + "area": 5208, + "areaCode": "0952", + "zipCode": "753000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116728627270, + "parentId": 653116728627269, + "name": "大武口区", + "shortName": null, + "level": 3, + "code": "640202", + "pinyin": "DaWuKouQu", + "pinyinFirst": "DWKQ", + "capital": "人民路街道", + "population": 26, + "area": 1213, + "areaCode": "0952", + "zipCode": "753000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728627271, + "parentId": 653116728627269, + "name": "惠农区", + "shortName": null, + "level": 3, + "code": "640205", + "pinyin": "HuiNongQu", + "pinyinFirst": "HNQ", + "capital": "北街街道", + "population": 18, + "area": 1361, + "areaCode": "0952", + "zipCode": "753600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728627272, + "parentId": 653116728627269, + "name": "平罗县", + "shortName": null, + "level": 3, + "code": "640221", + "pinyin": "PingLuoXian", + "pinyinFirst": "PLX", + "capital": "城关镇", + "population": 31, + "area": 2634, + "areaCode": "0952", + "zipCode": "753400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728733765, + "parentId": 653116726992965, + "name": "吴忠市", + "shortName": null, + "level": 2, + "code": "640300", + "pinyin": "WuZhongShi", + "pinyinFirst": "WZS", + "capital": "利通区", + "population": 143, + "area": 21420, + "areaCode": "0953", + "zipCode": "751100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116728733766, + "parentId": 653116728733765, + "name": "利通区", + "shortName": null, + "level": 3, + "code": "640302", + "pinyin": "LiTongQu", + "pinyinFirst": "LTQ", + "capital": "胜利镇", + "population": 42, + "area": 1415, + "areaCode": "0953", + "zipCode": "751100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728733767, + "parentId": 653116728733765, + "name": "红寺堡区", + "shortName": null, + "level": 3, + "code": "640303", + "pinyin": "HongSiBaoQu", + "pinyinFirst": "HSBQ", + "capital": "新民街道", + "population": 17, + "area": 3523, + "areaCode": "0953", + "zipCode": "751900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728733768, + "parentId": 653116728733765, + "name": "青铜峡市", + "shortName": null, + "level": 3, + "code": "640381", + "pinyin": "QingTongXiaShi", + "pinyinFirst": "QTXS", + "capital": "裕民街道", + "population": 28, + "area": 2438, + "areaCode": "0953", + "zipCode": "751600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728733769, + "parentId": 653116728733765, + "name": "盐池县", + "shortName": null, + "level": 3, + "code": "640323", + "pinyin": "YanChiXian", + "pinyinFirst": "YCX", + "capital": "盐州路街道", + "population": 17, + "area": 8377, + "areaCode": "0953", + "zipCode": "751500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728733770, + "parentId": 653116728733765, + "name": "同心县", + "shortName": null, + "level": 3, + "code": "640324", + "pinyin": "TongXinXian", + "pinyinFirst": "TXX", + "capital": "豫海镇", + "population": 38, + "area": 5667, + "areaCode": "0953", + "zipCode": "751300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728836165, + "parentId": 653116726992965, + "name": "固原市", + "shortName": null, + "level": 2, + "code": "640400", + "pinyin": "GuYuanShi", + "pinyinFirst": "GYS", + "capital": "原州区", + "population": 147, + "area": 13450, + "areaCode": "0954", + "zipCode": "756000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116728836166, + "parentId": 653116728836165, + "name": "原州区", + "shortName": null, + "level": 3, + "code": "640402", + "pinyin": "YuanZhouQu", + "pinyinFirst": "YZQ", + "capital": "南关街道", + "population": 46, + "area": 3501, + "areaCode": "0954", + "zipCode": "756000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728836167, + "parentId": 653116728836165, + "name": "西吉县", + "shortName": null, + "level": 3, + "code": "640422", + "pinyin": "XiJiXian", + "pinyinFirst": "XJX", + "capital": "吉强镇", + "population": 48, + "area": 4000, + "areaCode": "0954", + "zipCode": "756200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728836168, + "parentId": 653116728836165, + "name": "隆德县", + "shortName": null, + "level": 3, + "code": "640423", + "pinyin": "LongDeXian", + "pinyinFirst": "LDX", + "capital": "城关镇", + "population": 16, + "area": 1268, + "areaCode": "0954", + "zipCode": "756300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728836169, + "parentId": 653116728836165, + "name": "泾源县", + "shortName": null, + "level": 3, + "code": "640424", + "pinyin": "JingYuanXian", + "pinyinFirst": "JYX", + "capital": "香水镇", + "population": 12, + "area": 1443, + "areaCode": "0954", + "zipCode": "756400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728836170, + "parentId": 653116728836165, + "name": "彭阳县", + "shortName": null, + "level": 3, + "code": "640425", + "pinyin": "PengYangXian", + "pinyinFirst": "PYX", + "capital": "白阳镇", + "population": 25, + "area": 3238, + "areaCode": "0954", + "zipCode": "756500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728967237, + "parentId": 653116726992965, + "name": "中卫市", + "shortName": null, + "level": 2, + "code": "640500", + "pinyin": "ZhongWeiShi", + "pinyinFirst": "ZWS", + "capital": "沙坡头区", + "population": 122, + "area": 17448, + "areaCode": "0955", + "zipCode": "751700", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116728967238, + "parentId": 653116728967237, + "name": "沙坡头区", + "shortName": null, + "level": 3, + "code": "640502", + "pinyin": "ShaPoTouQu", + "pinyinFirst": "SPTQ", + "capital": "滨河镇", + "population": 42, + "area": 6877, + "areaCode": "0955", + "zipCode": "755000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728967239, + "parentId": 653116728967237, + "name": "中宁县", + "shortName": null, + "level": 3, + "code": "640521", + "pinyin": "ZhongNingXian", + "pinyinFirst": "ZNX", + "capital": "宁安镇", + "population": 35, + "area": 4193, + "areaCode": "0955", + "zipCode": "751200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116728967240, + "parentId": 653116728967237, + "name": "海原县", + "shortName": null, + "level": 3, + "code": "640522", + "pinyin": "HaiYuanXian", + "pinyinFirst": "HYX", + "capital": "三河镇", + "population": 45, + "area": 6378, + "areaCode": "0955", + "zipCode": "751800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:21" + }, + { + "id": 653116729069637, + "parentId": 0, + "name": "新疆维吾尔自治区", + "shortName": "新", + "level": 1, + "code": "650000", + "pinyin": "XinJiangWeiWuErZiZhiQu", + "pinyinFirst": "XJWWEZZQ", + "capital": null, + "population": null, + "area": null, + "areaCode": "", + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116730134597, + "parentId": 653116729069637, + "name": "乌鲁木齐市", + "shortName": null, + "level": 2, + "code": "650100", + "pinyin": "WuLuMuQiShi", + "pinyinFirst": "WLMQS", + "capital": "天山区", + "population": 227, + "area": 13788, + "areaCode": "0991", + "zipCode": "830000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116730134598, + "parentId": 653116730134597, + "name": "天山区", + "shortName": null, + "level": 3, + "code": "650102", + "pinyin": "TianShanQu", + "pinyinFirst": "TSQ", + "capital": "幸福路街道", + "population": 47, + "area": 171, + "areaCode": "0991", + "zipCode": "830002", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730134599, + "parentId": 653116730134597, + "name": "沙依巴克区", + "shortName": null, + "level": 3, + "code": "650103", + "pinyin": "ShaYiBaKeQu", + "pinyinFirst": "SYBKQ", + "capital": "扬子江路街道", + "population": 47, + "area": 422, + "areaCode": "0991", + "zipCode": "830000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730134600, + "parentId": 653116730134597, + "name": "新市区", + "shortName": null, + "level": 3, + "code": "650104", + "pinyin": "XinShiQu", + "pinyinFirst": "XSQ", + "capital": "北京路街道", + "population": 52, + "area": 263, + "areaCode": "0991", + "zipCode": "830011", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730134601, + "parentId": 653116730134597, + "name": "水磨沟区", + "shortName": null, + "level": 3, + "code": "650105", + "pinyin": "ShuiMoGouQu", + "pinyinFirst": "SMGQ", + "capital": "七坊街道", + "population": 24, + "area": 278, + "areaCode": "0991", + "zipCode": "830037", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730134602, + "parentId": 653116730134597, + "name": "头屯河区", + "shortName": null, + "level": 3, + "code": "650106", + "pinyin": "TouTunHeQu", + "pinyinFirst": "TTHQ", + "capital": "火车西站街道", + "population": 21, + "area": 276, + "areaCode": "0991", + "zipCode": "830022", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730134603, + "parentId": 653116730134597, + "name": "达坂城区", + "shortName": null, + "level": 3, + "code": "650107", + "pinyin": "DaBanChengQu", + "pinyinFirst": "DBCQ", + "capital": "达坂城镇", + "population": 3, + "area": 4759, + "areaCode": "0991", + "zipCode": "830039", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730134604, + "parentId": 653116730134597, + "name": "米东区", + "shortName": null, + "level": 3, + "code": "650109", + "pinyin": "MiDongQu", + "pinyinFirst": "MDQ", + "capital": "古牧地镇", + "population": 28, + "area": 3407, + "areaCode": "0991", + "zipCode": "830019", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730134605, + "parentId": 653116730134597, + "name": "乌鲁木齐县", + "shortName": null, + "level": 3, + "code": "650121", + "pinyin": "WuLuMuQiXian", + "pinyinFirst": "WLMQX", + "capital": "乌鲁木齐市水磨沟区南湖南路街道", + "population": 5, + "area": 4212, + "areaCode": "0991", + "zipCode": "830063", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730204229, + "parentId": 653116729069637, + "name": "克拉玛依市", + "shortName": null, + "level": 2, + "code": "650200", + "pinyin": "KeLaMaYiShi", + "pinyinFirst": "KLMYS", + "capital": "克拉玛依区", + "population": 31, + "area": 7332, + "areaCode": "0990", + "zipCode": "834000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116730208325, + "parentId": 653116730204229, + "name": "克拉玛依区", + "shortName": null, + "level": 3, + "code": "650203", + "pinyin": "KeLaMaYiQu", + "pinyinFirst": "KLMYQ", + "capital": "昆仑路街道", + "population": 21, + "area": 3431, + "areaCode": "0990", + "zipCode": "834000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730208326, + "parentId": 653116730204229, + "name": "独山子区", + "shortName": null, + "level": 3, + "code": "650202", + "pinyin": "DuShanZiQu", + "pinyinFirst": "DSZQ", + "capital": "西宁路街道", + "population": 6, + "area": 400, + "areaCode": "0992", + "zipCode": "833600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730208327, + "parentId": 653116730204229, + "name": "白碱滩区", + "shortName": null, + "level": 3, + "code": "650204", + "pinyin": "BaiJianTanQu", + "pinyinFirst": "BJTQ", + "capital": "中兴路街道", + "population": 4, + "area": 1272, + "areaCode": "0990", + "zipCode": "834008", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730208328, + "parentId": 653116730204229, + "name": "乌尔禾区", + "shortName": null, + "level": 3, + "code": "650205", + "pinyin": "WuErHeQu", + "pinyinFirst": "WEHQ", + "capital": "柳树街街道", + "population": 1, + "area": 2229, + "areaCode": "0990", + "zipCode": "834012", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730318917, + "parentId": 653116729069637, + "name": "吐鲁番市", + "shortName": null, + "level": 2, + "code": "650400", + "pinyin": "TuLuFanShi", + "pinyinFirst": "TLFS", + "capital": "高昌区", + "population": 63, + "area": 70049, + "areaCode": "0995", + "zipCode": "838000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116730323013, + "parentId": 653116730318917, + "name": "高昌区", + "shortName": null, + "level": 3, + "code": "650402", + "pinyin": "GaoChangQu", + "pinyinFirst": "GCQ", + "capital": "老城路街道", + "population": 29, + "area": 13690, + "areaCode": "0995", + "zipCode": "838000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730323014, + "parentId": 653116730318917, + "name": "鄯善县", + "shortName": null, + "level": 3, + "code": "650421", + "pinyin": "ShanShanXian", + "pinyinFirst": "SSX", + "capital": "鄯善镇", + "population": 22, + "area": 39759, + "areaCode": "0995", + "zipCode": "838200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730323015, + "parentId": 653116730318917, + "name": "托克逊县", + "shortName": null, + "level": 3, + "code": "650422", + "pinyin": "TuoKeXunXian", + "pinyinFirst": "TKXX", + "capital": "托克逊镇", + "population": 12, + "area": 16600, + "areaCode": "0995", + "zipCode": "838100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730433605, + "parentId": 653116729069637, + "name": "哈密市", + "shortName": null, + "level": 2, + "code": "650500", + "pinyin": "HaMiShi", + "pinyinFirst": "HMS", + "capital": "伊州区", + "population": 51, + "area": 138379, + "areaCode": "0902", + "zipCode": "839000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116730437701, + "parentId": 653116730433605, + "name": "伊州区", + "shortName": null, + "level": 3, + "code": "650502", + "pinyin": "YiZhouQu", + "pinyinFirst": "YZQ", + "capital": "东河区街道", + "population": 38, + "area": 81254, + "areaCode": "0902", + "zipCode": "839000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730437702, + "parentId": 653116730433605, + "name": "巴里坤哈萨克自治县", + "shortName": null, + "level": 3, + "code": "650521", + "pinyin": "BaLiKunHaSaKeZiZhiXian", + "pinyinFirst": "BLKHSKZZX", + "capital": "巴里坤镇", + "population": 10, + "area": 37304, + "areaCode": "0902", + "zipCode": "839200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730437703, + "parentId": 653116730433605, + "name": "伊吾县", + "shortName": null, + "level": 3, + "code": "650522", + "pinyin": "YiWuXian", + "pinyinFirst": "YWX", + "capital": "伊吾镇", + "population": 2, + "area": 19821, + "areaCode": "0902", + "zipCode": "839300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730544197, + "parentId": 653116729069637, + "name": "阿克苏地区", + "shortName": null, + "level": 2, + "code": "652900", + "pinyin": "AKeSuDiQu", + "pinyinFirst": "AKSDQ", + "capital": "阿克苏市", + "population": 256, + "area": 126760, + "areaCode": "0997", + "zipCode": "843000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116730548293, + "parentId": 653116730544197, + "name": "阿克苏市", + "shortName": null, + "level": 3, + "code": "652901", + "pinyin": "AKeSuShi", + "pinyinFirst": "AKSS", + "capital": "英巴扎街道", + "population": 56, + "area": 13647, + "areaCode": "0997", + "zipCode": "843000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730548294, + "parentId": 653116730544197, + "name": "库车市", + "shortName": null, + "level": 3, + "code": "652902", + "pinyin": "KuCheShi", + "pinyinFirst": "KCS", + "capital": "新城街道", + "population": 49, + "area": 14529, + "areaCode": "0997", + "zipCode": "842000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730548295, + "parentId": 653116730544197, + "name": "温宿县", + "shortName": null, + "level": 3, + "code": "652922", + "pinyin": "WenSuXian", + "pinyinFirst": "WSX", + "capital": "温宿镇", + "population": 27, + "area": 14376, + "areaCode": "0997", + "zipCode": "843100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730548296, + "parentId": 653116730544197, + "name": "沙雅县", + "shortName": null, + "level": 3, + "code": "652924", + "pinyin": "ShaYaXian", + "pinyinFirst": "SYX", + "capital": "沙雅镇", + "population": 26, + "area": 31887, + "areaCode": "0997", + "zipCode": "842200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730548297, + "parentId": 653116730544197, + "name": "新和县", + "shortName": null, + "level": 3, + "code": "652925", + "pinyin": "XinHeXian", + "pinyinFirst": "XHX", + "capital": "新和镇", + "population": 19, + "area": 5831, + "areaCode": "0997", + "zipCode": "842100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730548298, + "parentId": 653116730544197, + "name": "拜城县", + "shortName": null, + "level": 3, + "code": "652926", + "pinyin": "BaiChengXian", + "pinyinFirst": "BCX", + "capital": "拜城镇", + "population": 24, + "area": 15917, + "areaCode": "0997", + "zipCode": "842300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730548299, + "parentId": 653116730544197, + "name": "乌什县", + "shortName": null, + "level": 3, + "code": "652927", + "pinyin": "WuShiXian", + "pinyinFirst": "WSX", + "capital": "乌什镇", + "population": 23, + "area": 9065, + "areaCode": "0997", + "zipCode": "843400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730548300, + "parentId": 653116730544197, + "name": "阿瓦提县", + "shortName": null, + "level": 3, + "code": "652928", + "pinyin": "AWaTiXian", + "pinyinFirst": "AWTX", + "capital": "阿瓦提镇", + "population": 27, + "area": 12593, + "areaCode": "0997", + "zipCode": "843200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730548301, + "parentId": 653116730544197, + "name": "柯坪县", + "shortName": null, + "level": 3, + "code": "652929", + "pinyin": "KePingXian", + "pinyinFirst": "KPX", + "capital": "柯坪镇", + "population": 5, + "area": 8915, + "areaCode": "0997", + "zipCode": "843600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730671173, + "parentId": 653116729069637, + "name": "喀什地区", + "shortName": null, + "level": 2, + "code": "653100", + "pinyin": "KaShiDiQu", + "pinyinFirst": "KSDQ", + "capital": "喀什市", + "population": 462, + "area": 111741, + "areaCode": "0998", + "zipCode": "844000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116730671174, + "parentId": 653116730671173, + "name": "喀什市", + "shortName": null, + "level": 3, + "code": "653101", + "pinyin": "KaShiShi", + "pinyinFirst": "KSS", + "capital": "吾斯塘博依街道", + "population": 66, + "area": 791, + "areaCode": "0998", + "zipCode": "844000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730671175, + "parentId": 653116730671173, + "name": "疏附县", + "shortName": null, + "level": 3, + "code": "653121", + "pinyin": "ShuFuXian", + "pinyinFirst": "SFX", + "capital": "托克扎克镇", + "population": 28, + "area": 2986, + "areaCode": "0998", + "zipCode": "844100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730671176, + "parentId": 653116730671173, + "name": "疏勒县", + "shortName": null, + "level": 3, + "code": "653122", + "pinyin": "ShuLeXian", + "pinyinFirst": "SLX", + "capital": "疏勒镇", + "population": 38, + "area": 2207, + "areaCode": "0998", + "zipCode": "844200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730671177, + "parentId": 653116730671173, + "name": "英吉沙县", + "shortName": null, + "level": 3, + "code": "653123", + "pinyin": "YingJiShaXian", + "pinyinFirst": "YJSX", + "capital": "英吉沙镇", + "population": 31, + "area": 3421, + "areaCode": "0998", + "zipCode": "844500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730671178, + "parentId": 653116730671173, + "name": "泽普县", + "shortName": null, + "level": 3, + "code": "653124", + "pinyin": "ZePuXian", + "pinyinFirst": "ZPX", + "capital": "泽普镇", + "population": 23, + "area": 1000, + "areaCode": "0998", + "zipCode": "844800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730671179, + "parentId": 653116730671173, + "name": "莎车县", + "shortName": null, + "level": 3, + "code": "653125", + "pinyin": "ShaCheXian", + "pinyinFirst": "SCX", + "capital": "叶尔羌街道", + "population": 89, + "area": 9037, + "areaCode": "0998", + "zipCode": "844700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730671180, + "parentId": 653116730671173, + "name": "叶城县", + "shortName": null, + "level": 3, + "code": "653126", + "pinyin": "YeChengXian", + "pinyinFirst": "YCX", + "capital": "喀格勒克镇", + "population": 55, + "area": 28929, + "areaCode": "0998", + "zipCode": "844900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730671181, + "parentId": 653116730671173, + "name": "麦盖提县", + "shortName": null, + "level": 3, + "code": "653127", + "pinyin": "MaiGaiTiXian", + "pinyinFirst": "MGTX", + "capital": "麦盖提镇", + "population": 27, + "area": 11023, + "areaCode": "0998", + "zipCode": "844600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730671182, + "parentId": 653116730671173, + "name": "岳普湖县", + "shortName": null, + "level": 3, + "code": "653128", + "pinyin": "YuePuHuXian", + "pinyinFirst": "YPHX", + "capital": "岳普湖镇", + "population": 18, + "area": 3166, + "areaCode": "0998", + "zipCode": "844400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730671183, + "parentId": 653116730671173, + "name": "伽师县", + "shortName": null, + "level": 3, + "code": "653129", + "pinyin": "QieShiXian", + "pinyinFirst": "QSX", + "capital": "巴仁镇", + "population": 46, + "area": 6601, + "areaCode": "0998", + "zipCode": "844300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730671184, + "parentId": 653116730671173, + "name": "巴楚县", + "shortName": null, + "level": 3, + "code": "653130", + "pinyin": "BaChuXian", + "pinyinFirst": "BCX", + "capital": "巴楚镇", + "population": 38, + "area": 18491, + "areaCode": "0998", + "zipCode": "843800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730675269, + "parentId": 653116730671173, + "name": "塔什库尔干塔吉克自治县", + "shortName": null, + "level": 3, + "code": "653131", + "pinyin": "TaShiKuErGanTaJiKeZiZhiXian", + "pinyinFirst": "TSKEGTJKZZX", + "capital": "塔什库尔干镇", + "population": 4, + "area": 24089, + "areaCode": "0998", + "zipCode": "845250", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730871877, + "parentId": 653116729069637, + "name": "和田地区", + "shortName": null, + "level": 2, + "code": "653200", + "pinyin": "HeTianDiQu", + "pinyinFirst": "HTDQ", + "capital": "和田市", + "population": 253, + "area": 247938, + "areaCode": "0903", + "zipCode": "848000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116730875973, + "parentId": 653116730871877, + "name": "和田市", + "shortName": null, + "level": 3, + "code": "653201", + "pinyin": "HeTianShi", + "pinyinFirst": "HTS", + "capital": "努尔巴格街道", + "population": 41, + "area": 466, + "areaCode": "0903", + "zipCode": "848000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730875974, + "parentId": 653116730871877, + "name": "和田县", + "shortName": null, + "level": 3, + "code": "653221", + "pinyin": "HeTianXian", + "pinyinFirst": "HTX", + "capital": "和田市古江巴格街道", + "population": 36, + "area": 41302, + "areaCode": "0903", + "zipCode": "848000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730875975, + "parentId": 653116730871877, + "name": "墨玉县", + "shortName": null, + "level": 3, + "code": "653222", + "pinyin": "MoYuXian", + "pinyinFirst": "MYX", + "capital": "喀拉喀什镇", + "population": 65, + "area": 25420, + "areaCode": "0903", + "zipCode": "848100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730875976, + "parentId": 653116730871877, + "name": "皮山县", + "shortName": null, + "level": 3, + "code": "653223", + "pinyin": "PiShanXian", + "pinyinFirst": "PSX", + "capital": "固玛镇", + "population": 32, + "area": 38921, + "areaCode": "0903", + "zipCode": "845150", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730875977, + "parentId": 653116730871877, + "name": "洛浦县", + "shortName": null, + "level": 3, + "code": "653224", + "pinyin": "LuoPuXian", + "pinyinFirst": "LPX", + "capital": "洛浦镇", + "population": 30, + "area": 14104, + "areaCode": "0903", + "zipCode": "848200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730875978, + "parentId": 653116730871877, + "name": "策勒县", + "shortName": null, + "level": 3, + "code": "653225", + "pinyin": "CeLeXian", + "pinyinFirst": "CLX", + "capital": "策勒镇", + "population": 17, + "area": 31592, + "areaCode": "0903", + "zipCode": "848300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730875979, + "parentId": 653116730871877, + "name": "于田县", + "shortName": null, + "level": 3, + "code": "653226", + "pinyin": "YuTianXian", + "pinyinFirst": "YTX", + "capital": "木尕拉镇", + "population": 29, + "area": 39373, + "areaCode": "0903", + "zipCode": "848400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116730875980, + "parentId": 653116730871877, + "name": "民丰县", + "shortName": null, + "level": 3, + "code": "653227", + "pinyin": "MinFengXian", + "pinyinFirst": "MFX", + "capital": "尼雅镇", + "population": 4, + "area": 56760, + "areaCode": "0903", + "zipCode": "848500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731039813, + "parentId": 653116729069637, + "name": "昌吉回族自治州", + "shortName": null, + "level": 2, + "code": "652300", + "pinyin": "ChangJiHuiZuZiZhiZhou", + "pinyinFirst": "CJHZZZZ", + "capital": "昌吉市", + "population": 139, + "area": 73659, + "areaCode": "0994", + "zipCode": "831100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116731043909, + "parentId": 653116731039813, + "name": "昌吉市", + "shortName": null, + "level": 3, + "code": "652301", + "pinyin": "ChangJiShi", + "pinyinFirst": "CJS", + "capital": "延安北路街道", + "population": 39, + "area": 7981, + "areaCode": "0994", + "zipCode": "831100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731043910, + "parentId": 653116731039813, + "name": "阜康市", + "shortName": null, + "level": 3, + "code": "652302", + "pinyin": "FuKangShi", + "pinyinFirst": "FKS", + "capital": "博峰街道", + "population": 16, + "area": 8545, + "areaCode": "0994", + "zipCode": "831500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731043911, + "parentId": 653116731039813, + "name": "呼图壁县", + "shortName": null, + "level": 3, + "code": "652323", + "pinyin": "HuTuBiXian", + "pinyinFirst": "HTBX", + "capital": "呼图壁镇", + "population": 21, + "area": 9518, + "areaCode": "0994", + "zipCode": "831200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731043912, + "parentId": 653116731039813, + "name": "玛纳斯县", + "shortName": null, + "level": 3, + "code": "652324", + "pinyin": "MaNaSiXian", + "pinyinFirst": "MNSX", + "capital": "玛纳斯镇", + "population": 17, + "area": 9154, + "areaCode": "0994", + "zipCode": "832200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731043913, + "parentId": 653116731039813, + "name": "奇台县", + "shortName": null, + "level": 3, + "code": "652325", + "pinyin": "QiTaiXian", + "pinyinFirst": "QTX", + "capital": "奇台镇", + "population": 24, + "area": 16709, + "areaCode": "0994", + "zipCode": "831800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731043914, + "parentId": 653116731039813, + "name": "吉木萨尔县", + "shortName": null, + "level": 3, + "code": "652327", + "pinyin": "JiMuSaErXian", + "pinyinFirst": "JMSEX", + "capital": "吉木萨尔镇", + "population": 14, + "area": 8170, + "areaCode": "0994", + "zipCode": "831700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731043915, + "parentId": 653116731039813, + "name": "木垒哈萨克自治县", + "shortName": null, + "level": 3, + "code": "652328", + "pinyin": "MuLeiHaSaKeZiZhiXian", + "pinyinFirst": "MLHSKZZX", + "capital": "木垒镇", + "population": 9, + "area": 13582, + "areaCode": "0994", + "zipCode": "831900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731203653, + "parentId": 653116729069637, + "name": "博尔塔拉蒙古自治州", + "shortName": null, + "level": 2, + "code": "652700", + "pinyin": "BoErTaLaMengGuZiZhiZhou", + "pinyinFirst": "BETLMGZZZ", + "capital": "博乐市", + "population": 48, + "area": 26100, + "areaCode": "0909", + "zipCode": "833400", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116731207749, + "parentId": 653116731203653, + "name": "博乐市", + "shortName": null, + "level": 3, + "code": "652701", + "pinyin": "BoLeShi", + "pinyinFirst": "BLS", + "capital": "青得里街道", + "population": 26, + "area": 7802, + "areaCode": "0909", + "zipCode": "833400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731207750, + "parentId": 653116731203653, + "name": "阿拉山口市", + "shortName": null, + "level": 3, + "code": "652702", + "pinyin": "ALaShanKouShi", + "pinyinFirst": "ALSKS", + "capital": "阿拉套街道", + "population": 1, + "area": 1204, + "areaCode": "0909", + "zipCode": "833400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731207751, + "parentId": 653116731203653, + "name": "精河县", + "shortName": null, + "level": 3, + "code": "652722", + "pinyin": "JingHeXian", + "pinyinFirst": "JHX", + "capital": "精河镇", + "population": 14, + "area": 11189, + "areaCode": "0909", + "zipCode": "833300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731207752, + "parentId": 653116731203653, + "name": "温泉县", + "shortName": null, + "level": 3, + "code": "652723", + "pinyin": "WenQuanXian", + "pinyinFirst": "WQX", + "capital": "博格达尔镇", + "population": 7, + "area": 5905, + "areaCode": "0909", + "zipCode": "833500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731375685, + "parentId": 653116729069637, + "name": "巴音郭楞蒙古自治州", + "shortName": null, + "level": 2, + "code": "652800", + "pinyin": "BaYinGuoLengMengGuZiZhiZhou", + "pinyinFirst": "BYGLMGZZZ", + "capital": "库尔勒市", + "population": 125, + "area": 469780, + "areaCode": "0996", + "zipCode": "841000", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116731375686, + "parentId": 653116731375685, + "name": "库尔勒市", + "shortName": null, + "level": 3, + "code": "652801", + "pinyin": "KuErLeShi", + "pinyinFirst": "KELS", + "capital": "萨依巴格街道", + "population": 48, + "area": 6038, + "areaCode": "0996", + "zipCode": "841000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731375687, + "parentId": 653116731375685, + "name": "轮台县", + "shortName": null, + "level": 3, + "code": "652822", + "pinyin": "LunTaiXian", + "pinyinFirst": "LTX", + "capital": "轮台镇", + "population": 12, + "area": 14185, + "areaCode": "0996", + "zipCode": "841600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731375688, + "parentId": 653116731375685, + "name": "尉犁县", + "shortName": null, + "level": 3, + "code": "652823", + "pinyin": "YuLiXian", + "pinyinFirst": "YLX", + "capital": "尉犁镇", + "population": 11, + "area": 59251, + "areaCode": "0996", + "zipCode": "841500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731375689, + "parentId": 653116731375685, + "name": "若羌县", + "shortName": null, + "level": 3, + "code": "652824", + "pinyin": "RuoQiangXian", + "pinyinFirst": "RQX", + "capital": "若羌镇", + "population": 3, + "area": 198666, + "areaCode": "0996", + "zipCode": "841800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731375690, + "parentId": 653116731375685, + "name": "且末县", + "shortName": null, + "level": 3, + "code": "652825", + "pinyin": "QieMoXian", + "pinyinFirst": "QMX", + "capital": "且末镇", + "population": 7, + "area": 138390, + "areaCode": "0996", + "zipCode": "841900", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731375691, + "parentId": 653116731375685, + "name": "和静县", + "shortName": null, + "level": 3, + "code": "652827", + "pinyin": "HeJingXian", + "pinyinFirst": "HJX", + "capital": "和静镇", + "population": 18, + "area": 34703, + "areaCode": "0996", + "zipCode": "841300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731375692, + "parentId": 653116731375685, + "name": "和硕县", + "shortName": null, + "level": 3, + "code": "652828", + "pinyin": "HeShuoXian", + "pinyinFirst": "HSX", + "capital": "特吾里克镇", + "population": 7, + "area": 12604, + "areaCode": "0996", + "zipCode": "841200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731375693, + "parentId": 653116731375685, + "name": "博湖县", + "shortName": null, + "level": 3, + "code": "652829", + "pinyin": "BoHuXian", + "pinyinFirst": "BHX", + "capital": "博湖镇", + "population": 6, + "area": 3580, + "areaCode": "0996", + "zipCode": "841400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731375694, + "parentId": 653116731375685, + "name": "焉耆回族自治县", + "shortName": null, + "level": 3, + "code": "652826", + "pinyin": "YanQiHuiZuZiZhiXian", + "pinyinFirst": "YQHZZZX", + "capital": "焉耆镇", + "population": 13, + "area": 2363, + "areaCode": "0996", + "zipCode": "841100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731564101, + "parentId": 653116729069637, + "name": "克孜勒苏柯尔克孜自治州", + "shortName": null, + "level": 2, + "code": "653000", + "pinyin": "KeZiLeSuKeErKeZiZiZhiZhou", + "pinyinFirst": "KZLSKEKZZZZ", + "capital": "阿图什市", + "population": 62, + "area": 70896, + "areaCode": "0908", + "zipCode": "845350", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116731568197, + "parentId": 653116731564101, + "name": "阿图什市", + "shortName": null, + "level": 3, + "code": "653001", + "pinyin": "ATuShiShi", + "pinyinFirst": "ATSS", + "capital": "光明路街道", + "population": 28, + "area": 15698, + "areaCode": "0908", + "zipCode": "845350", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731568198, + "parentId": 653116731564101, + "name": "阿克陶县", + "shortName": null, + "level": 3, + "code": "653022", + "pinyin": "AKeTaoXian", + "pinyinFirst": "AKTX", + "capital": "阿克陶镇", + "population": 23, + "area": 24535, + "areaCode": "0908", + "zipCode": "845550", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731568199, + "parentId": 653116731564101, + "name": "阿合奇县", + "shortName": null, + "level": 3, + "code": "653023", + "pinyin": "AHeQiXian", + "pinyinFirst": "AHQX", + "capital": "阿合奇镇", + "population": 5, + "area": 11545, + "areaCode": "0997", + "zipCode": "843500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731568200, + "parentId": 653116731564101, + "name": "乌恰县", + "shortName": null, + "level": 3, + "code": "653024", + "pinyin": "WuQiaXian", + "pinyinFirst": "WQX", + "capital": "乌恰镇", + "population": 6, + "area": 19118, + "areaCode": "0908", + "zipCode": "845450", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731805765, + "parentId": 653116729069637, + "name": "伊犁哈萨克自治州☆", + "shortName": null, + "level": 2, + "code": "654000", + "pinyin": "YiLiHaSaKeZiZhiZhou☆", + "pinyinFirst": "YLHSKZZZ☆", + "capital": "伊宁市", + "population": 275, + "area": 267353, + "areaCode": "0999", + "zipCode": "835100", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116731805766, + "parentId": 653116731805765, + "name": "伊宁市", + "shortName": null, + "level": 3, + "code": "654002", + "pinyin": "YiNingShi", + "pinyinFirst": "YNS", + "capital": "艾兰木巴格街道", + "population": 58, + "area": 789, + "areaCode": "0999", + "zipCode": "835000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731805767, + "parentId": 653116731805765, + "name": "奎屯市", + "shortName": null, + "level": 3, + "code": "654003", + "pinyin": "KuiTunShi", + "pinyinFirst": "KTS", + "capital": "团结街街道", + "population": 29, + "area": 910, + "areaCode": "0992", + "zipCode": "833200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731805768, + "parentId": 653116731805765, + "name": "霍尔果斯市", + "shortName": null, + "level": 3, + "code": "654004", + "pinyin": "HuoErGuoSiShi", + "pinyinFirst": "HEGSS", + "capital": "陇海路", + "population": 7, + "area": 1909, + "areaCode": "0999", + "zipCode": "835221", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731805769, + "parentId": 653116731805765, + "name": "伊宁县", + "shortName": null, + "level": 3, + "code": "654021", + "pinyin": "YiNingXian", + "pinyinFirst": "YNX", + "capital": "吉里于孜镇", + "population": 42, + "area": 4386, + "areaCode": "0999", + "zipCode": "835100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731805770, + "parentId": 653116731805765, + "name": "霍城县", + "shortName": null, + "level": 3, + "code": "654023", + "pinyin": "HuoChengXian", + "pinyinFirst": "HCX", + "capital": "水定镇", + "population": 33, + "area": 2930, + "areaCode": "0999", + "zipCode": "835200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731805771, + "parentId": 653116731805765, + "name": "巩留县", + "shortName": null, + "level": 3, + "code": "654024", + "pinyin": "GongLiuXian", + "pinyinFirst": "GLX", + "capital": "巩留镇", + "population": 19, + "area": 4124, + "areaCode": "0999", + "zipCode": "835400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731805772, + "parentId": 653116731805765, + "name": "新源县", + "shortName": null, + "level": 3, + "code": "654025", + "pinyin": "XinYuanXian", + "pinyinFirst": "XYX", + "capital": "新源镇", + "population": 31, + "area": 7583, + "areaCode": "0999", + "zipCode": "835800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731805773, + "parentId": 653116731805765, + "name": "昭苏县", + "shortName": null, + "level": 3, + "code": "654026", + "pinyin": "ZhaoSuXian", + "pinyinFirst": "ZSX", + "capital": "昭苏镇", + "population": 18, + "area": 10465, + "areaCode": "0999", + "zipCode": "835600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731805774, + "parentId": 653116731805765, + "name": "特克斯县", + "shortName": null, + "level": 3, + "code": "654027", + "pinyin": "TeKeSiXian", + "pinyinFirst": "TKSX", + "capital": "特克斯镇", + "population": 17, + "area": 8080, + "areaCode": "0999", + "zipCode": "835500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731805775, + "parentId": 653116731805765, + "name": "尼勒克县", + "shortName": null, + "level": 3, + "code": "654028", + "pinyin": "NiLeKeXian", + "pinyinFirst": "NLKX", + "capital": "尼勒克镇", + "population": 18, + "area": 10130, + "areaCode": "0999", + "zipCode": "835700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116731805776, + "parentId": 653116731805765, + "name": "察布查尔锡伯自治县", + "shortName": null, + "level": 3, + "code": "654022", + "pinyin": "ChaBuChaErXiBoZiZhiXian", + "pinyinFirst": "CBCEXBZZX", + "capital": "察布查尔镇", + "population": 19, + "area": 4077, + "areaCode": "0999", + "zipCode": "835300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732047429, + "parentId": 653116729069637, + "name": "塔城地区", + "shortName": null, + "level": 2, + "code": "654200", + "pinyin": "TaChengDiQu", + "pinyinFirst": "TCDQ", + "capital": "塔城市", + "population": 98, + "area": 94876, + "areaCode": "0901", + "zipCode": "834700", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116732051525, + "parentId": 653116732047429, + "name": "塔城市", + "shortName": null, + "level": 3, + "code": "654201", + "pinyin": "TaChengShi", + "pinyinFirst": "TCS", + "capital": "和平街道", + "population": 16, + "area": 4007, + "areaCode": "0901", + "zipCode": "834700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732051526, + "parentId": 653116732047429, + "name": "乌苏市", + "shortName": null, + "level": 3, + "code": "654202", + "pinyin": "WuSuShi", + "pinyinFirst": "WSS", + "capital": "虹桥街道", + "population": 21, + "area": 14379, + "areaCode": "0992", + "zipCode": "833000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732051527, + "parentId": 653116732047429, + "name": "沙湾市", + "shortName": null, + "level": 3, + "code": "654203", + "pinyin": "ShaWanShi", + "pinyinFirst": "SWS", + "capital": "三道河子镇", + "population": 20, + "area": 12460, + "areaCode": "0993", + "zipCode": "832100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732051528, + "parentId": 653116732047429, + "name": "额敏县", + "shortName": null, + "level": 3, + "code": "654221", + "pinyin": "EMinXian", + "pinyinFirst": "EMX", + "capital": "额敏镇", + "population": 20, + "area": 9147, + "areaCode": "0901", + "zipCode": "834600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732051529, + "parentId": 653116732047429, + "name": "托里县", + "shortName": null, + "level": 3, + "code": "654224", + "pinyin": "TuoLiXian", + "pinyinFirst": "TLX", + "capital": "托里镇", + "population": 9, + "area": 19992, + "areaCode": "0901", + "zipCode": "834500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732051530, + "parentId": 653116732047429, + "name": "裕民县", + "shortName": null, + "level": 3, + "code": "654225", + "pinyin": "YuMinXian", + "pinyinFirst": "YMX", + "capital": "哈拉布拉镇", + "population": 6, + "area": 6107, + "areaCode": "0901", + "zipCode": "834800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732051531, + "parentId": 653116732047429, + "name": "和布克赛尔蒙古自治县", + "shortName": null, + "level": 3, + "code": "654226", + "pinyin": "HeBuKeSaiErMengGuZiZhiXian", + "pinyinFirst": "HBKSEMGZZX", + "capital": "和布克赛尔镇", + "population": 5, + "area": 28784, + "areaCode": "0990", + "zipCode": "834400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732268613, + "parentId": 653116729069637, + "name": "阿勒泰地区", + "shortName": null, + "level": 2, + "code": "654300", + "pinyin": "ALeTaiDiQu", + "pinyinFirst": "ALTDQ", + "capital": "阿勒泰市", + "population": 66, + "area": 117078, + "areaCode": "0906", + "zipCode": "836500", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116732272709, + "parentId": 653116732268613, + "name": "阿勒泰市", + "shortName": null, + "level": 3, + "code": "654301", + "pinyin": "ALeTaiShi", + "pinyinFirst": "ALTS", + "capital": "金山路街道", + "population": 23, + "area": 10819, + "areaCode": "0906", + "zipCode": "836500", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732272710, + "parentId": 653116732268613, + "name": "布尔津县", + "shortName": null, + "level": 3, + "code": "654321", + "pinyin": "BuErJinXian", + "pinyinFirst": "BEJX", + "capital": "布尔津镇", + "population": 7, + "area": 10369, + "areaCode": "0906", + "zipCode": "836600", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732272711, + "parentId": 653116732268613, + "name": "富蕴县", + "shortName": null, + "level": 3, + "code": "654322", + "pinyin": "FuYunXian", + "pinyinFirst": "FYX", + "capital": "库额尔齐斯镇", + "population": 10, + "area": 32327, + "areaCode": "0906", + "zipCode": "836100", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732272712, + "parentId": 653116732268613, + "name": "福海县", + "shortName": null, + "level": 3, + "code": "654323", + "pinyin": "FuHaiXian", + "pinyinFirst": "FHX", + "capital": "福海镇", + "population": 7, + "area": 32442, + "areaCode": "0906", + "zipCode": "836400", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732272713, + "parentId": 653116732268613, + "name": "哈巴河县", + "shortName": null, + "level": 3, + "code": "654324", + "pinyin": "HaBaHeXian", + "pinyinFirst": "HBHX", + "capital": "阿克齐镇", + "population": 8, + "area": 8186, + "areaCode": "0906", + "zipCode": "836700", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732272714, + "parentId": 653116732268613, + "name": "青河县", + "shortName": null, + "level": 3, + "code": "654325", + "pinyin": "QingHeXian", + "pinyinFirst": "QHX", + "capital": "青河镇", + "population": 6, + "area": 15790, + "areaCode": "0906", + "zipCode": "836200", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732272715, + "parentId": 653116732268613, + "name": "吉木乃县", + "shortName": null, + "level": 3, + "code": "654326", + "pinyin": "JiMuNaiXian", + "pinyinFirst": "JMNX", + "capital": "托普铁热克镇", + "population": 4, + "area": 7145, + "areaCode": "0906", + "zipCode": "836800", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732534853, + "parentId": 653116729069637, + "name": "自治区直辖县级行政单位", + "shortName": null, + "level": 2, + "code": "653116732534853", + "pinyin": "ZiZhiQuZhiXiaXianJiXingZhengDanWei", + "pinyinFirst": "ZZQZXXJXZDW", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116732534854, + "parentId": 653116732534853, + "name": "石河子市", + "shortName": null, + "level": 3, + "code": "659001", + "pinyin": "ShiHeZiShi", + "pinyinFirst": "SHZS", + "capital": "红山街道", + "population": 59, + "area": 457, + "areaCode": "0993", + "zipCode": "832000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732534855, + "parentId": 653116732534853, + "name": "阿拉尔市", + "shortName": null, + "level": 3, + "code": "659002", + "pinyin": "ALaErShi", + "pinyinFirst": "ALES", + "capital": "金银川路街道", + "population": 19, + "area": 5266, + "areaCode": "0997", + "zipCode": "843300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732534856, + "parentId": 653116732534853, + "name": "图木舒克市", + "shortName": null, + "level": 3, + "code": "659003", + "pinyin": "TuMuShuKeShi", + "pinyinFirst": "TMSKS", + "capital": "齐干却勒街道", + "population": 17, + "area": 2003, + "areaCode": "0998", + "zipCode": "843806", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732534857, + "parentId": 653116732534853, + "name": "五家渠市", + "shortName": null, + "level": 3, + "code": "659004", + "pinyin": "WuJiaQuShi", + "pinyinFirst": "WJQS", + "capital": "人民路街道", + "population": 10, + "area": 742, + "areaCode": "0994", + "zipCode": "831300", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732534858, + "parentId": 653116732534853, + "name": "北屯市", + "shortName": null, + "level": 3, + "code": "659005", + "pinyin": "BeiTunShi", + "pinyinFirst": "BTS", + "capital": "北屯镇", + "population": 8, + "area": 911, + "areaCode": "0906", + "zipCode": "836000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732534859, + "parentId": 653116732534853, + "name": "铁门关市", + "shortName": null, + "level": 3, + "code": "659006", + "pinyin": "TieMenGuanShi", + "pinyinFirst": "TMGS", + "capital": "兴疆路", + "population": 8, + "area": 1952, + "areaCode": "0906", + "zipCode": "841007", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732534860, + "parentId": 653116732534853, + "name": "双河市", + "shortName": null, + "level": 3, + "code": "659007", + "pinyin": "ShuangHeShi", + "pinyinFirst": "SHS", + "capital": "红星二路", + "population": 5, + "area": 742, + "areaCode": "0909", + "zipCode": "833408", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732534861, + "parentId": 653116732534853, + "name": "可克达拉市", + "shortName": null, + "level": 3, + "code": "659008", + "pinyin": "KeKeDaLaShi", + "pinyinFirst": "KKDLS", + "capital": "幸福路", + "population": 8, + "area": 980, + "areaCode": "0999", + "zipCode": "835000", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732534862, + "parentId": 653116732534853, + "name": "昆玉市", + "shortName": null, + "level": 3, + "code": "659009", + "pinyin": "KunYuShi", + "pinyinFirst": "KYS", + "capital": "昆玉大道", + "population": 5, + "area": 1008, + "areaCode": "0903", + "zipCode": "848116", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732534863, + "parentId": 653116732534853, + "name": "胡杨河市", + "shortName": null, + "level": 3, + "code": "659010", + "pinyin": "HuYangHeShi", + "pinyinFirst": "HYHS", + "capital": "光明东路", + "population": 8, + "area": 678, + "areaCode": "0992", + "zipCode": "834034", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732534864, + "parentId": 653116732534853, + "name": "新星市", + "shortName": null, + "level": 3, + "code": "659011", + "pinyin": "XinXingShi", + "pinyinFirst": "XXS", + "capital": "兰新东路", + "population": 4, + "area": 539, + "areaCode": "0902", + "zipCode": "839103", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732534865, + "parentId": 653116732534853, + "name": "白杨市", + "shortName": null, + "level": 3, + "code": "659012", + "pinyin": "BaiYangShi", + "pinyinFirst": "BYS", + "capital": "光明路", + "population": 8, + "area": 2034, + "areaCode": "0901", + "zipCode": "834601", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:48", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:22" + }, + { + "id": 653116732846149, + "parentId": 0, + "name": "香港特别行政区", + "shortName": "港", + "level": 1, + "code": "810000", + "pinyin": "XiangGangTeBieXingZhengQu", + "pinyinFirst": "XGTBXZQ", + "capital": null, + "population": null, + "area": null, + "areaCode": "00852", + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116733960261, + "parentId": 653116732846149, + "name": "香港特别行政区", + "shortName": null, + "level": 2, + "code": "810000", + "pinyin": "XiangGangTeBieXingZhengQu", + "pinyinFirst": "XGTBXZQ", + "capital": null, + "population": null, + "area": null, + "areaCode": "00852", + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116733960262, + "parentId": 653116733960261, + "name": "中西区", + "shortName": null, + "level": 3, + "code": "653116733960262", + "pinyin": "ZhongXiQu", + "pinyinFirst": "ZXQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960263, + "parentId": 653116733960261, + "name": "东区", + "shortName": null, + "level": 3, + "code": "653116733960263", + "pinyin": "DongQu", + "pinyinFirst": "DQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960264, + "parentId": 653116733960261, + "name": "九龙城区", + "shortName": null, + "level": 3, + "code": "653116733960264", + "pinyin": "JiuLongChengQu", + "pinyinFirst": "JLCQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960265, + "parentId": 653116733960261, + "name": "观塘区", + "shortName": null, + "level": 3, + "code": "653116733960265", + "pinyin": "GuanTangQu", + "pinyinFirst": "GTQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960266, + "parentId": 653116733960261, + "name": "南区", + "shortName": null, + "level": 3, + "code": "653116733960266", + "pinyin": "NanQu", + "pinyinFirst": "NQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960267, + "parentId": 653116733960261, + "name": "深水埗区", + "shortName": null, + "level": 3, + "code": "653116733960267", + "pinyin": "ShenShuiBuQu", + "pinyinFirst": "SSBQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960268, + "parentId": 653116733960261, + "name": "湾仔区", + "shortName": null, + "level": 3, + "code": "653116733960268", + "pinyin": "WanZaiQu", + "pinyinFirst": "WZQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960269, + "parentId": 653116733960261, + "name": "黄大仙区", + "shortName": null, + "level": 3, + "code": "653116733960269", + "pinyin": "HuangDaXianQu", + "pinyinFirst": "HDXQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960270, + "parentId": 653116733960261, + "name": "油尖旺区", + "shortName": null, + "level": 3, + "code": "653116733960270", + "pinyin": "YouJianWangQu", + "pinyinFirst": "YJWQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960271, + "parentId": 653116733960261, + "name": "离岛区", + "shortName": null, + "level": 3, + "code": "653116733960271", + "pinyin": "LiDaoQu", + "pinyinFirst": "LDQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960272, + "parentId": 653116733960261, + "name": "葵青区", + "shortName": null, + "level": 3, + "code": "653116733960272", + "pinyin": "KuiQingQu", + "pinyinFirst": "KQQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960273, + "parentId": 653116733960261, + "name": "北区", + "shortName": null, + "level": 3, + "code": "653116733960273", + "pinyin": "BeiQu", + "pinyinFirst": "BQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960274, + "parentId": 653116733960261, + "name": "西贡区", + "shortName": null, + "level": 3, + "code": "653116733960274", + "pinyin": "XiGongQu", + "pinyinFirst": "XGQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960275, + "parentId": 653116733960261, + "name": "沙田区", + "shortName": null, + "level": 3, + "code": "653116733960275", + "pinyin": "ShaTianQu", + "pinyinFirst": "STQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960276, + "parentId": 653116733960261, + "name": "屯门区", + "shortName": null, + "level": 3, + "code": "653116733960276", + "pinyin": "TunMenQu", + "pinyinFirst": "TMQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960277, + "parentId": 653116733960261, + "name": "大埔区", + "shortName": null, + "level": 3, + "code": "653116733960277", + "pinyin": "DaPuQu", + "pinyinFirst": "DPQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960278, + "parentId": 653116733960261, + "name": "荃湾区", + "shortName": null, + "level": 3, + "code": "653116733960278", + "pinyin": "QuanWanQu", + "pinyinFirst": "QWQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 653116733960279, + "parentId": 653116733960261, + "name": "元朗区", + "shortName": null, + "level": 3, + "code": "653116733960279", + "pinyin": "YuanLangQu", + "pinyinFirst": "YLQ", + "capital": "", + "population": null, + "area": null, + "areaCode": "", + "zipCode": "", + "sort": null, + "hot": false, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:23" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:23" + }, + { + "id": 653116734091333, + "parentId": 0, + "name": "澳门特别行政区", + "shortName": "澳", + "level": 1, + "code": "820000", + "pinyin": "AoMenTeBieXingZhengQu", + "pinyinFirst": "AMTBXZQ", + "capital": null, + "population": null, + "area": null, + "areaCode": "00853", + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [ + { + "id": 653116735176773, + "parentId": 653116734091333, + "name": "澳门特别行政区", + "shortName": null, + "level": 2, + "code": "820000", + "pinyin": "AoMenTeBieXingZhengQu", + "pinyinFirst": "AMTBXZQ", + "capital": null, + "population": null, + "area": null, + "areaCode": "00853", + "zipCode": null, + "sort": null, + "hot": false, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:23" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-10T22:38:49", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-06-04T10:14:23" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_role.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_role.json new file mode 100644 index 0000000..ee42067 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_role.json @@ -0,0 +1,65 @@ +[ + { + "id": 162605510979653, + "parentId": 336557578817605, + "childs": null, + "name": "普通员工", + "code": "emp", + "type": 2, + "dataScope": 4, + "description": "", + "hidden": false, + "sort": 2, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2023-06-13T16:28:58" + }, + { + "id": 336557578817605, + "parentId": 0, + "childs": null, + "name": "岗位", + "code": null, + "type": 1, + "dataScope": 1, + "description": null, + "hidden": false, + "sort": 3, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 564647954321477, + "parentId": 336557578817605, + "childs": null, + "name": "超级管理员", + "code": null, + "type": 2, + "dataScope": 1, + "description": null, + "hidden": false, + "sort": 1, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-07-03T22:58:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-07-03T22:58:42" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_role.tenant.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_role.tenant.json new file mode 100644 index 0000000..5bc9496 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_role.tenant.json @@ -0,0 +1,68 @@ +[ + { + "id": 162605510979653, + "tenantId": 161223412138053, + "parentId": 336557578817605, + "childs": null, + "name": "普通员工", + "code": "emp", + "type": 2, + "dataScope": 4, + "description": "", + "hidden": false, + "sort": 2, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2023-06-13T16:28:58" + }, + { + "id": 336557578817605, + "tenantId": 161223412138053, + "parentId": 0, + "childs": null, + "name": "岗位", + "code": null, + "type": 1, + "dataScope": 1, + "description": null, + "hidden": false, + "sort": 3, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 564647954321477, + "tenantId": 161223412138053, + "parentId": 336557578817605, + "childs": null, + "name": "超级管理员", + "code": null, + "type": 2, + "dataScope": 1, + "description": null, + "hidden": false, + "sort": 1, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-07-03T22:58:26", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-07-03T22:58:42" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_role_permission.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_role_permission.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_role_permission.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_tenant.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_tenant.json new file mode 100644 index 0000000..b62ad5a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_tenant.json @@ -0,0 +1,23 @@ +[ + { + "id": 161223412138053, + "userId": 161223411986501, + "orgId": 189097691009093, + "tenantType": 1, + "domain": null, + "dbKey": "masterdb", + "dbType": null, + "connectionString": "", + "enabled": true, + "description": "", + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user.json new file mode 100644 index 0000000..e86b563 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user.json @@ -0,0 +1,32 @@ +[ + { + "id": 161223411986501, + "userName": "admin", + "password": "E120EA280AA50693D5568D0071456460", + "passwordEncryptType": 0, + "name": "管理员", + "mobile": "13122223333", + "email": "xiaoxue@zhontai.com", + "orgId": 189097691009093, + "managerUserId": null, + "nickName": "小雪转中雪", + "avatar": null, + "status": null, + "type": 100, + "lastLoginTime": null, + "lastLoginIP": null, + "lastLoginCountry": null, + "lastLoginProvince": null, + "lastLoginCity": null, + "enabled": true, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2023-06-13T16:27:00" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user.tenant.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user.tenant.json new file mode 100644 index 0000000..580d105 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user.tenant.json @@ -0,0 +1,33 @@ +[ + { + "id": 161223411986501, + "tenantId": 161223412138053, + "userName": "admin", + "password": "E120EA280AA50693D5568D0071456460", + "passwordEncryptType": 0, + "name": "管理员", + "mobile": "13122223333", + "email": "xiaoxue@zhontai.com", + "orgId": 189097691009093, + "managerUserId": null, + "nickName": "小雪转中雪", + "avatar": null, + "status": null, + "type": 100, + "lastLoginTime": null, + "lastLoginIP": null, + "lastLoginCountry": null, + "lastLoginProvince": null, + "lastLoginCity": null, + "enabled": true, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2023-06-13T16:27:00" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user_org.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user_org.json new file mode 100644 index 0000000..cfe9364 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user_org.json @@ -0,0 +1,16 @@ +[ + { + "id": 371677390377029, + "userId": 161223411986501, + "orgId": 189097691009093, + "isManager": true, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2023-06-13T16:27:11" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user_role.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user_role.json new file mode 100644 index 0000000..f29383c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user_role.json @@ -0,0 +1,20 @@ +[ + { + "id": 510322210627653, + "userId": 161223411986501, + "roleId": 161223412080709, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-02-01T10:46:24" + }, + { + "id": 564648041144389, + "userId": 161223411986501, + "roleId": 564647954321477, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-07-03T22:58:47" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user_staff.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user_staff.json new file mode 100644 index 0000000..d8372c8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user_staff.json @@ -0,0 +1,20 @@ +[ + { + "id": 161223411986501, + "position": null, + "jobNumber": null, + "sex": null, + "entryTime": null, + "workWeChatCard": null, + "introduce": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user_staff.tenant.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user_staff.tenant.json new file mode 100644 index 0000000..0802253 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_user_staff.tenant.json @@ -0,0 +1,21 @@ +[ + { + "id": 161223411986501, + "tenantId": 161223412138053, + "position": null, + "jobNumber": null, + "sex": null, + "entryTime": null, + "workWeChatCard": null, + "introduce": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_view.json b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_view.json new file mode 100644 index 0000000..3b807b8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/InitData/Admin/base_view.json @@ -0,0 +1,645 @@ +[ + { + "id": 161227168313413, + "platform": null, + "parentId": 0, + "name": null, + "label": "平台管理", + "path": null, + "description": null, + "cache": true, + "sort": 1, + "enabled": true, + "childs": [ + { + "id": 161227168428101, + "platform": null, + "parentId": 161227168313413, + "name": "admin/workbench", + "label": "工作台", + "path": "admin/workbench/index", + "description": null, + "cache": true, + "sort": 1, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-04-08T20:04:01" + }, + { + "id": 161227168432197, + "platform": null, + "parentId": 161227168313413, + "name": null, + "label": "系统管理", + "path": null, + "description": null, + "cache": true, + "sort": 3, + "enabled": true, + "childs": [ + { + "id": 161227168440390, + "platform": null, + "parentId": 161227168432197, + "name": "admin/api", + "label": "接口管理", + "path": "admin/api/index", + "description": null, + "cache": true, + "sort": 4, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168444485, + "platform": null, + "parentId": 161227168432197, + "name": "admin/view", + "label": "视图管理", + "path": "admin/view/index", + "description": null, + "cache": true, + "sort": 5, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168448582, + "platform": null, + "parentId": 161227168432197, + "name": "admin/cache", + "label": "缓存管理", + "path": "admin/cache/index", + "description": null, + "cache": true, + "sort": 3, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168456774, + "platform": null, + "parentId": 161227168432197, + "name": "admin/document", + "label": "文档管理", + "path": "admin/document/index", + "description": null, + "cache": true, + "sort": 7, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 187053736300613, + "platform": null, + "parentId": 161227168432197, + "name": "admin/dict", + "label": "数据字典", + "path": "admin/dict/index", + "description": "数据字典", + "cache": true, + "sort": 1, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 336556164300869, + "platform": null, + "parentId": 161227168432197, + "name": "admin/task", + "label": "任务调度", + "path": "admin/task/index", + "description": "", + "cache": true, + "sort": 2, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 371247502852165, + "platform": null, + "parentId": 161227168432197, + "name": "admin/file", + "label": "文件管理", + "path": "admin/file/index", + "description": null, + "cache": true, + "sort": 6, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 541192324943941, + "platform": null, + "parentId": 161227168432197, + "name": "admin/region", + "label": "地区管理", + "path": "admin/region/index", + "description": null, + "cache": true, + "sort": 8, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-04-28T16:17:14", + "modifiedUserId": null, + "modifiedUserName": null, + "modifiedUserRealName": null, + "modifiedTime": null + }, + { + "id": 616549084737605, + "platform": null, + "parentId": 161227168432197, + "name": "admin/msg", + "label": "消息管理", + "path": "admin/msg/index", + "description": "", + "cache": true, + "sort": 10, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-11-27T14:44:40", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-03-18T15:04:18" + }, + { + "id": 618670689706053, + "platform": null, + "parentId": 161227168432197, + "name": "admin/msg-type", + "label": "消息分类", + "path": "admin/msg-type/index", + "description": "", + "cache": true, + "sort": 9, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-03T14:37:30", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-03-18T15:08:43" + }, + { + "id": 655836164862021, + "platform": null, + "parentId": 161227168432197, + "name": "admin/print-template", + "label": "打印模板", + "path": "admin/print-template/index", + "description": "", + "cache": true, + "sort": 11, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2025-03-18T15:04:12", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2025-03-18T15:09:01" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168436293, + "platform": null, + "parentId": 161227168313413, + "name": "admin/personal", + "label": "个人中心", + "path": "admin/personal/index", + "description": null, + "cache": true, + "sort": 5, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168436294, + "platform": null, + "parentId": 161227168313413, + "name": null, + "label": "权限管理", + "path": null, + "description": "", + "cache": true, + "sort": 2, + "enabled": true, + "childs": [ + { + "id": 161227168436295, + "platform": null, + "parentId": 161227168436294, + "name": "admin/user", + "label": "用户管理", + "path": "admin/user/index", + "description": "", + "cache": true, + "sort": 1, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168440389, + "platform": null, + "parentId": 161227168436294, + "name": "admin/role", + "label": "角色管理", + "path": "admin/role/index", + "description": "", + "cache": true, + "sort": 2, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168444486, + "platform": null, + "parentId": 161227168436294, + "name": "admin/permission", + "label": "权限管理", + "path": "admin/permission/index", + "description": null, + "cache": true, + "sort": 4, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168448583, + "platform": null, + "parentId": 161227168436294, + "name": "admin/tenant", + "label": "租户管理", + "path": "admin/tenant/index", + "description": null, + "cache": true, + "sort": 5, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 174312361087045, + "platform": null, + "parentId": 161227168436294, + "name": "admin/org", + "label": "部门管理", + "path": "admin/org/index", + "description": "", + "cache": true, + "sort": 3, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 402829224460357, + "platform": null, + "parentId": 161227168436294, + "name": "admin/pkg", + "label": "套餐管理", + "path": "admin/pkg/index", + "description": null, + "cache": true, + "sort": 6, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168452677, + "platform": null, + "parentId": 161227168313413, + "name": null, + "label": "日志管理", + "path": null, + "description": "", + "cache": true, + "sort": 4, + "enabled": true, + "childs": [ + { + "id": 161227168452678, + "platform": null, + "parentId": 161227168452677, + "name": "admin/operationLog", + "label": "操作日志", + "path": "admin/logs/operation-log", + "description": null, + "cache": true, + "sort": 2, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 161227168456773, + "platform": null, + "parentId": 161227168452677, + "name": "admin/loginLog", + "label": "登录日志", + "path": "admin/logs/login-log", + "description": null, + "cache": true, + "sort": 1, + "enabled": true, + "childs": null, + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 619301345665093, + "platform": null, + "parentId": 161227168313413, + "name": "admin/site-msg", + "label": "站内信", + "path": "admin/site-msg/index", + "description": "", + "cache": true, + "sort": 6, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2024-12-05T09:23:38", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-12-05T09:23:53" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 361047466754117, + "platform": null, + "parentId": 0, + "name": "", + "label": "布局管理", + "path": null, + "description": null, + "cache": true, + "sort": 2, + "enabled": true, + "childs": [ + { + "id": 361047593013317, + "platform": null, + "parentId": 361047466754117, + "name": "link", + "label": "链接", + "path": "layout/routerView/link", + "description": null, + "cache": true, + "sort": 1, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + }, + { + "id": 361047841796165, + "platform": null, + "parentId": 361047466754117, + "name": "iframe", + "label": "内嵌窗口", + "path": "layout/routerView/iframes", + "description": null, + "cache": true, + "sort": 2, + "enabled": true, + "childs": [], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } + ], + "isDeleted": false, + "createdUserId": 161223411986501, + "createdUserName": "admin", + "createdUserRealName": "管理员", + "createdTime": "2023-06-13T16:23:05", + "modifiedUserId": 161223411986501, + "modifiedUserName": "admin", + "modifiedUserRealName": "管理员", + "modifiedTime": "2024-01-31T18:09:02" + } +] \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/Program.cs b/src/modules/admin/ZhonTai.Admin.Host/Program.cs new file mode 100644 index 0000000..b4377d9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/Program.cs @@ -0,0 +1,171 @@ +using Autofac; +using FreeScheduler; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using System; +using System.Reflection; +using Savorboard.CAP.InMemoryMessageQueue; +using ZhonTai.Admin.Core; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Db; +using ZhonTai.Admin.Core.Startup; +using ZhonTai.Admin.Services.TaskScheduler; +using ZhonTai.Admin.Tools.TaskScheduler; +using ZhonTai.ApiUI; +using ZhonTai.Common.Helpers; +using ZhonTai.Admin.Repositories; +using Microsoft.AspNetCore.StaticFiles; + +new HostApp(new HostAppOptions +{ + //前置配置FreeSql + ConfigurePreFreeSql = (freeSql, dbConfig) => + { + freeSql.UseJsonMap(); //启用JsonMap功能 + }, + + //配置FreeSql + ConfigureFreeSql = (freeSql, dbConfig) => + { + if (dbConfig.Key == DbKeys.TaskDb) + { + freeSql.SyncSchedulerStructure(dbConfig, TaskSchedulerServiceExtensions.ConfigureScheduler); + } + }, + + ConfigurePreServices = context => + { + context.Services.Configure(context.Configuration.GetSection("TaskScheduler")); + }, + + //配置后置服务 + ConfigurePostServices = context => + { + //context.Services.AddTiDb(context); + + //添加cap事件总线 + var appConfig = AppInfo.GetRequiredService(false); + Assembly[] assemblies = AssemblyHelper.GetAssemblyList(appConfig.AssemblyNames); + + //var dbConfig = AppInfo.GetRequiredService(false); + //var rabbitMQ = context.Configuration.GetSection("CAP:RabbitMq").Get(); + context.Services.AddCap(config => + { + //开发阶段不同开发人员的消息区分,可以通过配置版本号实现 + config.Version = "v1"; + + config.UseInMemoryStorage(); + config.UseInMemoryMessageQueue(); + + // + // + + //config.UseMySql(dbConfig.ConnectionString); + //config.UseRabbitMQ(mqConfig => { + // mqConfig.HostName = rabbitMQ.HostName; + // mqConfig.Port = rabbitMQ.Port; + // mqConfig.UserName = rabbitMQ.UserName; + // mqConfig.Password = rabbitMQ.Password; + // mqConfig.ExchangeName = rabbitMQ.ExchangeName; + //}); + config.UseDashboard(); + }).AddSubscriberAssembly(assemblies); + + //添加任务调度 + context.Services.AddTaskScheduler(DbKeys.TaskDb, options => + { + options.ConfigureFreeSql = TaskSchedulerServiceExtensions.ConfigureScheduler; + + //配置任务调度 + options.ConfigureFreeSchedulerBuilder = freeSchedulerBuilder => + { + static void OnExecuting(TaskInfo task) + { + if (task.Topic?.StartsWith("[shell]") == true) + { + TaskSchedulerServiceExtensions.ExecuteGrpc(task); + } + } + + freeSchedulerBuilder + .OnExecuting(task => OnExecuting(task)) + .OnExecuted((task, taskLog) => + { + try + { + if (!taskLog.Success) + { + var taskService = AppInfo.GetRequiredService(); + var taskInfo = taskService.GetAsync(task.Id).Result; + + //失败重试 + TaskSchedulerServiceExtensions.FailedRetry(taskInfo, task, taskLog, OnExecuting); + + //发送告警邮件 + TaskSchedulerServiceExtensions.SendAlarmEmail(taskInfo, task, taskLog); + } + } + catch (Exception ex) + { + AppInfo.Log.Error(ex); + } + }); + }; + }); + }, + + //配置Autofac容器 + ConfigureAutofacContainer = (builder, context) => + { + builder.RegisterGeneric(typeof(AdminRepositoryBase<>)).InstancePerLifetimeScope().PropertiesAutowired(); + }, + + //配置Mvc + ConfigureMvcBuilder = (builder, context) => { }, + + //配置后置中间件 + ConfigurePostMiddleware = context => + { + var app = context.App; + var env = app.Environment; + var appConfig = app.Services.GetService(); + + // 配置静态文件的MIME类型 + var provider = new FileExtensionContentTypeProvider(); + provider.Mappings[".rdp"] = "application/x-rdp"; + app.UseStaticFiles(new StaticFileOptions + { + ContentTypeProvider = provider + }); + + #region 新版Api文档 + + if (env.IsDevelopment() || appConfig.ApiUI.Enable) + { + app.UseApiUI(options => + { + options.RoutePrefix = appConfig.ApiUI.RoutePrefix; + appConfig.Swagger.Projects?.ForEach(project => + { + options.SwaggerEndpoint($"/{options.RoutePrefix}/swagger/{project.Code.ToLower()}/swagger.json", + project.Name); + }); + }); + } + + #endregion + }, + + ConfigureSwaggerUI = options => + { + //options.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.Full); + } +}).Run(args, typeof(Program).Assembly); + +#if DEBUG +public partial class Program +{ +} +#endif \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/Properties/launchSettings.json b/src/modules/admin/ZhonTai.Admin.Host/Properties/launchSettings.json new file mode 100644 index 0000000..ed7eccd --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:18010", + "sslPort": 0 + } + }, + "profiles": { + "ZhonTai.Admin.Host": { + "commandName": "Project", + "launchBrowser": true, + "dotnetRunMessages": true, + "launchUrl": "doc/admin", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "http://localhost:18010" + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "doc/admin", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/SAML配置说明.md b/src/modules/admin/ZhonTai.Admin.Host/SAML配置说明.md new file mode 100644 index 0000000..25d5631 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/SAML配置说明.md @@ -0,0 +1,152 @@ +# SAML集成配置说明 + +## 概述 + +本系统支持SAML 2.0单点登录集成,可以与Azure AD、Okta、ADFS等身份提供商进行集成。 + +## 配置步骤 + +### 1. 启用SAML认证 + +在 `ConfigCenter/samlconfig.json` 中设置: + +```json +{ + "SamlConfig": { + "enable": true, + "entityId": "https://your-app-domain.com", + "assertionConsumerServiceUrl": "https://your-app-domain.com/api/admin/auth/saml/callback", + "singleSignOnServiceUrl": "https://login.microsoftonline.com/your-tenant-id/saml2/", + "idpCertificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----" + } +} +``` + +### 2. 身份提供商配置 + +#### Azure AD配置 + +1. 在Azure AD中创建企业应用程序 +2. 配置SAML设置: + - 标识符(实体ID): `https://your-app-domain.com` + - 回复URL: `https://your-app-domain.com/api/admin/auth/saml/callback` + - 注销URL: `https://your-app-domain.com/api/admin/auth/logout` + +3. 下载证书并配置到 `idpCertificate` + +#### Okta配置 + +1. 在Okta中创建SAML应用程序 +2. 配置: + - Single sign on URL: `https://your-app-domain.com/api/admin/auth/saml/callback` + - Audience URI: `https://your-app-domain.com` + - Name ID format: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress` + +### 3. 属性映射配置 + +```json +{ + "userNameAttribute": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", + "emailAttribute": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", + "nameAttribute": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname" +} +``` + +### 4. 用户自动创建配置 + +```json +{ + "autoCreateUser": true, + "defaultUserType": 1, + "defaultTenantId": 1 +} +``` + +## API接口 + +### 1. 获取SAML登录URL + +``` +GET /api/admin/auth/login-by-saml +``` + +### 2. SAML回调处理 + +``` +POST /api/admin/auth/saml-callback +Content-Type: application/x-www-form-urlencoded + +SAMLResponse=... +``` + +### 3. 获取SAML元数据 + +``` +GET /api/admin/auth/saml/metadata +``` + +## 使用流程 + +1. 用户访问系统 +2. 系统检查SAML配置 +3. 如果启用SAML,重定向到身份提供商 +4. 用户在身份提供商处完成认证 +5. 身份提供商回调到系统的SAML回调接口 +6. 系统验证SAML响应并创建/查找用户 +7. 生成JWT Token并返回给用户 + +## 安全注意事项 + +1. 确保使用HTTPS +2. 正确配置身份提供商证书 +3. 验证SAML响应的签名 +4. 设置合适的Token过期时间 +5. 定期更新证书 + +## 故障排除 + +### 常见问题 + +1. **SAML响应验证失败** + - 检查身份提供商证书是否正确 + - 确认时间同步 + +2. **用户创建失败** + - 检查数据库连接 + - 确认用户表结构 + +3. **属性映射错误** + - 检查SAML响应中的属性名 + - 确认配置中的属性映射 + +### 日志查看 + +查看应用程序日志以获取详细的错误信息: + +```bash +tail -f logs/app.log +``` + +## 示例配置 + +### Azure AD完整配置示例 + +```json +{ + "SamlConfig": { + "enable": true, + "entityId": "https://your-app-domain.com", + "assertionConsumerServiceUrl": "https://your-app-domain.com/api/admin/auth/saml/callback", + "singleSignOnServiceUrl": "https://login.microsoftonline.com/your-tenant-id/saml2/", + "singleLogoutServiceUrl": "https://login.microsoftonline.com/your-tenant-id/saml2/", + "idpCertificate": "-----BEGIN CERTIFICATE-----\nMIIDXTCCAkWgAwIBAgIJAKoK/OvJ8V...\n-----END CERTIFICATE-----", + "forceSaml": false, + "userNameAttribute": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", + "emailAttribute": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", + "nameAttribute": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname", + "autoCreateUser": true, + "defaultUserType": 1, + "defaultTenantId": 1 + } +} +``` \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/Vue-SAML集成说明.md b/src/modules/admin/ZhonTai.Admin.Host/Vue-SAML集成说明.md new file mode 100644 index 0000000..dd5f6d7 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/Vue-SAML集成说明.md @@ -0,0 +1,443 @@ +# Vue SAML集成说明 + +## 概述 + +本文档说明如何在Vue项目中集成SAML单点登录功能。 + +## 组件说明 + +### 1. SamlLogin 组件 + +SAML登录组件,支持传统登录和SAML登录两种方式。 + +#### 属性 (Props) + +| 属性名 | 类型 | 默认值 | 说明 | +|--------|------|--------|------| +| title | String | '系统登录' | 登录页面标题 | +| subtitle | String | '请选择登录方式' | 登录页面副标题 | +| showTraditionalLogin | Boolean | true | 是否显示传统登录表单 | +| samlButtonText | String | '使用企业账号登录' | SAML登录按钮文本 | +| apiBaseUrl | String | '/api/admin/auth' | API基础URL | +| onLoginSuccess | Function | null | 登录成功回调函数 | + +#### 事件 (Events) + +| 事件名 | 参数 | 说明 | +|--------|------|------| +| login-success | tokenInfo | 登录成功时触发 | +| login-error | error | 登录失败时触发 | + +#### 使用示例 + +```vue + + + +``` + +### 2. SamlCallback 组件 + +SAML回调处理组件,用于处理身份提供商回调。 + +#### 属性 (Props) + +| 属性名 | 类型 | 默认值 | 说明 | +|--------|------|--------|------| +| apiBaseUrl | String | '/api/admin/auth' | API基础URL | +| successRedirectUrl | String | '/' | 登录成功后的跳转URL | +| errorRedirectUrl | String | '/login' | 登录失败后的跳转URL | +| loadingText | String | '正在处理登录信息...' | 加载文本 | +| loadingSubtext | String | '请稍候,正在验证您的身份' | 加载副文本 | + +#### 事件 (Events) + +| 事件名 | 参数 | 说明 | +|--------|------|------| +| login-success | tokenInfo | 登录成功时触发 | +| login-error | error | 登录失败时触发 | + +#### 使用示例 + +```vue + + + +``` + +## 路由配置 + +### 基本路由配置 + +```javascript +import { createRouter, createWebHistory } from 'vue-router' +import SamlLogin from './components/SamlLogin.vue' +import SamlCallback from './components/SamlCallback.vue' + +const routes = [ + { + path: '/', + name: 'Home', + component: () => import('./views/Home.vue'), + meta: { requiresAuth: true } + }, + { + path: '/login', + name: 'Login', + component: SamlLogin, + meta: { requiresAuth: false } + }, + { + path: '/saml-callback', + name: 'SamlCallback', + component: SamlCallback, + meta: { requiresAuth: false } + } +] + +const router = createRouter({ + history: createWebHistory(), + routes +}) + +export default router +``` + +### 路由守卫 + +```javascript +router.beforeEach((to, from, next) => { + const token = localStorage.getItem('access_token') + const requiresAuth = to.matched.some(record => record.meta.requiresAuth) + + if (requiresAuth && !token) { + // 需要认证但没有token,重定向到登录页 + next('/login') + } else if (to.path === '/login' && token) { + // 已登录用户访问登录页,重定向到首页 + next('/') + } else { + next() + } +}) +``` + +## 完整集成示例 + +### 1. 主应用组件 + +```vue + + + +``` + +### 2. 登录页面 + +```vue + + + +``` + +### 3. 受保护的页面 + +```vue + + + +``` + +## 依赖要求 + +### 必需依赖 + +```json +{ + "dependencies": { + "vue": "^3.0.0", + "vue-router": "^4.0.0", + "element-plus": "^2.0.0", + "axios": "^1.0.0" + } +} +``` + +### 安装命令 + +```bash +npm install vue-router@4 element-plus axios +``` + +## 样式定制 + +### 自定义主题色 + +```scss +// 在main.js中引入自定义样式 +import './styles/custom.scss' + +// custom.scss +:root { + --el-color-primary: #0078d4; + --el-color-primary-light-3: #106ebe; + --el-color-primary-light-5: #1e5aa8; + --el-color-primary-light-7: #2c4692; + --el-color-primary-light-9: #3a327c; + --el-color-primary-dark-2: #005a9e; +} +``` + +### 响应式设计 + +组件已内置响应式设计,支持移动端适配。如需进一步定制,可以修改组件的CSS样式。 + +## 错误处理 + +### 常见错误及解决方案 + +1. **CORS错误** + - 确保后端配置了正确的CORS策略 + - 检查API地址是否正确 + +2. **Token过期** + - 实现token自动刷新机制 + - 在axios拦截器中处理401错误 + +3. **SAML配置错误** + - 检查SAML配置文件 + - 确认身份提供商配置正确 + +### 错误处理示例 + +```javascript +// axios拦截器 +axios.interceptors.response.use( + response => response, + error => { + if (error.response?.status === 401) { + // Token过期,清除本地存储并跳转到登录页 + localStorage.removeItem('access_token') + localStorage.removeItem('refresh_token') + router.push('/login') + } + return Promise.reject(error) + } +) +``` + +## 最佳实践 + +1. **安全性** + - 使用HTTPS + - 定期刷新token + - 实现token过期处理 + +2. **用户体验** + - 提供加载状态提示 + - 友好的错误信息 + - 自动重试机制 + +3. **性能优化** + - 组件懒加载 + - 图片优化 + - 缓存策略 + +4. **可维护性** + - 统一的错误处理 + - 清晰的代码结构 + - 完善的文档 \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ZhonTai.Admin.Host.csproj b/src/modules/admin/ZhonTai.Admin.Host/ZhonTai.Admin.Host.csproj new file mode 100644 index 0000000..9cd1324 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/ZhonTai.Admin.Host.csproj @@ -0,0 +1,83 @@ + + + 中台接口宿主 + Linux + + + + + 1701;1702;1591 + + + + false + + + + + + + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + PreserveNewest + true + PreserveNewest + + + PreserveNewest + true + PreserveNewest + + + + + + PreserveNewest + + + + + diff --git a/src/modules/admin/ZhonTai.Admin.Host/appsettings.Development.json b/src/modules/admin/ZhonTai.Admin.Host/appsettings.Development.json new file mode 100644 index 0000000..061db15 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + //"Logging": { + // "LogLevel": { + // "Default": "Debug", + // "System": "Information", + // "Microsoft": "Information" + // } + //} +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/appsettings.json b/src/modules/admin/ZhonTai.Admin.Host/appsettings.json new file mode 100644 index 0000000..cd5f88f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/appsettings.json @@ -0,0 +1,143 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "Kestrel": { + "Endpoints": { + "Default": { + "Url": "http://*:18010" + }, + "Grpc": { + "Url": "http://*:18011", + "Protocols": "Http2" + } + } + }, + //远程配置 + "RpcConfig": { + "Http": { + "Enable": true, + "AssemblyNames": [ "ZhonTai.Admin.Contracts" ] + }, + "Grpc": { + "Enable": true, + "AssemblyNames": [ "ZhonTai.Admin.Core" ], + "ServerAssemblyNames": [ "ZhonTai.Admin" ] + } + }, + //应用配置 + "AppSettings": { + //使用配置中心 + "UseConfigCenter": true, + //配置中心路径 + "ConfigCenterPath": "ConfigCenter" + }, + //分布式事务 + "CAP": { + "RabbitMq": { + "HostName": "localhost", + "Port": 5672, + "UserName": "guest", + "Password": "guest" + } + }, + /* + //发送邮件验证码 + await AppInfo.GetRequiredService().PublishAsync(SubscribeNames.EmailSingleSend, + new EamilSingleSendEvent + { + ToEmail = new EamilSingleSendEvent.Models.EmailModel + { + Address = "" + }, + Subject = "中台Admin账号邮件验证码", + Body = code + }); + */ + //邮件配置 + "Email": { + //主机 + "Host": "smtp.qq.com", + //端口 465、587、25 + "Port": 465, + //是否使用SSL + "UseSsl": true, + //邮箱账号 + "UserName": "", + //邮箱密码 + "Password": "", + //发件人 + "FromEmail": { + //名称 + "Name": "", + //地址 + "Address": "" + }, + //收件人 + "ToEmail": { + //名称 + "Name": "", + //地址 + "Address": "" + } + }, + //任务调度配置 + "TaskScheduler": { + //进程启动信息 + "ProcessStartInfo": { + "FileName": "C:/grpcurl_1.8.7/grpcurl", + //工作目录 + "WorkingDirectory": "" + }, + //告警邮件 + "AlerEmail": { + "Enable": true, + "Address": "" + } + }, + //滑块验证码 + "SlideCaptcha": { + "ExpirySeconds": 300, // 缓存过期时长 + "StoreageKeyPrefix": "admin:captcha:", // 缓存前缀 + "Tolerant": 0.02, // 容错值(校验时用,缺口位置与实际滑动位置匹配容错范围) + "Backgrounds": [ // 背景图配置 + { + "Type": "file", + "Data": "wwwroot/captcha/jigsaw/backgrounds/1.jpg" + }, + { + "Type": "file", + "Data": "wwwroot/captcha/jigsaw/backgrounds/2.jpg" + }, + { + "Type": "file", + "Data": "wwwroot/captcha/jigsaw/backgrounds/3.jpg" + }, + { + "Type": "file", + "Data": "wwwroot/captcha/jigsaw/backgrounds/4.jpg" + }, + { + "Type": "file", + "Data": "wwwroot/captcha/jigsaw/backgrounds/5.jpg" + } + ], + // Templates不配置,则使用默认模板 + "Templates": [ + //{ + // "Slider": { + // "Type": "file", + // "Data": "wwwroot/captcha/jigsaw/templates/1/transparent.png" + // }, + // "Hole": { + // "Type": "file", + // "Data": "wwwroot/captcha/jigsaw/templates/1/dark.png" + // } + //} + ] + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/ip2region.xdb b/src/modules/admin/ZhonTai.Admin.Host/ip2region.xdb new file mode 100644 index 0000000..6528770 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/ip2region.xdb differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/nlog.config b/src/modules/admin/ZhonTai.Admin.Host/nlog.config new file mode 100644 index 0000000..586031d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/nlog.config @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO "ad_log"("Id", "Logged", "Level", "Message", "Logger", "Properties", "Callsite", "Exception") VALUES(@Id, @Logged, @Level, @Message, @Logger, @Properties, @Callsite, @Exception) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/1.jpg b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/1.jpg new file mode 100644 index 0000000..e73074b Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/1.jpg differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/2.jpg b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/2.jpg new file mode 100644 index 0000000..3d9d289 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/2.jpg differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/3.jpg b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/3.jpg new file mode 100644 index 0000000..6179524 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/3.jpg differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/4.jpg b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/4.jpg new file mode 100644 index 0000000..afca342 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/4.jpg differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/5.jpg b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/5.jpg new file mode 100644 index 0000000..2501748 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/backgrounds/5.jpg differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/1/dark.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/1/dark.png new file mode 100644 index 0000000..8684a67 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/1/dark.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/1/transparent.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/1/transparent.png new file mode 100644 index 0000000..9e568ed Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/1/transparent.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/2/dark.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/2/dark.png new file mode 100644 index 0000000..bcc08bd Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/2/dark.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/2/transparent.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/2/transparent.png new file mode 100644 index 0000000..e2fa625 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/2/transparent.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/3/dark.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/3/dark.png new file mode 100644 index 0000000..cb4ee59 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/3/dark.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/3/transparent.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/3/transparent.png new file mode 100644 index 0000000..aa14e19 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/3/transparent.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/4/dark.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/4/dark.png new file mode 100644 index 0000000..b939927 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/4/dark.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/4/transparent.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/4/transparent.png new file mode 100644 index 0000000..41192d5 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/4/transparent.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/5/dark.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/5/dark.png new file mode 100644 index 0000000..24df930 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/5/dark.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/5/transparent.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/5/transparent.png new file mode 100644 index 0000000..6edc2b9 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/5/transparent.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/6/dark.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/6/dark.png new file mode 100644 index 0000000..a83b364 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/6/dark.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/6/transparent.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/6/transparent.png new file mode 100644 index 0000000..32f5838 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/captcha/jigsaw/templates/6/transparent.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654a5d-9604-7b84-00a8-3100508e95d4.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654a5d-9604-7b84-00a8-3100508e95d4.png new file mode 100644 index 0000000..7f29f99 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654a5d-9604-7b84-00a8-3100508e95d4.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654c9e-9604-7b84-00a8-31013c61bdda.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654c9e-9604-7b84-00a8-31013c61bdda.png new file mode 100644 index 0000000..f4179dc Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654c9e-9604-7b84-00a8-31013c61bdda.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654ca3-9604-7b84-00a8-31025b1b9eed.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654ca3-9604-7b84-00a8-31025b1b9eed.png new file mode 100644 index 0000000..5c61631 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654ca3-9604-7b84-00a8-31025b1b9eed.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654d44-9604-7b84-00a8-31033fe8008e.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654d44-9604-7b84-00a8-31033fe8008e.png new file mode 100644 index 0000000..86c83e4 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654d44-9604-7b84-00a8-31033fe8008e.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654d48-9604-7b84-00a8-310432b13dda.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654d48-9604-7b84-00a8-310432b13dda.png new file mode 100644 index 0000000..7f29f99 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68654d48-9604-7b84-00a8-310432b13dda.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/6865511f-01cc-e24c-008b-415c62c0a3e0.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/6865511f-01cc-e24c-008b-415c62c0a3e0.png new file mode 100644 index 0000000..4dd6ff3 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/6865511f-01cc-e24c-008b-415c62c0a3e0.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/6865513a-01cc-e24c-008b-415d079396db.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/6865513a-01cc-e24c-008b-415d079396db.png new file mode 100644 index 0000000..7404e33 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/6865513a-01cc-e24c-008b-415d079396db.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/686552a1-43a1-6e5c-0044-f3ca2b47040d.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/686552a1-43a1-6e5c-0044-f3ca2b47040d.png new file mode 100644 index 0000000..86c83e4 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/686552a1-43a1-6e5c-0044-f3ca2b47040d.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/6865610b-e22e-3ce8-00a3-5ef01a40771b.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/6865610b-e22e-3ce8-00a3-5ef01a40771b.png new file mode 100644 index 0000000..f4179dc Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/6865610b-e22e-3ce8-00a3-5ef01a40771b.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68656260-e22e-3ce8-00a3-5ef16a9ecc8b.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68656260-e22e-3ce8-00a3-5ef16a9ecc8b.png new file mode 100644 index 0000000..86c83e4 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/68656260-e22e-3ce8-00a3-5ef16a9ecc8b.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/6865666e-e22e-3ce8-00a3-5ef246fb3c2b.png b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/6865666e-e22e-3ce8-00a3-5ef246fb3c2b.png new file mode 100644 index 0000000..dc499dd Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/feedback/6865666e-e22e-3ce8-00a3-5ef246fb3c2b.png differ diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/095bda76-6a4f-4739-b39c-4f6d6c2e239d.rdp b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/095bda76-6a4f-4739-b39c-4f6d6c2e239d.rdp new file mode 100644 index 0000000..06ad2a3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/095bda76-6a4f-4739-b39c-4f6d6c2e239d.rdp @@ -0,0 +1,38 @@ +screen mode id:i:2 +use multimon:i:0 +desktopwidth:i:1920 +desktopheight:i:1080 +session bpp:i:32 +winposstr:s:0,1,0,0,1920,1080 +compression:i:1 +keyboardhook:i:2 +audiocapturemode:i:0 +videoplaybackmode:i:1 +connection type:i:7 +networkautodetect:i:1 +bandwidthautodetect:i:1 +displayconnectionbar:i:1 +username:s:admin +domain:s:WUXIBIO +alternate shell:s: +shell working directory:s: +disable wallpaper:i:1 +disable full window drag:i:1 +disable menu anims:i:1 +disable themes:i:0 +disable cursor setting:i:0 +bitmapcachepersistenable:i:1 +full address:s:10.249.11.114 +audiomode:i:0 +redirectprinters:i:1 +redirectcomports:i:0 +redirectsmartcards:i:1 +redirectclipboard:i:1 +redirectposdevices:i:0 +autoreconnection enabled:i:1 +authentication level:i:2 +prompt for credentials:i:0 +negotiate security layer:i:1 +remoteapplicationmode:i:0 +alternate full address:s: +dynamic resolution:i:1 diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/220c3b3e-e117-49c5-b903-847d27117fa5.rdp b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/220c3b3e-e117-49c5-b903-847d27117fa5.rdp new file mode 100644 index 0000000..06ad2a3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/220c3b3e-e117-49c5-b903-847d27117fa5.rdp @@ -0,0 +1,38 @@ +screen mode id:i:2 +use multimon:i:0 +desktopwidth:i:1920 +desktopheight:i:1080 +session bpp:i:32 +winposstr:s:0,1,0,0,1920,1080 +compression:i:1 +keyboardhook:i:2 +audiocapturemode:i:0 +videoplaybackmode:i:1 +connection type:i:7 +networkautodetect:i:1 +bandwidthautodetect:i:1 +displayconnectionbar:i:1 +username:s:admin +domain:s:WUXIBIO +alternate shell:s: +shell working directory:s: +disable wallpaper:i:1 +disable full window drag:i:1 +disable menu anims:i:1 +disable themes:i:0 +disable cursor setting:i:0 +bitmapcachepersistenable:i:1 +full address:s:10.249.11.114 +audiomode:i:0 +redirectprinters:i:1 +redirectcomports:i:0 +redirectsmartcards:i:1 +redirectclipboard:i:1 +redirectposdevices:i:0 +autoreconnection enabled:i:1 +authentication level:i:2 +prompt for credentials:i:0 +negotiate security layer:i:1 +remoteapplicationmode:i:0 +alternate full address:s: +dynamic resolution:i:1 diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/7cbd36a7-04c8-4745-85c7-3a5fb00316e9.rdp b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/7cbd36a7-04c8-4745-85c7-3a5fb00316e9.rdp new file mode 100644 index 0000000..06ad2a3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/7cbd36a7-04c8-4745-85c7-3a5fb00316e9.rdp @@ -0,0 +1,38 @@ +screen mode id:i:2 +use multimon:i:0 +desktopwidth:i:1920 +desktopheight:i:1080 +session bpp:i:32 +winposstr:s:0,1,0,0,1920,1080 +compression:i:1 +keyboardhook:i:2 +audiocapturemode:i:0 +videoplaybackmode:i:1 +connection type:i:7 +networkautodetect:i:1 +bandwidthautodetect:i:1 +displayconnectionbar:i:1 +username:s:admin +domain:s:WUXIBIO +alternate shell:s: +shell working directory:s: +disable wallpaper:i:1 +disable full window drag:i:1 +disable menu anims:i:1 +disable themes:i:0 +disable cursor setting:i:0 +bitmapcachepersistenable:i:1 +full address:s:10.249.11.114 +audiomode:i:0 +redirectprinters:i:1 +redirectcomports:i:0 +redirectsmartcards:i:1 +redirectclipboard:i:1 +redirectposdevices:i:0 +autoreconnection enabled:i:1 +authentication level:i:2 +prompt for credentials:i:0 +negotiate security layer:i:1 +remoteapplicationmode:i:0 +alternate full address:s: +dynamic resolution:i:1 diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/9b9622c3-dbbd-41b6-b0ab-e44c6a779b3e.rdp b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/9b9622c3-dbbd-41b6-b0ab-e44c6a779b3e.rdp new file mode 100644 index 0000000..3e64877 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/9b9622c3-dbbd-41b6-b0ab-e44c6a779b3e.rdp @@ -0,0 +1,38 @@ +screen mode id:i:2 +use multimon:i:0 +desktopwidth:i:1920 +desktopheight:i:1080 +session bpp:i:32 +winposstr:s:0,1,0,0,1920,1080 +compression:i:1 +keyboardhook:i:2 +audiocapturemode:i:0 +videoplaybackmode:i:1 +connection type:i:7 +networkautodetect:i:1 +bandwidthautodetect:i:1 +displayconnectionbar:i:1 +username:s:XDR服务器 +domain:s:XDR服务器 +alternate shell:s: +shell working directory:s: +disable wallpaper:i:1 +disable full window drag:i:1 +disable menu anims:i:1 +disable themes:i:0 +disable cursor setting:i:0 +bitmapcachepersistenable:i:1 +full address:s:XDR服务器 +audiomode:i:0 +redirectprinters:i:1 +redirectcomports:i:0 +redirectsmartcards:i:1 +redirectclipboard:i:1 +redirectposdevices:i:0 +autoreconnection enabled:i:1 +authentication level:i:2 +prompt for credentials:i:0 +negotiate security layer:i:1 +remoteapplicationmode:i:0 +alternate full address:s: +dynamic resolution:i:1 diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/bd4d545e-1bf4-4b72-9740-01c0318200ad.rdp b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/bd4d545e-1bf4-4b72-9740-01c0318200ad.rdp new file mode 100644 index 0000000..029b2c4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/bd4d545e-1bf4-4b72-9740-01c0318200ad.rdp @@ -0,0 +1,38 @@ +screen mode id:i:2 +use multimon:i:0 +desktopwidth:i:1920 +desktopheight:i:1080 +session bpp:i:32 +winposstr:s:0,1,0,0,1920,1080 +compression:i:1 +keyboardhook:i:2 +audiocapturemode:i:0 +videoplaybackmode:i:1 +connection type:i:7 +networkautodetect:i:1 +bandwidthautodetect:i:1 +displayconnectionbar:i:1 +username:s:xiaoxue +domain:s:WUXIBIO +alternate shell:s: +shell working directory:s: +disable wallpaper:i:1 +disable full window drag:i:1 +disable menu anims:i:1 +disable themes:i:0 +disable cursor setting:i:0 +bitmapcachepersistenable:i:1 +full address:s:10.249.11.114 +audiomode:i:0 +redirectprinters:i:1 +redirectcomports:i:0 +redirectsmartcards:i:1 +redirectclipboard:i:1 +redirectposdevices:i:0 +autoreconnection enabled:i:1 +authentication level:i:2 +prompt for credentials:i:0 +negotiate security layer:i:1 +remoteapplicationmode:i:0 +alternate full address:s: +dynamic resolution:i:1 diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/connection.rdp b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/connection.rdp new file mode 100644 index 0000000..e69de29 diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/d45ec389-d237-49f1-890b-0a5288b2220d.rdp b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/d45ec389-d237-49f1-890b-0a5288b2220d.rdp new file mode 100644 index 0000000..029b2c4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/d45ec389-d237-49f1-890b-0a5288b2220d.rdp @@ -0,0 +1,38 @@ +screen mode id:i:2 +use multimon:i:0 +desktopwidth:i:1920 +desktopheight:i:1080 +session bpp:i:32 +winposstr:s:0,1,0,0,1920,1080 +compression:i:1 +keyboardhook:i:2 +audiocapturemode:i:0 +videoplaybackmode:i:1 +connection type:i:7 +networkautodetect:i:1 +bandwidthautodetect:i:1 +displayconnectionbar:i:1 +username:s:xiaoxue +domain:s:WUXIBIO +alternate shell:s: +shell working directory:s: +disable wallpaper:i:1 +disable full window drag:i:1 +disable menu anims:i:1 +disable themes:i:0 +disable cursor setting:i:0 +bitmapcachepersistenable:i:1 +full address:s:10.249.11.114 +audiomode:i:0 +redirectprinters:i:1 +redirectcomports:i:0 +redirectsmartcards:i:1 +redirectclipboard:i:1 +redirectposdevices:i:0 +autoreconnection enabled:i:1 +authentication level:i:2 +prompt for credentials:i:0 +negotiate security layer:i:1 +remoteapplicationmode:i:0 +alternate full address:s: +dynamic resolution:i:1 diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/faf2bbbd-f38a-4ae2-8012-1febe6d56c65.rdp b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/faf2bbbd-f38a-4ae2-8012-1febe6d56c65.rdp new file mode 100644 index 0000000..029b2c4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/rdp/faf2bbbd-f38a-4ae2-8012-1febe6d56c65.rdp @@ -0,0 +1,38 @@ +screen mode id:i:2 +use multimon:i:0 +desktopwidth:i:1920 +desktopheight:i:1080 +session bpp:i:32 +winposstr:s:0,1,0,0,1920,1080 +compression:i:1 +keyboardhook:i:2 +audiocapturemode:i:0 +videoplaybackmode:i:1 +connection type:i:7 +networkautodetect:i:1 +bandwidthautodetect:i:1 +displayconnectionbar:i:1 +username:s:xiaoxue +domain:s:WUXIBIO +alternate shell:s: +shell working directory:s: +disable wallpaper:i:1 +disable full window drag:i:1 +disable menu anims:i:1 +disable themes:i:0 +disable cursor setting:i:0 +bitmapcachepersistenable:i:1 +full address:s:10.249.11.114 +audiomode:i:0 +redirectprinters:i:1 +redirectcomports:i:0 +redirectsmartcards:i:1 +redirectclipboard:i:1 +redirectposdevices:i:0 +autoreconnection enabled:i:1 +authentication level:i:2 +prompt for credentials:i:0 +negotiate security layer:i:1 +remoteapplicationmode:i:0 +alternate full address:s: +dynamic resolution:i:1 diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/swagger/mini-profiler.css b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/swagger/mini-profiler.css new file mode 100644 index 0000000..547cdb3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/swagger/mini-profiler.css @@ -0,0 +1,3 @@ +.mp-results{ + display: block!important; +} diff --git a/src/modules/admin/ZhonTai.Admin.Host/wwwroot/swagger/mini-profiler.js b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/swagger/mini-profiler.js new file mode 100644 index 0000000..108725d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Host/wwwroot/swagger/mini-profiler.js @@ -0,0 +1,2 @@ +//在路由中调试获取新版脚本 var script = MiniProfiler.Current.RenderIncludes(Request.HttpContext); +document.write(''); \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Tests/BaseControllerTest.cs b/src/modules/admin/ZhonTai.Admin.Tests/BaseControllerTest.cs new file mode 100644 index 0000000..8ec82e5 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Tests/BaseControllerTest.cs @@ -0,0 +1,197 @@ +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json; +using Xunit; +using ZhonTai.Admin.Tools.Cache; +using ZhonTai.Admin.Core; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Core.Enums; +using ZhonTai.Admin.Services.Auth; +using ZhonTai.Admin.Services.Auth.Dto; + +namespace ZhonTai.Admin.Tests; + +public class BaseControllerTest : BaseTest +{ + private readonly ICacheTool _cache; + private readonly AppConfig _appConfig; + + protected BaseControllerTest() + { + _cache = GetService(); + _appConfig = GetService(); + } + + public static HttpContent GetHttpContent(object input, string contentType = "application/json;charset=UTF-8", ContentTypeEnum contentTypeEnum = ContentTypeEnum.Json) + { + // HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(input)); + var content = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(input)); + HttpContent httpContent; + if (contentTypeEnum == ContentTypeEnum.FormData) + { + httpContent = new FormUrlEncodedContent(JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(input))); + } + else + { + httpContent = new ByteArrayContent(content); + } + httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse(contentType); + return httpContent; + } + + public static HttpContent GetHttpContent(object input, ContentTypeEnum contentTypeEnum) + { + var contentType = contentTypeEnum switch + { + ContentTypeEnum.Json => "application/json;charset=UTF-8", + ContentTypeEnum.FormData => "application/x-www-form-urlencoded;charset=UTF-8", + _ => string.Empty + }; + return GetHttpContent(input, contentType, contentTypeEnum); + } + + public async Task GetResult(string apiPath, object input = null, bool checkStatus = true) + { + await Login(); + if (input != null) + { + var queryParams = ToParams(input); + apiPath = apiPath.IndexOf('?') > -1 ? $"{apiPath}&{queryParams}" : $"{apiPath}?{queryParams}"; + } + var res = await Client.GetAsync(apiPath); + if (checkStatus) + { + Assert.Equal(HttpStatusCode.OK, res.StatusCode); + } + var content = await res.Content.ReadAsStringAsync(); + return content.NotNull() ? JsonConvert.DeserializeObject(content) : default; + } + + public async Task PostResult(string apiPath, object input = null, bool checkStatus = true, string contentType = "application/json;charset=UTF-8") + { + await Login(); + var res = await Client.PostAsync(apiPath, GetHttpContent(input, contentType)); + if (checkStatus) + { + Assert.Equal(HttpStatusCode.OK, res.StatusCode); + } + var content = await res.Content.ReadAsStringAsync(); + return content.NotNull() ? JsonConvert.DeserializeObject(content) : default; + } + + public async Task PostResultAndGetContent(string apiPath, object input = null, bool checkStatus = true, string contentType = "application/json;charset=UTF-8") + { + //application/json;charset=UTF-8 + //application/x-www-form-urlencoded;charset=UTF-8 + await Login(); + var res = await Client.PostAsync(apiPath, GetHttpContent(input, contentType)); + if (checkStatus) + { + Assert.Equal(HttpStatusCode.OK, res.StatusCode); + } + var content = await res.Content.ReadAsStringAsync(); + return content; + } + + public async Task PutResult(string apiPath, object input = null, bool checkStatus = true, string contentType = "application/json;charset=UTF-8") + { + await Login(); + var res = await Client.PutAsync(apiPath, GetHttpContent(input, contentType)); + if (checkStatus) + { + Assert.Equal(HttpStatusCode.OK, res.StatusCode); + } + var content = await res.Content.ReadAsStringAsync(); + return content.NotNull() ? JsonConvert.DeserializeObject(content) : default; + } + + public async Task DeleteResult(string apiPath, object input = null, bool checkStatus = true) + { + await Login(); + if (input != null) + { + var queryParams = ToParams(input); + apiPath = apiPath.IndexOf('?') > -1 ? $"{apiPath}&{queryParams}" : $"{apiPath}?{queryParams}"; + } + var res = await Client.DeleteAsync(apiPath); + if (checkStatus) + { + Assert.Equal(HttpStatusCode.OK, res.StatusCode); + } + var content = await res.Content.ReadAsStringAsync(); + return content.NotNull() ? JsonConvert.DeserializeObject(content) : default; + } + + public async Task> GetResult(string apiPath, object input = null, bool checkStatus = true) + { + return await GetResult>(apiPath, input, checkStatus); + } + + public async Task> PostResult(string apiPath, object input = null, bool checkStatus = true, string contentType = "application/json;charset=UTF-8") + { + return await PostResult>(apiPath, input, checkStatus, contentType); + } + + public async Task> PutResult(string apiPath, object input = null, bool checkStatus = true, string contentType = "application/json;charset=UTF-8") + { + return await PutResult>(apiPath, input, checkStatus, contentType); + } + + public async Task> DeleteResult(string apiPath, object input = null, bool checkStatus = true) + { + return await DeleteResult>(apiPath, input, checkStatus); + } + + public async Task Login(AuthLoginInput input = null) + { + var authorization = Client.DefaultRequestHeaders.FirstOrDefault(a => a.Key == "Authorization"); + if (authorization.Key != null) + { + return; + } + + if (input == null) + { + input = new AuthLoginInput() + { + UserName = "admin", + Password = "123asd" + }; + } + + //Client.DefaultRequestHeaders.Connection.Add("keep-alive"); + Client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"); + + var result = await AppInfo.GetRequiredService().LoginAsync(input); + + Client.DefaultRequestHeaders.Add("Authorization", $"Bearer {result.AccessToken}"); + } + + public static string ToParams(object source) + { + var stringBuilder = new StringBuilder(string.Empty); + if (source == null) + { + return ""; + } + + var entries = from PropertyDescriptor property in TypeDescriptor.GetProperties(source) + let value = property.GetValue(source) + where value != null + select (property.Name, value); + + foreach (var (name, value) in entries) + { + stringBuilder.Append(WebUtility.UrlEncode(name) + "=" + WebUtility.UrlEncode(value + "") + "&"); + } + + return stringBuilder.ToString().Trim('&'); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Tests/BaseTest.cs b/src/modules/admin/ZhonTai.Admin.Tests/BaseTest.cs new file mode 100644 index 0000000..abcaf42 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Tests/BaseTest.cs @@ -0,0 +1,32 @@ +using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Mvc.Testing; +using System; +using System.Net.Http; + +namespace ZhonTai.Admin.Tests; + +public class BaseTest +{ + protected TestServer Server { get; } + protected HttpClient Client { get; } + protected IServiceProvider ServiceProvider { get; } + + protected BaseTest() + { + var application = new WebApplicationFactory(); + Client = application.CreateClient(); + Server = application.Server; + ServiceProvider = Server.Services; + } + + public T GetService() + { + return ServiceProvider.GetService(); + } + + public T GetRequiredService() + { + return ServiceProvider.GetRequiredService(); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Tests/Controllers/ApiControllerTest.cs b/src/modules/admin/ZhonTai.Admin.Tests/Controllers/ApiControllerTest.cs new file mode 100644 index 0000000..abf3344 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Tests/Controllers/ApiControllerTest.cs @@ -0,0 +1,127 @@ +using System.Threading.Tasks; +using System.Collections.Generic; +using Xunit; +using ZhonTai.Admin.Services.Api.Dto; +using ZhonTai.Admin.Core.Dto; + +namespace ZhonTai.Admin.Tests.Controllers; + +public class ApiControllerTest : BaseControllerTest +{ + public ApiControllerTest() : base() + { + } + + [Fact] + public async Task Get() + { + var res = await GetResult>("/api/admin/api/get?id=161227167658053"); + Assert.True(res.Success); + } + + [Fact] + public async Task GetList() + { + var res = await GetResult>>("/api/admin/api/get-list?key=接口管理"); + Assert.True(res.Success); + } + + [Fact] + public async Task GetPage() + { + await Login(); + var input = new PageInput + { + CurrentPage = 1, + PageSize = 20, + Filter = new ApiGetPageInput + { + Label = "接口管理" + } + }; + + var res = await PostResult($"/api/admin/api/get-page", input); + Assert.True(res.Success); + } + + [Fact] + public async Task Add() + { + var input = new ApiAddInput + { + Label = "新接口", + Path = "/api/admin/api/newapi", + HttpMethods = "post" + }; + + var res = await PostResult($"/api/admin/api/add", input); + Assert.True(res.Success); + } + + [Fact] + public async Task Update() + { + var output = await GetResult>("/api/admin/api/get?id=161227167658053"); + var res = await PutResult($"/api/admin/api/update", output.Data); + Assert.True(res.Success); + } + + [Fact] + public async Task Delete() + { + var res = await DeleteResult($"/api/admin/api/soft-delete?{ToParams(new { id = 191182807191621 })}"); + Assert.True(res.Success); + } + + //[Fact] + //public void TestSM() + //{ + // //SM2Encryption.GenerateSM2KeyPair(out string privateKey, out string publicKey); + // string privateKey = "Ja4UIUJz7XRNDhIiuWXwL78qd1Pc7SC0/Z9LzyF4SL8="; + // string publicKey = "BGe1BZDFN+NhCQtc2qlVk8nUlXrIwcyjT3mMt7Xx3BkDNBGBQjFPV0+h3/cGUYXo2TFI1SShS7hWl9zi6SxUHvg="; + + // string raw = "Hello, SM2 Encryption!"; + // string e = SM2Encryption.Encrypt(raw, publicKey); + // Console.WriteLine($"加密结果:{e}"); + + // string d = SM2Encryption.Decrypt(e, privateKey); + // Console.WriteLine($"解密结果:{d}"); + + + // string data = "Hello, SM3 Encryption!"; + // string sm3key = "98C63180C3748ED2"; + + // string sm3Hash = SM3Encryption.ComputeSM3HashBase64(data); + // string sm3HashHex = SM3Encryption.ComputeSM3HashHex(data); + // //sm3 with key + // byte[] hash = SM3Encryption.ComputeHMacSM3(data, sm3key); + // string stringHash = Base64.ToBase64String(hash); + // string a = SM3Encryption.ComputeSM3HashBase64(data); + // string hexHash = Hex.ToHexString(hash); // 如果需要十六进制字符串表示 + + // Console.WriteLine("Original Data: " + data); + // Console.WriteLine("SM3 Hash(string): " + sm3Hash); + // Console.WriteLine("SM3 Hash(Hex): " + sm3HashHex); + // Console.WriteLine("HMAC-SM3 Hash (string): " + stringHash); + // Console.WriteLine("HMAC-SM3 Hash (Hex): " + hexHash); + + + // var msg = "Hello, SM4 Encryption!"; + // string key = "98C63180C3748ED2"; + // var iv = "UISwD9fW6cFh9SNS"; + // var mode = "CBC"; + // string encryptMsg = SM4Encryption.Encrypt(msg, key, iv, mode, false); + // string decryptedMsg = SM4Encryption.Decrypt(encryptMsg, key, iv, mode, false); + + // //Hex + // string encryptMsgHex = SM4Encryption.Encrypt(msg, key, iv, mode, true); + // string decryptedMsgHex = SM4Encryption.Decrypt(encryptMsgHex, key, iv, mode, true); + // // 打印加密相关信息 + + // Console.WriteLine("Message:\t\t{0}", encryptMsg); + // Console.WriteLine("decryptedMsg:\t\t{0}", decryptedMsg); + // Console.WriteLine("MessageHex:\t\t{0}", encryptMsgHex); + // Console.WriteLine("decryptedMsgHex:\t{0}", decryptedMsgHex); + //} + +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Tests/Repositories/ApiRepositoryTest.cs b/src/modules/admin/ZhonTai.Admin.Tests/Repositories/ApiRepositoryTest.cs new file mode 100644 index 0000000..a7ce8d3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Tests/Repositories/ApiRepositoryTest.cs @@ -0,0 +1,23 @@ +using System.Threading.Tasks; +using Xunit; +using ZhonTai.Admin.Domain.Api; + +namespace ZhonTai.Admin.Tests.Repositories; + +public class ApiRepositoryTest : BaseTest +{ + private readonly IApiRepository _apiRepository; + + public ApiRepositoryTest() + { + _apiRepository = GetService(); + } + + [Fact] + public async Task GetAsync() + { + var id = 161227167658053; + var api = await _apiRepository.GetAsync(a => a.Id == id); + Assert.Equal(id, api?.Id); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Tests/Services/ApiServiceTest.cs b/src/modules/admin/ZhonTai.Admin.Tests/Services/ApiServiceTest.cs new file mode 100644 index 0000000..ad7a682 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Tests/Services/ApiServiceTest.cs @@ -0,0 +1,21 @@ +using System.Threading.Tasks; +using Xunit; +using ZhonTai.Admin.Services.Api; + +namespace ZhonTai.Admin.Tests.Services; + +public class ApiServiceTest : BaseTest +{ + private readonly IApiService _apiService; + public ApiServiceTest() + { + _apiService = GetService(); + } + + [Fact] + public async Task GetAsync() + { + var res = await _apiService.GetAsync(161227168079941); + Assert.True(res?.Id > 0); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin.Tests/ZhonTai.Admin.Tests.csproj b/src/modules/admin/ZhonTai.Admin.Tests/ZhonTai.Admin.Tests.csproj new file mode 100644 index 0000000..1f15a78 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin.Tests/ZhonTai.Admin.Tests.csproj @@ -0,0 +1,22 @@ + + + 中台测试库 + false + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Core/Handlers/ApiDocumentHandler.cs b/src/modules/admin/ZhonTai.Admin/Core/Handlers/ApiDocumentHandler.cs new file mode 100644 index 0000000..367b681 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Core/Handlers/ApiDocumentHandler.cs @@ -0,0 +1,75 @@ +using Microsoft.Extensions.Logging; +using Swashbuckle.AspNetCore.Swagger; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Services.Api; +using ZhonTai.Admin.Services.Api.Dto; + +namespace ZhonTai.Admin.Core.Handlers; + +public class ApiDocumentHandler : IApiDocumentHandler +{ + private readonly AppConfig _appConfig; + private readonly ISwaggerProvider _swaggerProvider; + private readonly IApiService _apiService; + private readonly ILogger _logger; + + public ApiDocumentHandler(AppConfig appConfig, ISwaggerProvider swaggerProvider, IApiService apiService, + ILogger logger) + { + _appConfig = appConfig; + _swaggerProvider = swaggerProvider; + _apiService = apiService; + _logger = logger; + } + + public async Task SyncAsync() + { + try + { + var apis = new List(); + _appConfig.Swagger.Projects?.ForEach(project => + { + var apiDocument = _swaggerProvider.GetSwagger(project.Code.ToLower()); + apis.Add(new ApiSyncModel() + { + Label = project.Name, + Path = project.Code.ToLower() + }); + foreach (var tag in apiDocument.Tags) + { + var apiSyncDto = new ApiSyncModel() + { + Label = tag.Description, + ParentPath = project.Code.ToLower(), + Path = tag.Name + }; + apis.Add(apiSyncDto); + } + + foreach (var path in apiDocument.Paths) + { + foreach (var openApiOperation in path.Value.Operations) + { + var apiSyncDto = new ApiSyncModel() + { + Path = path.Key, + ParentPath = openApiOperation.Value.Tags[0].Name, + HttpMethods = openApiOperation.Key.ToDescriptionOrString().ToLower(), + Label = openApiOperation.Value.Summary + }; + apis.Add(apiSyncDto); + } + } + }); + var apiSyncInput = new ApiSyncInput() + { + Apis = apis + }; + await _apiService.SyncAsync(apiSyncInput); + } + catch (Exception e) + { + _logger.LogError(e, "ApiDocument Sync Failed"); + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Core/Handlers/IApiDocumentHandler.cs b/src/modules/admin/ZhonTai.Admin/Core/Handlers/IApiDocumentHandler.cs new file mode 100644 index 0000000..20fc691 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Core/Handlers/IApiDocumentHandler.cs @@ -0,0 +1,10 @@ +namespace ZhonTai.Admin.Core.Handlers; + +public interface IApiDocumentHandler +{ + /// + /// 同步API文档数据 + /// + /// + Task SyncAsync(); +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Core/TaskScheduler/TaskSchedulerServiceExtensions.cs b/src/modules/admin/ZhonTai.Admin/Core/TaskScheduler/TaskSchedulerServiceExtensions.cs new file mode 100644 index 0000000..018caa7 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Core/TaskScheduler/TaskSchedulerServiceExtensions.cs @@ -0,0 +1,273 @@ +using Cronos; +using FreeScheduler; +using FreeSql; +using Mapster; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Newtonsoft.Json.Linq; +using System.Diagnostics; +using System.Text; +using ZhonTai.Admin.Core; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Db; +using ZhonTai.Admin.Domain; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Services.Email; +using ZhonTai.Admin.Services.Email.Events; +using ZhonTai.Admin.Services.TaskScheduler; +using ZhonTai.Admin.Services.TaskScheduler.Dto; + +namespace ZhonTai.Admin.Tools.TaskScheduler; + +public static class TaskSchedulerServiceExtensions +{ + public static void ConfigureScheduler(IFreeSql fsql) + { + fsql.CodeFirst + .ConfigEntity(a => + { + a.Name("base_task").OldName("app_task"); + }) + .ConfigEntity(a => + { + a.Name("base_task_log").OldName("app_task_log"); + }) + .ConfigEntity(a => + { + a.Name("base_task_ext").OldName("app_task_ext"); + }); + } + + public static IServiceProvider ServiceProvider { get; private set; } + + /// + /// 添加任务调度 + /// + /// + /// + public static IServiceCollection AddTaskScheduler(this IServiceCollection services, Action configureOptions = null) + { + return services.AddTaskScheduler(DbKeys.TaskDb, configureOptions); + } + + /// + /// 执行Grpc远程调用 + /// + /// + /// + /// + public static void ExecuteGrpc(TaskInfo task, string grpcAddress = "") + { + var taskSchedulerConfig = AppInfo.GetRequiredService>().Value; + var jsonArgs = JToken.Parse(task.Body); + var shellArgs = jsonArgs.Adapt(); + + var arguments = shellArgs.Arguments; + var modeulName = jsonArgs["moduleName"]?.ToString(); + if (modeulName.NotNull()) + { + if (grpcAddress.NotNull()) + { + arguments = arguments.Replace("${grpcAddress}", grpcAddress, StringComparison.OrdinalIgnoreCase); + } + } + + var fileName = shellArgs.FileName; + if (fileName.IsNull()) + { + fileName = taskSchedulerConfig?.ProcessStartInfo?.FileName; + } + + var workingDirectory = shellArgs.WorkingDirectory; + if (workingDirectory.IsNull()) + { + workingDirectory = taskSchedulerConfig?.ProcessStartInfo?.WorkingDirectory; + } + + var startInfo = new ProcessStartInfo + { + FileName = fileName, + Arguments = arguments, + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true, + WorkingDirectory = workingDirectory, + StandardOutputEncoding = Encoding.UTF8, + StandardErrorEncoding = Encoding.UTF8, + }; + + var response = string.Empty; + var error = string.Empty; + using (var process = Process.Start(startInfo)) + { + response = process.StandardOutput.ReadToEnd(); + error = process.StandardError.ReadToEnd(); + + //if (response.NotNull()) + //{ + // Console.WriteLine("Response:"); + // Console.WriteLine(response); + //} + + //if (error.NotNull()) + //{ + // Console.WriteLine("Error:"); + // Console.WriteLine(error); + //} + + process.WaitForExit(); + } + + if (response.NotNull()) + task.Remark(response); + + if (error.NotNull()) + throw new Exception(error); + } + + /// + /// 失败重试 + /// + /// + /// + /// + /// + public static void FailedRetry(TaskGetOutput taskInfo, TaskInfo task, TaskLog taskLog, Action onExecuting) + { + //失败重试 + if (taskInfo != null && taskInfo.FailRetryCount > 0) + { + var retryRound = 0; + var failRetryCount = taskInfo.FailRetryCount; + var failRetryInterval = taskInfo.FailRetryInterval > 0 ? taskInfo.FailRetryInterval.Value : 10; + var scheduler = AppInfo.GetRequiredService(); + var currentRound = taskLog.Round; + var adminLocalizer = AppInfo.GetRequiredService(); + void OnFailedCallBak() + { + failRetryCount--; + retryRound++; + var startdt = DateTime.UtcNow; + var result = new TaskLog + { + CreateTime = DateTime.UtcNow.Add(scheduler.TimeOffset), + TaskId = task.Id, + Round = currentRound, + Remark = adminLocalizer["第{0}次失败重试", retryRound], + Success = true + }; + + try + { + onExecuting(task); + } + catch (Exception ex) + { + result.Success = false; + result.Exception = ex.InnerException == null ? $"{ex.Message}\r\n{ex.StackTrace}" : $"{ex.Message}\r\n{ex.StackTrace}\r\n\r\nInnerException: {ex.InnerException.Message}\r\n{ex.InnerException.StackTrace}"; + + if (failRetryCount > 0) + { + scheduler.AddTempTask(TimeSpan.FromSeconds(failRetryInterval), OnFailedCallBak); + } + } + finally + { + result.ElapsedMilliseconds = (long)DateTime.UtcNow.Subtract(startdt).TotalMilliseconds; + var taskLogService = AppInfo.GetRequiredService(); + taskLogService.Add(result); + } + } + + scheduler.AddTempTask(TimeSpan.FromSeconds(failRetryInterval), OnFailedCallBak); + } + } + + /// + /// 发送告警邮件 + /// + /// + /// + /// + public static void SendAlarmEmail(TaskGetOutput taskInfo, TaskInfo task, TaskLog taskLog) + { + var alarmEmail = taskInfo?.AlarmEmail; + var taskSchedulerConfig = AppInfo.GetRequiredService>().CurrentValue; + if (taskSchedulerConfig.AlerEmail != null && taskSchedulerConfig.AlerEmail.Enable) + { + var emailService = AppInfo.GetRequiredService(); + if (alarmEmail.IsNull()) + { + alarmEmail = taskSchedulerConfig.AlerEmail.Address; + } + var topic = task.Topic; + if (alarmEmail.NotNull()) + { + var jsonArgs = JToken.Parse(task.Body); + var desc = jsonArgs["desc"]?.ToString(); + if (desc.NotNull()) + topic = desc; + } + var adminLocalizer = AppInfo.GetRequiredService(); + alarmEmail?.Split(',')?.ToList()?.ForEach(async address => + { + await emailService.SingleSendAsync(new EmailSingleSendEvent + { + ToEmail = new EmailSingleSendEvent.Models.EmailModel + { + Address = address, + Name = address + }, + + Subject = adminLocalizer["【任务调度中心】监控报警"], + Body = adminLocalizer["

任务名称:{0}

任务编号:{1}

告警类型:调度失败

告警内容:
{2}

", topic, task.Id, taskLog.Exception] + }); + }); + } + } + + /// + /// 添加任务调度 + /// + /// + /// + /// + public static IServiceCollection AddTaskScheduler(this IServiceCollection services, string dbKey, Action configureOptions = null) + { + ServiceProvider = services.BuildServiceProvider(); + var options = new TaskSchedulerOptions() + { + FreeSqlCloud = ServiceProvider.GetService(), + FreeSql = ServiceProvider.GetService().Use(dbKey) + }; + configureOptions?.Invoke(options); + + var freeSql = options.FreeSql; + + var dbConfig = AppInfo.GetOptions(); + freeSql.SyncSchedulerStructure(dbConfig, options.ConfigureFreeSql); + + var freeSchedulerBuilder = new FreeSchedulerBuilder() + .UseStorage(freeSql) + .UseTimeZone(TimeSpan.FromHours(8)) + .UseCustomInterval(task => + { + var expression = CronExpression.Parse(task.IntervalArgument, CronFormat.IncludeSeconds); + var next = expression.GetNextOccurrence(DateTimeOffset.Now, TimeZoneInfo.Local); + var nextLocalTime = next?.DateTime; + + return nextLocalTime == null ? null : nextLocalTime - DateTime.Now; + }); + + options.ConfigureFreeSql = ConfigureScheduler; + + options.ConfigureFreeSchedulerBuilder?.Invoke(freeSchedulerBuilder); + + var scheduler = freeSchedulerBuilder.Build(); + + services.AddSingleton(scheduler); + + return services; + } +} diff --git a/src/modules/admin/ZhonTai.Admin/GrpcServices/ApiGrpcService.cs b/src/modules/admin/ZhonTai.Admin/GrpcServices/ApiGrpcService.cs new file mode 100644 index 0000000..0c15171 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/GrpcServices/ApiGrpcService.cs @@ -0,0 +1,26 @@ +using ProtoBuf.Grpc; +using ZhonTai.Admin.Core.GrpcServices; +using ZhonTai.Admin.Core.GrpcServices.Dtos; +using ZhonTai.Admin.Domain.Api; + +namespace ZhonTai.Admin.GrpcServices; + +public class ApiGrpcService : IApiGrpcService +{ + private readonly IApiRepository _apiRepository; + + public ApiGrpcService(IApiRepository apiRepository) + { + _apiRepository = apiRepository; + } + + public async Task>> GetApiList(CallContext context = default) + { + var data = await _apiRepository.Select.ToListAsync(); + var output = new GrpcOutput>() + { + Data = data + }; + return output; + } +} diff --git a/src/modules/admin/ZhonTai.Admin/GrpcServices/OprationLogGrpcService.cs b/src/modules/admin/ZhonTai.Admin/GrpcServices/OprationLogGrpcService.cs new file mode 100644 index 0000000..15dc2d7 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/GrpcServices/OprationLogGrpcService.cs @@ -0,0 +1,24 @@ +using Mapster; +using ProtoBuf.Grpc; +using ZhonTai.Admin.Core.GrpcServices; +using ZhonTai.Admin.Core.GrpcServices.Dtos; +using ZhonTai.Admin.Core.Protos; +using ZhonTai.Admin.Services.OperationLog; +using ZhonTai.Admin.Services.OperationLog.Dto; + +namespace ZhonTai.Admin.GrpcServices; + +public class OprationLogGrpcService : IOprationLogGrpcService +{ + private readonly IOperationLogService _operationLogService; + + public OprationLogGrpcService(IOperationLogService operationLogService) + { + _operationLogService = operationLogService; + } + + public async Task AddAsync(OperationLogAddGrpcInput input, CallContext context = default) + { + return await _operationLogService.AddAsync(input.Adapt()); + } +} diff --git a/src/modules/admin/ZhonTai.Admin/GrpcServices/UserGrpcService.cs b/src/modules/admin/ZhonTai.Admin/GrpcServices/UserGrpcService.cs new file mode 100644 index 0000000..b2304fa --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/GrpcServices/UserGrpcService.cs @@ -0,0 +1,29 @@ +using Mapster; +using ProtoBuf.Grpc; +using ZhonTai.Admin.Core.GrpcServices; +using ZhonTai.Admin.Core.GrpcServices.Dtos; +using ZhonTai.Admin.Core.Protos; +using ZhonTai.Admin.Services.User; + +namespace ZhonTai.Admin.GrpcServices; + +public class UserGrpcService : IUserGrpcService +{ + private readonly IUserService _userService; + + public UserGrpcService(IUserService userService) + { + _userService = userService; + } + + public async Task GetDataPermissionAsync(ProtoString apiPath, CallContext context = default) + { + await _userService.GetDataPermissionAsync(apiPath); + } + + public async Task GetPermissionAsync(CallContext context = default) + { + var userPermission = await _userService.GetPermissionAsync(); + return userPermission.Adapt(); + } +} diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/AdminRepositoryBase.cs b/src/modules/admin/ZhonTai.Admin/Repositories/AdminRepositoryBase.cs new file mode 100644 index 0000000..3747f25 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/AdminRepositoryBase.cs @@ -0,0 +1,18 @@ +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Repositories +{ + /// + /// 权限库基础仓储 + /// + /// + public class AdminRepositoryBase : RepositoryBase where TEntity : class + { + public AdminRepositoryBase(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm) + { + + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/Api/ApiRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/Api/ApiRepository.cs new file mode 100644 index 0000000..16a8ab1 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/Api/ApiRepository.cs @@ -0,0 +1,11 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.Api; + +namespace ZhonTai.Admin.Repositories; + +public class ApiRepository : AdminRepositoryBase, IApiRepository +{ + public ApiRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/CustomGenerateData.cs b/src/modules/admin/ZhonTai.Admin/Repositories/CustomGenerateData.cs new file mode 100644 index 0000000..690a3ad --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/CustomGenerateData.cs @@ -0,0 +1,233 @@ +using ZhonTai.Admin.Domain.DictType; +using ZhonTai.Admin.Domain.Dict; +using ZhonTai.Admin.Domain.Api; +using ZhonTai.Admin.Domain.Permission; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.Role; +using ZhonTai.Admin.Domain.UserRole; +using ZhonTai.Admin.Domain.RolePermission; +using ZhonTai.Admin.Domain.Tenant; +using ZhonTai.Admin.Domain.PermissionApi; +using ZhonTai.Admin.Domain.View; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Common.Extensions; +using ZhonTai.Admin.Domain.UserStaff; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Core.Db.Data; +using FreeSql; +using ZhonTai.Admin.Domain.UserOrg; +using ZhonTai.Admin.Domain.Region; +using ZhonTai.Admin.Domain.PrintTemplate; + +namespace ZhonTai.Admin.Repositories; + +/// +/// 生成数据 +/// +public class CustomGenerateData : GenerateData, IGenerateData +{ + public virtual async Task GenerateDataAsync(IFreeSql db, AppConfig appConfig) + { + #region 读取数据 + #region 用户 + + var printTemplates = await db.Queryable().ToListAsync(); + + #endregion + + #region 地区 + + var regions = await db.Queryable().ToListAsync(); + var regionTree = regions.Clone().ToTree((r, c) => + { + return c.ParentId == 0; + }, + (r, c) => + { + return r.Id == c.ParentId; + }, + (r, datalist) => + { + r.Childs ??= new List(); + r.Childs.AddRange(datalist); + }); + #endregion + //admin + #region 数据字典 + + var dictionaryTypes = await db.Queryable().ToListAsync(); + + var dictionaries = await db.Queryable().ToListAsync(); + #endregion + + #region 接口 + + var apis = await db.Queryable().ToListAsync(); + var apiTree = apis.Clone().ToTree((r, c) => + { + return c.ParentId == 0; + }, + (r, c) => + { + return r.Id == c.ParentId; + }, + (r, datalist) => + { + r.Childs ??= new List(); + r.Childs.AddRange(datalist); + }); + + #endregion + + #region 视图 + + var views = await db.Queryable().ToListAsync(); + var viewTree = views.Clone().ToTree((r, c) => + { + return c.ParentId == 0; + }, + (r, c) => + { + return r.Id == c.ParentId; + }, + (r, datalist) => + { + r.Childs ??= new List(); + r.Childs.AddRange(datalist); + }); + + #endregion + + #region 权限 + + var permissions = await db.Queryable().ToListAsync(); + var permissionTree = permissions.Clone().ToTree((r, c) => + { + return c.ParentId == 0; + }, + (r, c) => + { + return r.Id == c.ParentId; + }, + (r, datalist) => + { + r.Childs ??= new List(); + r.Childs.AddRange(datalist); + }); + + #endregion + + #region 用户 + + var users = await db.Queryable().ToListAsync(); + + #endregion + + #region 员工 + + var staffs = await db.Queryable().ToListAsync(); + + #endregion + + #region 部门 + + var orgs = await db.Queryable().ToListAsync(); + var orgTree = orgs.Clone().ToTree((r, c) => + { + return c.ParentId == 0; + }, + (r, c) => + { + return r.Id == c.ParentId; + }, + (r, datalist) => + { + r.Childs ??= new List(); + r.Childs.AddRange(datalist); + }); + + #endregion + + #region 角色 + + var roles = await db.Queryable().ToListAsync(); + + #endregion + + #region 用户角色 + + var userRoles = await db.Queryable().ToListAsync(); + + #endregion + + #region 用户部门 + + var userOrgs = await db.Queryable().ToListAsync(); + + #endregion + + #region 角色权限 + + var rolePermissions = await db.Queryable().ToListAsync(); + + #endregion + + #region 租户 + + var tenants = await db.Queryable().ToListAsync(); + + #endregion + + #region 权限接口 + + var permissionApis = await db.Queryable().ToListAsync(); + + #endregion + + #endregion + + #region 生成数据 + + var isTenant = appConfig.Tenant; + + if (isTenant) + { + var tenantIds = tenants?.Select(a => a.Id)?.ToList(); + SaveDataToJsonFile(users.Where(a => tenantIds.Contains(a.TenantId.Value))); + SaveDataToJsonFile(roles.Where(a => tenantIds.Contains(a.TenantId.Value))); + orgTree = orgs.Clone().Where(a => tenantIds.Contains(a.TenantId.Value)).ToList().ToTree((r, c) => + { + return c.ParentId == 0; + }, + (r, c) => + { + return r.Id == c.ParentId; + }, + (r, datalist) => + { + r.Childs ??= new List(); + r.Childs.AddRange(datalist); + }); + SaveDataToJsonFile(orgTree); + SaveDataToJsonFile(staffs.Where(a => tenantIds.Contains(a.TenantId.Value))); + } + SaveDataToJsonFile(printTemplates, isTenant); + SaveDataToJsonFile(regionTree); + SaveDataToJsonFile(users, isTenant); + SaveDataToJsonFile(roles, isTenant); + SaveDataToJsonFile(orgTree, isTenant); + SaveDataToJsonFile(staffs, isTenant); + + SaveDataToJsonFile(dictionaries); + SaveDataToJsonFile(dictionaryTypes); + SaveDataToJsonFile(userRoles); + SaveDataToJsonFile(userOrgs); + SaveDataToJsonFile(apiTree); + SaveDataToJsonFile(viewTree); + SaveDataToJsonFile(permissionTree); + SaveDataToJsonFile(permissionApis); + SaveDataToJsonFile(rolePermissions); + SaveDataToJsonFile(tenants); + #endregion + } +} diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/CustomSyncData.cs b/src/modules/admin/ZhonTai.Admin/Repositories/CustomSyncData.cs new file mode 100644 index 0000000..9dbbfca --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/CustomSyncData.cs @@ -0,0 +1,306 @@ +using ZhonTai.Admin.Domain.DictType; +using ZhonTai.Admin.Domain.Dict; +using ZhonTai.Admin.Domain.Api; +using ZhonTai.Admin.Domain.Permission; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.Role; +using ZhonTai.Admin.Domain.UserRole; +using ZhonTai.Admin.Domain.RolePermission; +using ZhonTai.Admin.Domain.Tenant; +using ZhonTai.Admin.Domain.PermissionApi; +using ZhonTai.Admin.Domain.View; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Domain.UserStaff; +using ZhonTai.Admin.Core.Db.Data; +using ZhonTai.Admin.Domain.UserOrg; +using ZhonTai.Common.Extensions; +using FreeSql; +using Mapster; +using ZhonTai.Admin.Domain.Region; +using ZhonTai.Admin.Domain.PrintTemplate; + +namespace ZhonTai.Admin.Repositories; + +/// +/// 同步数据 +/// +public class CustomSyncData : SyncData, ISyncData +{ + /// + /// 用户角色记录 + /// + /// + /// + record UserRoleRecord(long UserId, long RoleId); + + /// + /// 初始化用户角色 + /// + /// + /// + /// + /// + private async Task InitUserRoleAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig) + { + var tableName = GetTableName(); + try + { + if (!IsSyncData(tableName, dbConfig)) + { + return; + } + + var rep = db.GetRepository(); + rep.UnitOfWork = unitOfWork; + + //数据列表 + var sourceDataList = GetData(path: dbConfig.SyncDataPath); + + if (!(sourceDataList?.Length > 0)) + { + Console.WriteLine($"table: {tableName} import data []"); + return; + } + + //查询 + var userRoleRecordList = sourceDataList.Adapt>(); + var dataList = await rep.Where(a => rep.Orm.Select().WithMemory(userRoleRecordList).Where(b => b.UserId == a.UserId && b.RoleId == a.RoleId).Any()).ToListAsync(); + + //新增 + var insertDataList = sourceDataList.Where(a => !(dataList.Where(b => a.UserId == b.UserId && a.RoleId == b.RoleId).Any())).ToList(); + if (insertDataList.Any()) + { + await rep.InsertAsync(insertDataList); + } + + Console.WriteLine($"table: {tableName} sync data succeed"); + } + catch (Exception ex) + { + var msg = $"table: {tableName} sync data failed.\n{ex.Message}"; + Console.WriteLine(msg); + throw new Exception(msg); + } + } + + /// + /// 用户部门记录 + /// + /// + /// + record UserOrgRecord(long UserId, long OrgId); + + /// + /// 初始化用户部门 + /// + /// + /// + /// + /// + private async Task InitUserOrgAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig) + { + var tableName = GetTableName(); + try + { + if (!IsSyncData(tableName, dbConfig)) + { + return; + } + + var rep = db.GetRepository(); + rep.UnitOfWork = unitOfWork; + + //数据列表 + var sourceDataList = GetData(path: dbConfig.SyncDataPath); + + if (!(sourceDataList?.Length > 0)) + { + Console.WriteLine($"table: {tableName} import data []"); + return; + } + + //查询 + var userOrgRecordList = sourceDataList.Adapt>(); + var dataList = await rep.Where(a => rep.Orm.Select().WithMemory(userOrgRecordList).Where(b => b.UserId == a.UserId && b.OrgId == a.OrgId).Any()).ToListAsync(); + + //新增 + var insertDataList = sourceDataList.Where(a => !(dataList.Where(b => a.UserId == b.UserId && a.OrgId == b.OrgId).Any())).ToList(); + if (insertDataList.Any()) + { + await rep.InsertAsync(insertDataList); + } + + Console.WriteLine($"table: {tableName} sync data succeed"); + } + catch (Exception ex) + { + var msg = $"table: {tableName} sync data failed.\n{ex.Message}"; + Console.WriteLine(msg); + throw new Exception(msg); + } + } + + /// + /// 角色权限记录 + /// + /// + /// + record RolePermissionRecord(long RoleId, long PermissionId); + + /// + /// 初始化角色权限 + /// + /// + /// + /// + /// + private async Task InitRolePermissionAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig) + { + var tableName = GetTableName(); + try + { + if (!IsSyncData(tableName, dbConfig)) + { + return; + } + + var rep = db.GetRepository(); + rep.UnitOfWork = unitOfWork; + + //数据列表 + var sourceDataList = GetData(path: dbConfig.SyncDataPath); + + if (!(sourceDataList?.Length > 0)) + { + Console.WriteLine($"table: {tableName} import data []"); + return; + } + + //查询 + var rolePermissionRecordList = sourceDataList.Adapt>(); + var dataList = await rep.Where(a => rep.Orm.Select().WithMemory(rolePermissionRecordList).Where(b => b.RoleId == a.RoleId && b.PermissionId == a.PermissionId).Any()).ToListAsync(); + + //新增 + var insertDataList = sourceDataList.Where(a => !(dataList.Where(b => a.RoleId == b.RoleId && a.PermissionId == b.PermissionId).Any())).ToList(); + if (insertDataList.Any()) + { + await rep.InsertAsync(insertDataList); + } + + Console.WriteLine($"table: {tableName} sync data succeed"); + } + catch (Exception ex) + { + var msg = $"table: {tableName} sync data failed.\n{ex.Message}"; + Console.WriteLine(msg); + throw new Exception(msg); + } + } + + /// + /// 租户权限记录 + /// + /// + /// + record TenantPermissionRecord(long TenantId, long PermissionId); + + /// + /// 权限接口记录 + /// + /// + /// + record PermissionApiRecord(long PermissionId, long ApiId); + + /// + /// 初始化权限接口 + /// + /// + /// + /// + /// + private async Task InitPermissionApiAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig) + { + var tableName = GetTableName(); + try + { + if (!IsSyncData(tableName, dbConfig)) + { + return; + } + + var rep = db.GetRepository(); + rep.UnitOfWork = unitOfWork; + + //数据列表 + var sourceDataList = GetData(path: dbConfig.SyncDataPath); + + if (!(sourceDataList?.Length > 0)) + { + Console.WriteLine($"table: {tableName} import data []"); + return; + } + + //查询 + var dataRecordList = sourceDataList.Adapt>(); + var dataList = await rep.Where(a => rep.Orm.Select().WithMemory(dataRecordList).Where(b => b.PermissionId == a.PermissionId && b.ApiId == a.ApiId).Any()).ToListAsync(); + + //新增 + var insertDataList = sourceDataList.Where(a => !(dataList.Where(b => a.PermissionId == b.PermissionId && a.ApiId == b.ApiId).Any())).ToList(); + if (insertDataList.Any()) + { + await rep.InsertAsync(insertDataList); + } + + Console.WriteLine($"table: {tableName} sync data succeed"); + } + catch (Exception ex) + { + var msg = $"table: {tableName} sync data failed.\n{ex.Message}"; + Console.WriteLine(msg); + throw new Exception(msg); + } + } + + /// + /// 同步数据 + /// + /// + /// + /// + /// + public virtual async Task SyncDataAsync(IFreeSql db, DbConfig dbConfig = null, AppConfig appConfig = null) + { + using var unitOfWork = db.CreateUnitOfWork(); + + try + { + var isTenant = appConfig.Tenant; + + await SyncEntityAsync(db, unitOfWork, dbConfig, appConfig); + await SyncEntityAsync(db, unitOfWork, dbConfig, appConfig, processChilds: true); + await SyncEntityAsync(db, unitOfWork, dbConfig, appConfig); + await SyncEntityAsync(db, unitOfWork, dbConfig, appConfig); + await SyncEntityAsync(db, unitOfWork, dbConfig, appConfig); + await SyncEntityAsync(db, unitOfWork, dbConfig, appConfig); + await SyncEntityAsync(db, unitOfWork, dbConfig, appConfig); + await SyncEntityAsync(db, unitOfWork, dbConfig, appConfig, processChilds: true); + await SyncEntityAsync(db, unitOfWork, dbConfig, appConfig); + await SyncEntityAsync(db, unitOfWork, dbConfig, appConfig, processChilds: true); + await SyncEntityAsync(db, unitOfWork, dbConfig, appConfig, processChilds: true); + await SyncEntityAsync(db, unitOfWork, dbConfig, appConfig, processChilds: true); + await SyncEntityAsync(db, unitOfWork, dbConfig, appConfig); + await InitUserRoleAsync(db, unitOfWork, dbConfig); + await InitUserOrgAsync(db, unitOfWork, dbConfig); + await InitPermissionApiAsync(db, unitOfWork, dbConfig); + await InitRolePermissionAsync(db, unitOfWork, dbConfig); + + unitOfWork.Commit(); + } + catch (Exception) + { + unitOfWork.Rollback(); + throw; + } + } +} diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/Dictionary/DictionaryRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/Dictionary/DictionaryRepository.cs new file mode 100644 index 0000000..ea7a956 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/Dictionary/DictionaryRepository.cs @@ -0,0 +1,11 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.Dict; + +namespace ZhonTai.Admin.Repositories; + +public class DictionaryRepository : AdminRepositoryBase, IDictRepository +{ + public DictionaryRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/DictionaryType/DictionaryTypeRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/DictionaryType/DictionaryTypeRepository.cs new file mode 100644 index 0000000..21d669b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/DictionaryType/DictionaryTypeRepository.cs @@ -0,0 +1,11 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.DictType; + +namespace ZhonTai.Admin.Repositories; + +public class DictionaryTypeRepository : AdminRepositoryBase, IDictTypeRepository +{ + public DictionaryTypeRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/Doc/DocRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/Doc/DocRepository.cs new file mode 100644 index 0000000..32de2b5 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/Doc/DocRepository.cs @@ -0,0 +1,11 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.Doc; + +namespace ZhonTai.Admin.Repositories; + +public class DocRepository : AdminRepositoryBase, IDocRepository +{ + public DocRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/DocumentImage/DocumentImageRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/DocumentImage/DocumentImageRepository.cs new file mode 100644 index 0000000..c15d362 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/DocumentImage/DocumentImageRepository.cs @@ -0,0 +1,11 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.DocImage; + +namespace ZhonTai.Admin.Repositories; + +public class DocumentImageRepository : AdminRepositoryBase, IDocImageRepository +{ + public DocumentImageRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/File/FileRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/File/FileRepository.cs new file mode 100644 index 0000000..b47213c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/File/FileRepository.cs @@ -0,0 +1,11 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain; + +namespace ZhonTai.Admin.Repositories; + +public class FileRepository : AdminRepositoryBase, IFileRepository +{ + public FileRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/LoginLog/LoginLogRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/LoginLog/LoginLogRepository.cs new file mode 100644 index 0000000..ea02ffe --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/LoginLog/LoginLogRepository.cs @@ -0,0 +1,11 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.LoginLog; + +namespace ZhonTai.Admin.Repositories; + +public class LoginLogRepository : AdminRepositoryBase, ILoginLogRepository +{ + public LoginLogRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/OperationLog/OperationLogRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/OperationLog/OperationLogRepository.cs new file mode 100644 index 0000000..9da8277 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/OperationLog/OperationLogRepository.cs @@ -0,0 +1,11 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.OperationLog; + +namespace ZhonTai.Admin.Repositories; + +public class OperationLogRepository : AdminRepositoryBase, IOperationLogRepository +{ + public OperationLogRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/Org/OrgRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/Org/OrgRepository.cs new file mode 100644 index 0000000..a480af0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/Org/OrgRepository.cs @@ -0,0 +1,24 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.Org; + +namespace ZhonTai.Admin.Repositories; + +public class OrgRepository : AdminRepositoryBase, IOrgRepository +{ + public OrgRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + } + + /// + /// 获得本部门和下级部门Id + /// + /// + /// + public async Task> GetChildIdListAsync(long id) + { + return await Select + .Where(a => a.Id == id) + .AsTreeCte() + .ToListAsync(a => a.Id); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/Permission/PermissionRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/Permission/PermissionRepository.cs new file mode 100644 index 0000000..2f00dd1 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/Permission/PermissionRepository.cs @@ -0,0 +1,11 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.Permission; + +namespace ZhonTai.Admin.Repositories; + +public class PermissionRepository : AdminRepositoryBase, IPermissionRepository +{ + public PermissionRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/PermissionApi/PermissionApiRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/PermissionApi/PermissionApiRepository.cs new file mode 100644 index 0000000..4bcdf69 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/PermissionApi/PermissionApiRepository.cs @@ -0,0 +1,12 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.PermissionApi; + +namespace ZhonTai.Admin.Repositories; + +public class PermissionApiRepository : AdminRepositoryBase, IPermissionApiRepository +{ + public PermissionApiRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/Pkg/PkgRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/Pkg/PkgRepository.cs new file mode 100644 index 0000000..77ce030 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/Pkg/PkgRepository.cs @@ -0,0 +1,37 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.Pkg; + +namespace ZhonTai.Admin.Repositories; + +public class PkgRepository : AdminRepositoryBase, IPkgRepository +{ + public PkgRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + } + + /// + /// 获得本角色和下级角色Id + /// + /// + /// + public async Task> GetChildIdListAsync(long id) + { + return await Select + .Where(a => a.Id == id) + .AsTreeCte() + .ToListAsync(a => a.Id); + } + + /// + /// 获得当前角色和下级角色Id + /// + /// + /// + public async Task> GetChildIdListAsync(long[] ids) + { + return await Select + .Where(a => ids.Contains(a.Id)) + .AsTreeCte() + .ToListAsync(a => a.Id); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/PkgPermission/PkgPermissionRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/PkgPermission/PkgPermissionRepository.cs new file mode 100644 index 0000000..4aafb4d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/PkgPermission/PkgPermissionRepository.cs @@ -0,0 +1,12 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.PkgPermission; + +namespace ZhonTai.Admin.Repositories; + +public class PkgPermissionRepository : AdminRepositoryBase, IPkgPermissionRepository +{ + public PkgPermissionRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/Role/RoleRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/Role/RoleRepository.cs new file mode 100644 index 0000000..0cd6715 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/Role/RoleRepository.cs @@ -0,0 +1,37 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.Role; + +namespace ZhonTai.Admin.Repositories; + +public class RoleRepository : AdminRepositoryBase, IRoleRepository +{ + public RoleRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + } + + /// + /// 获得本角色和下级角色Id + /// + /// + /// + public async Task> GetChildIdListAsync(long id) + { + return await Select + .Where(a => a.Id == id) + .AsTreeCte() + .ToListAsync(a => a.Id); + } + + /// + /// 获得当前角色和下级角色Id + /// + /// + /// + public async Task> GetChildIdListAsync(long[] ids) + { + return await Select + .Where(a => ids.Contains(a.Id)) + .AsTreeCte() + .ToListAsync(a => a.Id); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/RoleOrg/RoleOrgRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/RoleOrg/RoleOrgRepository.cs new file mode 100644 index 0000000..79fafe6 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/RoleOrg/RoleOrgRepository.cs @@ -0,0 +1,13 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain; +using ZhonTai.Admin.Domain.RoleOrg; + +namespace ZhonTai.Admin.Repositories; + +public class RoleOrgRepository : AdminRepositoryBase, IRoleOrgRepository +{ + public RoleOrgRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/RolePermission/RolePermissionRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/RolePermission/RolePermissionRepository.cs new file mode 100644 index 0000000..e9021b5 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/RolePermission/RolePermissionRepository.cs @@ -0,0 +1,12 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.RolePermission; + +namespace ZhonTai.Admin.Repositories; + +public class RolePermissionRepository : AdminRepositoryBase, IRolePermissionRepository +{ + public RolePermissionRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/Task/ITaskExtRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/Task/ITaskExtRepository.cs new file mode 100644 index 0000000..80ddcd3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/Task/ITaskExtRepository.cs @@ -0,0 +1,8 @@ +using ZhonTai.Admin.Core.Repositories; +using ZhonTai.Admin.Domain; + +namespace ZhonTai.Admin.Repositories; + +public interface ITaskExtRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/Task/ITaskLogRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/Task/ITaskLogRepository.cs new file mode 100644 index 0000000..d466c59 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/Task/ITaskLogRepository.cs @@ -0,0 +1,8 @@ +using FreeScheduler; +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Repositories; + +public interface ITaskLogRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/Task/ITaskRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/Task/ITaskRepository.cs new file mode 100644 index 0000000..3a153c3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/Task/ITaskRepository.cs @@ -0,0 +1,8 @@ +using FreeScheduler; +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Repositories; + +public interface ITaskRepository : IRepositoryBase +{ +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/Task/TaskExtRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/Task/TaskExtRepository.cs new file mode 100644 index 0000000..63a608a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/Task/TaskExtRepository.cs @@ -0,0 +1,13 @@ +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Core.Repositories; +using ZhonTai.Admin.Domain; + +namespace ZhonTai.Admin.Repositories; + +public class TaskExtRepository : RepositoryBase, ITaskExtRepository +{ + public TaskExtRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.TaskDb, uowm) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/Task/TaskLogRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/Task/TaskLogRepository.cs new file mode 100644 index 0000000..93d51c1 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/Task/TaskLogRepository.cs @@ -0,0 +1,13 @@ +using FreeScheduler; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Repositories; + +public class TaskLogRepository : RepositoryBase, ITaskLogRepository +{ + public TaskLogRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.TaskDb, uowm) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/Task/TaskRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/Task/TaskRepository.cs new file mode 100644 index 0000000..1706a1a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/Task/TaskRepository.cs @@ -0,0 +1,13 @@ +using FreeScheduler; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Core.Repositories; + +namespace ZhonTai.Admin.Repositories; + +public class TaskRepository : RepositoryBase, ITaskRepository +{ + public TaskRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.TaskDb, uowm) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/Tenant/TenantRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/Tenant/TenantRepository.cs new file mode 100644 index 0000000..b8652ce --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/Tenant/TenantRepository.cs @@ -0,0 +1,11 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.Tenant; + +namespace ZhonTai.Admin.Repositories; + +public class TenantRepository : AdminRepositoryBase, ITenantRepository +{ + public TenantRepository(UnitOfWorkManagerCloud muowm) : base(muowm) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/TenantPkg/TenantPkgRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/TenantPkg/TenantPkgRepository.cs new file mode 100644 index 0000000..b5f9268 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/TenantPkg/TenantPkgRepository.cs @@ -0,0 +1,12 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.TenantPkg; + +namespace ZhonTai.Admin.Repositories; + +public class TenantPkgRepository : AdminRepositoryBase, ITenantPkgRepository +{ + public TenantPkgRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/User/UserRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/User/UserRepository.cs new file mode 100644 index 0000000..f134c34 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/User/UserRepository.cs @@ -0,0 +1,12 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.User; + +namespace ZhonTai.Admin.Repositories; + +public class UserRepository : AdminRepositoryBase, IUserRepository +{ + public UserRepository(UnitOfWorkManagerCloud muowm) : base(muowm) + { + + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/UserOrg/UserOrgRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/UserOrg/UserOrgRepository.cs new file mode 100644 index 0000000..71ce13f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/UserOrg/UserOrgRepository.cs @@ -0,0 +1,32 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.UserOrg; + +namespace ZhonTai.Admin.Repositories; + +public class UserOrgRepository : AdminRepositoryBase, IUserOrgRepository +{ + public UserOrgRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + + } + + /// + /// 本部门下是否有员工 + /// + /// + /// + public async Task HasUser(long id) + { + return await Select.Where(a => a.OrgId == id).AnyAsync(); + } + + /// + /// 部门列表下是否有员工 + /// + /// + /// + public async Task HasUser(List idList) + { + return await Select.Where(a => idList.Contains(a.OrgId)).AnyAsync(); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/UserRole/UserRoleRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/UserRole/UserRoleRepository.cs new file mode 100644 index 0000000..54bd501 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/UserRole/UserRoleRepository.cs @@ -0,0 +1,12 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.UserRole; + +namespace ZhonTai.Admin.Repositories; + +public class UserRoleRepository : AdminRepositoryBase, IUserRoleRepository +{ + public UserRoleRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/UserStaff/UserStaffRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/UserStaff/UserStaffRepository.cs new file mode 100644 index 0000000..26ecdb8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/UserStaff/UserStaffRepository.cs @@ -0,0 +1,12 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.UserStaff; + +namespace ZhonTai.Admin.Repositories; + +public class UserStaffRepository : AdminRepositoryBase, IUserStaffRepository +{ + public UserStaffRepository(UnitOfWorkManagerCloud uowm) : base(uowm) + { + + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Repositories/View/ViewRepository.cs b/src/modules/admin/ZhonTai.Admin/Repositories/View/ViewRepository.cs new file mode 100644 index 0000000..a82ce92 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Repositories/View/ViewRepository.cs @@ -0,0 +1,11 @@ +using ZhonTai.Admin.Core.Db.Transaction; +using ZhonTai.Admin.Domain.View; + +namespace ZhonTai.Admin.Repositories; + +public class ViewRepository : AdminRepositoryBase, IViewRepository +{ + public ViewRepository(UnitOfWorkManagerCloud muowm) : base(muowm) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Resources/AdminLocalizer.cs b/src/modules/admin/ZhonTai.Admin/Resources/AdminLocalizer.cs new file mode 100644 index 0000000..ecf1b15 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Resources/AdminLocalizer.cs @@ -0,0 +1,15 @@ +using Microsoft.Extensions.Localization; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Resources; + +/// +/// Admin国际化 +/// +[InjectSingleton] +public class AdminLocalizer: ModuleLocalizer +{ + public AdminLocalizer(IStringLocalizer localizer) : base(localizer) + { + } +} diff --git a/src/modules/admin/ZhonTai.Admin/Resources/Resources.AdminLocalizer.en.json b/src/modules/admin/ZhonTai.Admin/Resources/Resources.AdminLocalizer.en.json new file mode 100644 index 0000000..4feaae0 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Resources/Resources.AdminLocalizer.en.json @@ -0,0 +1,105 @@ +{ + "第{0}次失败重试": "Retry after the {0}th failure", + "【任务调度中心】监控报警": "[Task Scheduling Center] Monitoring Alarm", + "

任务名称:{0}

任务编号:{1}

告警类型:调度失败

告警内容:
{2}

": "

Task name: {0}

Task number: {1}

Alarm type: scheduling failure

Alarm content:
{2}

", + "未登录": "Not logged in", + "请完成安全验证": "Please complete the security verification", + "安全{0},请重新登录": "Security {0}, please log in again", + "解密失败": "Decryption failed", + "请输入账号": "Please enter your account", + "请输入手机号": "Please enter your phone number", + "请输入邮箱地址": "Please enter your email address", + "账号不存在": "Account does not exist", + "账号或密码错误": "Incorrect account or password", + "账号已停用,禁止登录": "Account has been deactivated, login prohibited", + "企业已停用,禁止登录": "Enterprise has been deactivated, login prohibited", + "验证码错误": "Verification code is incorrect", + "新密码和确认密码不一致": "New password and confirmation password do not match", + "无法解析token": "Unable to parse token", + "登录信息已过期": "Login information has expired", + "验签失败": "Signature verification failed", + "安全{0}": "Security {0}", + "字典不存在": "Dictionary does not exist", + "字典已存在": "Dictionary already exists", + "字典编码已存在": "Dictionary code already exists", + "字典值已存在": "Dictionary value already exists", + "数据字典模板{0}.xlsx": "Data dictionary template {0}.xlsx", + "数据字典错误标记{0}.xlsx": "Data dictionary error mark {0}.xlsx", + "数据字典-{0}列表{1}.xlsx": "Data dictionary-{0} list{1}.xlsx", + "字典编码": "Dictionary code", + "字典值": "Dictionary value", + "字典分类": "Dictionary classification", + "{0}已存在": "{0} already exists", + "{0}不存在": "{0} does not exist", + "字典类型已存在": "Dictionary type already exists", + "字典类型编码已存在": "Dictionary type code already exists", + "字典类型不存在": "Dictionary type does not exist", + "邮箱验证码": "Email verification code", + "

你正在进行邮箱登录操作

邮箱验证码: {0},有效期5分钟

如非本人操作,请忽略。

": "

You are logging in with your email

Email verification code: {0}, valid for 5 minutes

If you are not the one operating, please ignore.

", + "不允许上传{0}文件格式": "File format {0} is not allowed for upload", + "文件大小不能超过{0}": "File size cannot exceed {0}", + "请配置{0}的Url参数": "Please configure the URL parameter for {0}", + "消息不存在": "Message does not exist", + "此分类已存在": "This category already exists", + "此分类编码已存在": "This category code already exists", + "上级分组不能是自己": "The superior group cannot be yourself", + "分类不存在": "Category does not exist", + "请选择上级部门": "Please select the superior department", + "此部门已存在": "This department already exists", + "此部门编码已存在": "The department code already exists", + "上级部门不能是本部门": "The superior department cannot be the same as the current department", + "部门不存在": "Department does not exist", + "上级部门不能是下级部门": "The superior department cannot be a subordinate department", + "当前部门有员工无法删除": "The current department has employees and cannot be deleted", + "本部门的下级部门有员工无法删除": "The subordinate departments of this department have employees and cannot be deleted", + "权限点不存在": "Permission point does not exist", + "该角色不存在或已被删除": "The role does not exist or has been deleted", + "此套餐名已存在": "This package name already exists", + "此套餐编码已存在": "This package code already exists", + "套餐不存在": "Package does not exist", + "此地区名已存在": "This region name already exists", + "此地区代码已存在": "This region code already exists", + "地区不存在": "Region does not exist", + "角色不存在": "Role does not exist", + "此{0}已存在": "This {0} already exists", + "此{0}编码已存在": "This {0} code already exists", + "请选择消息": "Please select a message", + "请选择任务": "Please select a task", + "任务不存在": "Task does not exist", + "请输入定时参数": "Please enter scheduling parameters", + "企业名称已存在": "Enterprise name already exists", + "企业编码已存在": "Enterprise code already exists", + "企业账号已存在": "Enterprise account already exists", + "企业手机号已存在": "Enterprise phone number already exists", + "企业邮箱已存在": "Enterprise email already exists", + "租户不存在": "Tenant does not exist", + "平台租户禁止删除": "Platform tenant deletion is prohibited", + "平台租户禁止禁用": "Platform tenant deactivation is prohibited", + "请选择租户": "Please select a tenant", + "超级管理员不存在": "Super administrator does not exist", + "用户不存在": "User does not exist", + "账号已存在": "Account already exists", + "手机号已存在": "Phone number already exists", + "邮箱已存在": "Email already exists", + "直属主管不能是自己": "Direct supervisor cannot be yourself", + "旧密码不正确": "Old password is incorrect", + "平台管理员禁止禁用": "Platform administrator deactivation is prohibited", + "企业管理员禁止禁用": "Enterprise administrator deactivation is prohibited", + "平台管理员禁止删除": "Platform administrator deletion is prohibited", + "企业管理员禁止删除": "Enterprise administrator deletion is prohibited", + "请选择用户": "Please select a user", + "请开启im即时通讯": "Please open im instant messaging", + "视图不存在": "View does not exist", + "打印模板不存在": "Print template does not exist", + "打印模板已被修改,请刷新后重试": "The print template has been modified, please refresh and try again", + "此视图已存在": "This view already exists", + "上级视图不能是本视图": "The superior view cannot be the same as the current view", + "分组不存在": "Group does not exist", + "上级分组不能是本分组": "The superior group cannot be the same as the current group", + "此分组已存在": "This group already exists", + "菜单不存在": "Menu does not exist", + "此菜单已存在": "This menu already exists", + "此权限点已存在": " This permission point already exists", + "打印模板名称已存在": "Print template name already exists", + "打印模板编码已存在": "Print template code already exists" +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Api/ApiService.cs b/src/modules/admin/ZhonTai.Admin/Services/Api/ApiService.cs new file mode 100644 index 0000000..8c0322d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Api/ApiService.cs @@ -0,0 +1,425 @@ +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.Api; +using ZhonTai.Admin.Services.Api.Dto; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Common.Extensions; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Core.Db; +using Microsoft.Extensions.Options; + +namespace ZhonTai.Admin.Services.Api; + +/// +/// 接口服务 +/// +[Order(90)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class ApiService : BaseService, IApiService, IDynamicApi +{ + private readonly AdminRepositoryBase _apiRep; + private readonly AdminLocalizer _adminLocalizer; + private readonly Lazy> _appConfig; + + public ApiService( + AdminRepositoryBase apiRep, + AdminLocalizer adminLocalizer, + Lazy> appConfig + ) + { + _apiRep = apiRep; + _adminLocalizer = adminLocalizer; + _appConfig = appConfig; + } + + private async Task ClearCacheAsync() + { + await Cache.DelAsync(CacheKeys.ApiList); + } + + /// + /// 查询 + /// + /// + /// + public async Task GetAsync(long id) + { + var result = await _apiRep.GetAsync(id); + return result; + } + + /// + /// 查询列表 + /// + /// + /// + public async Task> GetListAsync(string key) + { + var data = await _apiRep + .WhereIf(key.NotNull(), a => a.Path.Contains(key) || a.Label.Contains(key)) + .OrderBy(a => a.ParentId) + .OrderBy(a => a.Sort) + .ToListAsync(); + + return data; + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var key = input.Filter?.Label; + + var list = await _apiRep.Select + .WhereDynamicFilter(input.DynamicFilter) + .WhereIf(key.NotNull(), a => a.Path.Contains(key) || a.Label.Contains(key)) + .Count(out var total) + .OrderBy(a => a.ParentId) + .OrderBy(a => a.Sort) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 添加 + /// + /// + /// + public async Task AddAsync(ApiAddInput input) + { + var path = input.Path; + + var entity = await _apiRep.Select.DisableGlobalFilter(FilterNames.Delete) + .Where(w => w.Path.Equals(path) && w.IsDeleted).FirstAsync(); + + if (entity?.Id > 0) + { + Mapper.Map(input, entity); + entity.IsDeleted = false; + entity.Enabled = true; + await _apiRep.UpdateDiy.DisableGlobalFilter(FilterNames.Delete).SetSource(entity).ExecuteAffrowsAsync(); + + return entity.Id; + } + entity = Mapper.Map(input); + + if (entity.Sort == 0) + { + var sort = await _apiRep.Select.DisableGlobalFilter(FilterNames.Delete).Where(a => a.ParentId == input.ParentId).MaxAsync(a => a.Sort); + entity.Sort = sort + 1; + } + + await _apiRep.InsertAsync(entity); + + await ClearCacheAsync(); + + return entity.Id; + } + + /// + /// 修改 + /// + /// + /// + public async Task UpdateAsync(ApiUpdateInput input) + { + var entity = await _apiRep.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["接口不存在"]); + } + + Mapper.Map(input, entity); + await _apiRep.UpdateAsync(entity); + + await ClearCacheAsync(); + } + /// + /// 设置启用接口日志 + /// + /// + /// + public async Task SetEnableLogAsync(ApiSetEnableLogInput input) + { + await _apiRep.UpdateDiy.Set(a => new ApiEntity + { + EnabledLog = input.EnabledLog, + ModifiedUserId = User.Id, + ModifiedUserName = User.UserName, + ModifiedUserRealName = User.Name, + ModifiedTime = DbHelper.ServerTime + }) + .WhereDynamic(input.ApiId) + .ExecuteAffrowsAsync(); + + await ClearCacheAsync(); + } + /// + /// 设置启用请求参数 + /// + /// + /// + public async Task SetEnableParamsAsync(ApiSetEnableParamsInput input) + { + await _apiRep.UpdateDiy.Set(a => new ApiEntity + { + EnabledParams = input.EnabledParams, + ModifiedUserId = User.Id, + ModifiedUserName = User.UserName, + ModifiedUserRealName = User.Name, + ModifiedTime = DbHelper.ServerTime + }) + .WhereDynamic(input.ApiId) + .ExecuteAffrowsAsync(); + + await ClearCacheAsync(); + } + + /// + /// 设置启用响应结果 + /// + /// + /// + public async Task SetEnableResultAsync(ApiSetEnableResultInput input) + { + await _apiRep.UpdateDiy.Set(a => new ApiEntity + { + EnabledResult = input.EnabledResult, + ModifiedUserId = User.Id, + ModifiedUserName = User.UserName, + ModifiedUserRealName = User.Name, + ModifiedTime = DbHelper.ServerTime + }) + .WhereDynamic(input.ApiId) + .ExecuteAffrowsAsync(); + + await ClearCacheAsync(); + } + + /// + /// 彻底删除 + /// + /// + /// + public async Task DeleteAsync(long id) + { + await _apiRep.DeleteAsync(a => a.Id == id); + + await ClearCacheAsync(); + } + + /// + /// 批量彻底删除 + /// + /// + /// + public async Task BatchDeleteAsync(long[] ids) + { + await _apiRep.DeleteAsync(a => ids.Contains(a.Id)); + + await ClearCacheAsync(); + } + + /// + /// 删除 + /// + /// + /// + [HttpDelete] + public async Task SoftDeleteAsync(long id) + { + await _apiRep.SoftDeleteAsync(id); + + await ClearCacheAsync(); + } + + /// + /// 批量删除 + /// + /// + /// + public async Task BatchSoftDeleteAsync(long[] ids) + { + await _apiRep.SoftDeleteAsync(ids); + + await ClearCacheAsync(); + } + + /// + /// 同步 + /// + /// + /// + [AdminTransaction] + public virtual async Task SyncAsync(ApiSyncInput input) + { + if (!(input?.Apis?.Count > 0)) return; + + //查询分组下所有模块的api + var groupPaths = input.Apis.FindAll(a => a.ParentPath.IsNull()).Select(a => a.Path); + var groups = await _apiRep.Select.DisableGlobalFilter(FilterNames.Delete) + .Where(a => a.ParentId == 0 && groupPaths.Contains(a.Path)).ToListAsync(); + var groupIds = groups.Select(a => a.Id); + var modules = await _apiRep.Select.DisableGlobalFilter(FilterNames.Delete) + .Where(a => groupIds.Contains(a.ParentId)).ToListAsync(); + var moduleIds = modules.Select(a => a.Id); + var apis = await _apiRep.Select.DisableGlobalFilter(FilterNames.Delete) + .Where(a=> moduleIds.Contains(a.ParentId)).ToListAsync(); + + apis = groups.Concat(modules).Concat(apis).ToList(); + var paths = apis.Select(a => a.Path).ToList(); + + //path处理 + foreach (var api in input.Apis) + { + api.Path = api.Path?.Trim().ToLower(); + api.ParentPath = api.ParentPath?.Trim().ToLower(); + } + + #region 执行插入 + + //执行父级api插入 + var parentApis = input.Apis.FindAll(a => a.ParentPath.IsNull()); + var pApis = (from a in parentApis where !paths.Contains(a.Path) select a).ToList(); + if (pApis.Count > 0) + { + var insertPApis = Mapper.Map>(pApis); + insertPApis = await _apiRep.InsertAsync(insertPApis); + apis.AddRange(insertPApis); + } + + //执行子级api插入 + var childApis = input.Apis.FindAll(a => a.ParentPath.NotNull()); + var cApis = (from a in childApis where !paths.Contains(a.Path) select a).ToList(); + if (cApis.Count > 0) + { + var insertCApis = Mapper.Map>(cApis); + insertCApis = await _apiRep.InsertAsync(insertCApis); + apis.AddRange(insertCApis); + } + + #endregion 执行插入 + + #region 修改和禁用 + + { + //父级api修改 + ApiEntity a; + List labels; + string label; + string desc; + for (int i = 0, len = parentApis.Count; i < len; i++) + { + ApiSyncModel api = parentApis[i]; + a = apis.Find(a => a.Path == api.Path); + if (a?.Id > 0) + { + labels = api.Label?.Split("\r\n")?.ToList(); + label = labels != null && labels.Count > 0 ? labels[0] : string.Empty; + desc = labels != null && labels.Count > 1 ? string.Join("\r\n", labels.GetRange(1, labels.Count - 1)) : string.Empty; + a.ParentId = 0; + a.Label = label; + a.Description = desc; + a.Sort = i + 1; + a.Enabled = true; + a.IsDeleted = false; + } + } + } + + { + //子级api修改 + ApiEntity a; + ApiEntity pa; + List labels; + string label; + string desc; + for (int i = 0, len = childApis.Count; i < len; i++) + { + ApiSyncModel api = childApis[i]; + a = apis.Find(a => a.Path == api.Path); + pa = apis.Find(a => a.Path == api.ParentPath); + if (a?.Id > 0) + { + labels = api.Label?.Split("\r\n")?.ToList(); + label = labels != null && labels.Count > 0 ? labels[0] : string.Empty; + desc = labels != null && labels.Count > 1 ? string.Join("\r\n", labels.GetRange(1, labels.Count - 1)) : string.Empty; + + a.ParentId = pa.Id; + a.Label = label; + a.Description = desc; + a.HttpMethods = api.HttpMethods; + a.Sort = i + 1; + a.Enabled = true; + a.IsDeleted = false; + } + } + } + + { + //模块和api禁用 + var inputPaths = input.Apis.Select(a => a.Path).ToList(); + var disabledApis = (from a in apis where !inputPaths.Contains(a.Path) select a).ToList(); + if (disabledApis.Count > 0) + { + foreach (var api in disabledApis) + { + api.Enabled = false; + } + } + } + + #endregion 修改和禁用 + + //批量更新 + await _apiRep.UpdateDiy.DisableGlobalFilter(FilterNames.Delete).SetSource(apis) + .UpdateColumns(a => new { a.ParentId, a.Label, a.HttpMethods, a.Description, a.Sort, a.Enabled, a.IsDeleted, a.ModifiedTime }) + .ExecuteAffrowsAsync(); + + await ClearCacheAsync(); + } + + /// + /// 获得项目列表 + /// + /// + [HttpGet] + [NoOperationLog] + public List GetProjects(string suffix = "/swagger") + { + var routePrefix = _appConfig.Value.Value.ApiUI?.RoutePrefix; + if (routePrefix.IsNull()) + { + if (routePrefix.EndsWith(suffix)) + { + int suffixIndex = routePrefix.LastIndexOf(suffix); + routePrefix = routePrefix.Substring(0, suffixIndex); + } + } + + return new List + { + new ProjectConfig + { + Code = routePrefix + } + }; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Auth/AuthService.cs b/src/modules/admin/ZhonTai.Admin/Services/Auth/AuthService.cs new file mode 100644 index 0000000..169db1f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Auth/AuthService.cs @@ -0,0 +1,1381 @@ +using FreeSql; +using IP2Region.Net.Abstractions; +using Lazy.SlideCaptcha.Core.Validator; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.ModelBinding; +using Microsoft.Extensions.Options; +using Microsoft.IdentityModel.JsonWebTokens; +using Microsoft.IdentityModel.Tokens; +using Newtonsoft.Json; +using Org.BouncyCastle.Utilities.Encoders; +using Saml; +using System.Diagnostics; +using System.Linq.Expressions; +using System.Security.Claims; +using System.Text; +using ZhonTai.Admin.Core; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Auth; +using ZhonTai.Admin.Core.Captcha; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Db; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Core.Helpers; +using ZhonTai.Admin.Domain.Permission; +using ZhonTai.Admin.Domain.PkgPermission; +using ZhonTai.Admin.Domain.RolePermission; +using ZhonTai.Admin.Domain.Tenant; +using ZhonTai.Admin.Domain.TenantPkg; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.UserRole; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Services.Auth.Dto; +using ZhonTai.Admin.Services.LoginLog; +using ZhonTai.Admin.Services.LoginLog.Dto; +using ZhonTai.Admin.Services.Tenant; +using ZhonTai.Admin.Services.Tenant.Dto; +using ZhonTai.Admin.Services.User; +using ZhonTai.Common.Extensions; +using ZhonTai.Common.Helpers; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using static Lazy.SlideCaptcha.Core.ValidateResult; +using LocationInfo = ZhonTai.Admin.Core.Records.LocationInfo; + +namespace ZhonTai.Admin.Services.Auth; + +/// +/// 认证授权服务 +/// +[DynamicApi(Area = AdminConsts.AreaName)] +public class AuthService : BaseService, IAuthService, IDynamicApi +{ + private readonly UserHelper _userHelper; + private readonly AdminLocalizer _adminLocalizer; + private readonly ILoginLogService _loginLogService; + private readonly IUserToken _userToken; + private readonly IUserService _userService; + private readonly Lazy> _appConfig; + private readonly Lazy> _jwtConfig; + private readonly Lazy _userRep; + private readonly Lazy _tenantRep; + private readonly Lazy _permissionRep; + private readonly Lazy> _passwordHasher; + private readonly Lazy _captcha; + private readonly Lazy _tenantService; + + public AuthService( + UserHelper userHelper, + AdminLocalizer adminLocalizer, + ILoginLogService loginLogService, + IUserToken userToken, + IUserService userService, + Lazy> appConfig, + Lazy> jwtConfig, + Lazy userRep, + Lazy tenantRep, + Lazy permissionRep, + Lazy> passwordHasher, + Lazy captcha, + Lazy tenantService + ) + { + _appConfig = appConfig; + _jwtConfig = jwtConfig; + _userRep = userRep; + _tenantRep = tenantRep; + _permissionRep = permissionRep; + _passwordHasher = passwordHasher; + _captcha = captcha; + _tenantService = tenantService; + _userHelper = userHelper; + _adminLocalizer = adminLocalizer; + _loginLogService = loginLogService; + _userToken = userToken; + _userService = userService; + } + + /// + /// 添加登录日志 + /// + /// + /// + /// + /// + /// + private async Task AddLoginLogAsync(AuthLoginOutput authLoginOutput, LocationInfo locationInfo, UserEntity user, Stopwatch stopwatch) + { + await _loginLogService.AddAsync(new LoginLogAddInput + { + TenantId = authLoginOutput.TenantId, + Name = authLoginOutput.Name, + ElapsedMilliseconds = stopwatch.ElapsedMilliseconds, + Status = true, + CreatedUserId = authLoginOutput.Id, + CreatedUserName = user.UserName, + Country = locationInfo?.Country, + Province = locationInfo?.Province, + City = locationInfo?.City, + Isp = locationInfo?.Isp, + }); + } + + /// + /// 获得IP地址 + /// + /// + /// + private LocationInfo GetIpLocationInfo(string ip) + { + var locationInfo = new LocationInfo(); + if (_appConfig.Value.Value.IP2Region.Enable) + { + if (IPHelper.IsIP(ip)) + { + var region = AppInfo.GetRequiredService().Search(ip); + locationInfo = LocationInfo.Parse(region); + } + } + + return locationInfo; + } + + /// + /// 更新最后登录信息 + /// + /// + /// + /// + /// + [NonAction] + public async Task UpdateLastLoginInfoAsync(long userId, string ip, LocationInfo locationInfo) + { + var update = _userRep.Value.UpdateDiy.Set(a => new UserEntity + { + LastLoginIP = ip, + LastLoginTime = DbHelper.ServerTime, + }); + + if (_appConfig.Value.Value.IP2Region.Enable) + { + update = update.Set(a => new UserEntity + { + LastLoginCountry = locationInfo.Country, + LastLoginProvince = locationInfo.Province, + LastLoginCity = locationInfo.City, + }); + } + + await update.WhereDynamic(userId) + .ExecuteAffrowsAsync(); + } + + /// + /// 获得token + /// + /// 用户信息 + /// + [NonAction] + public string GetToken(AuthLoginOutput user) + { + if (user == null) + { + return null; + } + + var claims = new List() + { + new (ClaimAttributes.UserId, user.Id.ToString(), ClaimValueTypes.Integer64), + new (ClaimAttributes.UserName, user.UserName), + new (ClaimAttributes.Name, user.Name??""), + new (ClaimAttributes.UserType, user.Type.ToInt().ToString(), ClaimValueTypes.Integer32), + new (JwtRegisteredClaimNames.Iat, DateTime.Now.ToTimestamp().ToString(), ClaimValueTypes.Integer64), + }; + + if (_appConfig.Value.Value.Tenant) + { + claims.AddRange( + [ + new (ClaimAttributes.TenantId, user.TenantId.ToString(), ClaimValueTypes.Integer64), + new (ClaimAttributes.TenantType, user.Tenant?.TenantType.ToInt().ToString(), ClaimValueTypes.Integer32), + new (ClaimAttributes.DbKey, user.Tenant?.DbKey??"") + ]); + } + + var token = _userToken.Create([.. claims]); + + return token; + } + + /// + /// 获得令牌信息 + /// + /// + /// + [NonAction] + public TokenInfo GetTokenInfo(AuthLoginOutput user) + { + var token = GetToken(user); + + var now = DateTime.Now; + var jwtConfig = _jwtConfig.Value.Value; + + return new TokenInfo + { + AccessToken = token, + AccessTokenExpiresAt = now.AddMinutes(jwtConfig.Expires), + AccessTokenLifeTime = jwtConfig.Expires * 60, + RefreshToken = Guid.NewGuid().ToString("N"), + RefreshTokenExpiresAt = now.AddMinutes(jwtConfig.Expires + jwtConfig.RefreshExpires), + RefreshTokenLifeTime = jwtConfig.RefreshExpires * 60, + Timestamp = now.ToTimestamp() + }; + } + + /// + /// 查询密钥 + /// + /// + [HttpGet] + [AllowAnonymous] + [NoOperationLog] + public async Task GetPasswordEncryptKeyAsync() + { + //写入Redis + var guid = Guid.NewGuid().ToString("N"); + var key = CacheKeys.PassWordEncrypt + guid; + //创建key + byte[] keyBytes = Encoding.Default.GetBytes(StringHelper.GenerateRandom(16)); + string keyHexString = BitConverter.ToString(keyBytes); + var encryptKey = keyHexString.Replace("-", "").ToLower(); + //创建iv + byte[] ivBytes = Encoding.Default.GetBytes(StringHelper.GenerateRandom(16)); + string ivHexString = BitConverter.ToString(ivBytes); + var iv = ivHexString.Replace("-", "").ToLower(); + //输出 + var passwordKeyOutput = new AuthGetPasswordEncryptKeyOutput { Key = guid, EncryptKey = encryptKey, Iv = iv }; + //写缓存 + await Cache.SetAsync(key, passwordKeyOutput, TimeSpan.FromMinutes(5)); + return passwordKeyOutput; + } + + /// + /// 查询用户个人信息 + /// + /// + [Login] + public async Task GetUserProfileAsync() + { + if (!(User?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["未登录"]); + } + + var userRep = _userRep.Value; + using var _u = userRep.DataFilter.Disable(FilterNames.Self, FilterNames.Data); + + var profile = await userRep + .Where(u => u.Id == User.Id) + .FirstAsync(u => new AuthUserProfileOutput + { + DeptName = u.Org.Name, + CorpName = u.Tenant.Org.Name, + Position = u.Staff.Position + }); + + var mobile = profile.Mobile?.ToString(); + string number = string.Empty; + if (mobile.NotNull()) + { + number = mobile.Length >= 4 ? mobile.Substring(mobile.Length - 4) : mobile; + } + + if (number.IsNull()) + { + var userId = User.Id.ToString(); + number = userId.Length >= 4 ? userId.Substring(userId.Length - 4) : userId; + } + + profile.WatermarkText = $"{profile.Name}@{profile.CorpName} {number}"; + + return profile; + } + + /// + /// 查询用户菜单列表 + /// + /// + /// + [Login] + public async Task> GetUserMenusAsync(string platform = AdminConsts.WebName) + { + if (!(User?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["未登录"]); + } + + using (_userRep.Value.DataFilter.Disable(FilterNames.Self, FilterNames.Data)) + { + var permissionRep = _permissionRep.Value; + var menuSelect = permissionRep.Select.Where(a => a.Enabled == true); + + Expression> where = null; + if (platform.NotNull()) + { + where = where.And(a => a.Platform == platform); + if (platform.ToLower() == AdminConsts.WebName) + { + where = where.Or(a => string.IsNullOrEmpty(a.Platform)); + } + } + else + { + where = where.And(a => string.IsNullOrEmpty(a.Platform)); + } + menuSelect = menuSelect.Where(where); + + if (!User.PlatformAdmin) + { + var db = permissionRep.Orm; + if (User.TenantAdmin) + { + menuSelect = menuSelect.Where(a => + db.Select() + .Where((b, c) => b.PkgId == c.PkgId && b.TenantId == User.TenantId && c.PermissionId == a.Id) + .Any() + ); + } + else + { + menuSelect = menuSelect.Where(a => + db.Select() + .InnerJoin((b, c) => b.RoleId == c.RoleId && c.UserId == User.Id) + .Where(b => b.PermissionId == a.Id) + .Any() + ); + } + } + + var menuList = await menuSelect + .AsTreeCte(up: true) + .Where(a => a.Type == PermissionType.Group || (a.Type == PermissionType.Menu && a.View.Enabled == true)) + .ToListAsync(a => new AuthUserMenuOutput { ViewPath = a.View.Path }); + + return menuList.DistinctBy(a => a.Id).OrderBy(a => a.ParentId).ThenBy(a => a.Sort).ToList(); + + } + } + + /// + /// 查询用户权限列表 + /// + /// + [Login] + public async Task GetUserPermissionsAsync(string platform = AdminConsts.WebName) + { + if (!(User?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["未登录"]); + } + + var userRep = _userRep.Value; + var permissionRep = _permissionRep.Value; + + using (userRep.DataFilter.Disable(FilterNames.Self, FilterNames.Data)) + { + var authGetUserPermissionsOutput = new AuthGetUserPermissionsOutput(); + + var dotSelect = permissionRep.Select.Where(a => a.Type == PermissionType.Dot); + + Expression> where = null; + if (platform.NotNull()) + { + where = where.And(a => a.Platform == platform); + if (platform.ToLower() == AdminConsts.WebName) + { + where = where.Or(a => string.IsNullOrEmpty(a.Platform)); + } + } + else + { + where = where.And(a => string.IsNullOrEmpty(a.Platform)); + } + dotSelect = dotSelect.Where(where); + + if (!User.PlatformAdmin) + { + var db = permissionRep.Orm; + if (User.TenantAdmin) + { + dotSelect = dotSelect.Where(a => + db.Select() + .Where((b, c) => b.PkgId == c.PkgId && b.TenantId == User.TenantId && c.PermissionId == a.Id) + .Any() + ); + } + else + { + dotSelect = dotSelect.Where(a => + db.Select() + .InnerJoin((b, c) => b.RoleId == c.RoleId && c.UserId == User.Id) + .Where(b => b.PermissionId == a.Id) + .Any() + ); + } + } + + //用户权限点 + authGetUserPermissionsOutput.Permissions = await dotSelect.ToListAsync(a => a.Code); + + return authGetUserPermissionsOutput; + } + } + + /// + /// 查询用户信息 + /// + /// + [Login] + public async Task GetUserInfoAsync() + { + if (!(User?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["未登录"]); + } + + var userRep = _userRep.Value; + var permissionRep = _permissionRep.Value; + + using (userRep.DataFilter.Disable(FilterNames.Self, FilterNames.Data)) + { + var authGetUserInfoOutput = new AuthGetUserInfoOutput + { + //用户信息 + User = await userRep.GetAsync(User.Id) + }; + + var menuSelect = permissionRep.Select; + var dotSelect = permissionRep.Select.Where(a => a.Type == PermissionType.Dot); + + if (!User.PlatformAdmin) + { + var db = permissionRep.Orm; + if (User.TenantAdmin) + { + menuSelect = menuSelect.Where(a => + db.Select() + .Where((b, c) => b.PkgId == c.PkgId && b.TenantId == User.TenantId && c.PermissionId == a.Id) + .Any() + ); + + dotSelect = dotSelect.Where(a => + db.Select() + .Where((b, c) => b.PkgId == c.PkgId && b.TenantId == User.TenantId && c.PermissionId == a.Id) + .Any() + ); + } + else + { + menuSelect = menuSelect.Where(a => + db.Select() + .InnerJoin((b, c) => b.RoleId == c.RoleId && c.UserId == User.Id) + .Where(b => b.PermissionId == a.Id) + .Any() + ); + + dotSelect = dotSelect.Where(a => + db.Select() + .InnerJoin((b, c) => b.RoleId == c.RoleId && c.UserId == User.Id) + .Where(b => b.PermissionId == a.Id) + .Any() + ); + } + + menuSelect = menuSelect.AsTreeCte(up: true); + } + + var menuList = await menuSelect + .Where(a => new[] { PermissionType.Group, PermissionType.Menu }.Contains(a.Type)) + .ToListAsync(a => new AuthUserMenuOutput { ViewPath = a.View.Path }); + + //用户菜单 + authGetUserInfoOutput.Menus = menuList.DistinctBy(a => a.Id).OrderBy(a => a.ParentId).ThenBy(a => a.Sort).ToList(); + + //用户权限点 + authGetUserInfoOutput.Permissions = await dotSelect.ToListAsync(a => a.Code); + + return authGetUserInfoOutput; + } + } + + /// + /// 登录 + /// + /// + /// + [HttpPost] + [AllowAnonymous] + [NoOperationLog] + public async Task LoginAsync(AuthLoginInput input) + { + var stopwatch = Stopwatch.StartNew(); + + var ip = IPHelper.GetIP(AppInfo.HttpContext?.Request); + var locationInfo = GetIpLocationInfo(ip); + var loginLogAddInput = new LoginLogAddInput + { + Status = true, + IP = ip, + Country = locationInfo?.Country, + Province = locationInfo?.Province, + City = locationInfo?.City, + Isp = locationInfo?.Isp, + CreatedUserName = input.AccountType switch + { + AccountType.UserName => input.UserName, + AccountType.Email => input.Email, + AccountType.Mobile => input.Mobile, + _ => null + } + }; + + try + { + #region 验证码校验 + + if (_appConfig.Value.Value.VarifyCode.Enable) + { + if (input.CaptchaId.IsNull() || input.CaptchaData.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["请完成安全验证"]); + } + var validateResult = _captcha.Value.Validate(input.CaptchaId, JsonConvert.DeserializeObject(input.CaptchaData)); + if (validateResult.Result != ValidateResultType.Success) + { + throw ResultOutput.Exception(_adminLocalizer["安全{0},请重新登录", validateResult.Message]); + } + } + + #endregion + + #region 密码解密 + + if (input.PasswordKey.NotNull()) + { + var passwordEncryptKey = CacheKeys.PassWordEncrypt + input.PasswordKey; + var existsPasswordKey = await Cache.ExistsAsync(passwordEncryptKey); + if (existsPasswordKey) + { + var secretKey = await Cache.GetAsync(passwordEncryptKey); + if (secretKey.EncryptKey.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["解密失败"]); + } + input.Password = SM4Encryption.Decrypt(input.Password, Hex.Decode(secretKey.EncryptKey), Hex.Decode(secretKey.Iv), "CBC", true).TrimEnd('\0');//SM4解密后会有\0符号,需要去除。 + await Cache.DelAsync(passwordEncryptKey); + } + else + { + throw ResultOutput.Exception(_adminLocalizer["解密失败"]); + } + } + + #endregion + + #region 登录 + var userRep = _userRep.Value; + using var _ = userRep.DataFilter.DisableAll(); + using var __ = userRep.DataFilter.Enable(FilterNames.Delete); + + UserEntity user = null; + switch (input.AccountType) + { + case AccountType.UserName: + { + if (input.UserName.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["请输入账号"]); + } + user = await userRep.Select.Where(a => a.UserName == input.UserName).ToOneAsync(); + break; + } + + case AccountType.Mobile: + { + if (input.Mobile.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["请输入手机号"]); + } + user = await userRep.Select.Where(a => a.Mobile == input.Mobile).ToOneAsync(); + break; + } + + case AccountType.Email: + { + if (input.Email.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["请输入邮箱地址"]); + } + user = await userRep.Select.Where(a => a.Email == input.Email).ToOneAsync(); + break; + } + } + + var valid = user?.Id > 0; + if (!valid) + { + throw ResultOutput.Exception(_adminLocalizer["账号不存在"]); + } + + if (valid) + { + if (user.PasswordEncryptType == PasswordEncryptType.PasswordHasher) + { + var passwordVerificationResult = _passwordHasher.Value.VerifyHashedPassword(user, user.Password, input.Password); + valid = passwordVerificationResult == PasswordVerificationResult.Success || passwordVerificationResult == PasswordVerificationResult.SuccessRehashNeeded; + } + else + { + var password = MD5Encrypt.Encrypt32(input.Password); + valid = user.Password == password; + } + } + + if (!valid) + { + throw ResultOutput.Exception(_adminLocalizer["账号或密码错误"]); + } + + if (!user.Enabled) + { + throw ResultOutput.Exception(_adminLocalizer["账号已停用,禁止登录"]); + } + #endregion + + loginLogAddInput.Name = user.Name; + loginLogAddInput.CreatedUserId = user.Id; + loginLogAddInput.CreatedUserName = user.UserName; + loginLogAddInput.CreatedUserRealName = user.Name; + + #region 获得token + var authLoginOutput = Mapper.Map(user); + if (_appConfig.Value.Value.Tenant) + { + var tenant = await _tenantRep.Value.Select.WhereDynamic(user.TenantId).ToOneAsync(); + if (!(tenant != null && tenant.Enabled)) + { + throw ResultOutput.Exception(_adminLocalizer["企业已停用,禁止登录"]); + } + authLoginOutput.Tenant = tenant; + } + + var tokenInfo = GetTokenInfo(authLoginOutput); + #endregion + + loginLogAddInput.TenantId = authLoginOutput.TenantId; + + //更新最后登录信息 + await UpdateLastLoginInfoAsync(user.Id, ip, locationInfo); + + return tokenInfo; + } + catch (Exception ex) + { + loginLogAddInput.Status = false; + loginLogAddInput.Msg = ex.Message; + + throw; + } + finally + { + stopwatch.Stop(); + loginLogAddInput.ElapsedMilliseconds = stopwatch.ElapsedMilliseconds; + + await _loginLogService.AddAsync(loginLogAddInput); + } + } + + /// + /// 手机登录 + /// + /// + /// + [HttpPost] + [AllowAnonymous] + [NoOperationLog] + public async Task MobileLoginAsync(AuthMobileLoginInput input) + { + var stopwatch = Stopwatch.StartNew(); + + var ip = IPHelper.GetIP(AppInfo.HttpContext?.Request); + var locationInfo = GetIpLocationInfo(ip); + var loginLogAddInput = new LoginLogAddInput + { + Status = true, + IP = ip, + Country = locationInfo?.Country, + Province = locationInfo?.Province, + City = locationInfo?.City, + Isp = locationInfo?.Isp, + CreatedUserName = input.Mobile + }; + + try + { + var userRep = _userRep.Value; + + using var _ = userRep.DataFilter.DisableAll(); + using var __ = userRep.DataFilter.Enable(FilterNames.Delete); + + #region 短信验证码验证 + if (input.CodeId.IsNull() || input.Code.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + var codeKey = CacheKeys.GetSmsCodeKey(input.Mobile, input.CodeId); + var code = await Cache.GetAsync(codeKey); + if (code.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + await Cache.DelAsync(codeKey); + if (code != input.Code) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + + #endregion + + #region 登录 + var user = await userRep.Select.Where(a => a.Mobile == input.Mobile).ToOneAsync(); + if (!(user?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["账号不存在"]); + } + + if (!user.Enabled) + { + throw ResultOutput.Exception(_adminLocalizer["账号已停用,禁止登录"]); + } + #endregion + + loginLogAddInput.Name = user.Name; + loginLogAddInput.CreatedUserId = user.Id; + loginLogAddInput.CreatedUserName = user.UserName; + loginLogAddInput.CreatedUserRealName = user.Name; + + #region 获得token + var authLoginOutput = Mapper.Map(user); + if (_appConfig.Value.Value.Tenant) + { + var tenant = await _tenantRep.Value.Select.WhereDynamic(user.TenantId).ToOneAsync(); + if (!(tenant != null && tenant.Enabled)) + { + throw ResultOutput.Exception(_adminLocalizer["企业已停用,禁止登录"]); + } + authLoginOutput.Tenant = tenant; + } + var tokenInfo = GetTokenInfo(authLoginOutput); + #endregion + + loginLogAddInput.TenantId = authLoginOutput.TenantId; + + //更新最后登录信息 + await UpdateLastLoginInfoAsync(user.Id, ip, locationInfo); + + stopwatch.Stop(); + + await AddLoginLogAsync(authLoginOutput, locationInfo, user, stopwatch); + + return tokenInfo; + } + catch (Exception ex) + { + loginLogAddInput.Status = false; + loginLogAddInput.Msg = ex.Message; + + throw; + } + finally + { + stopwatch.Stop(); + loginLogAddInput.ElapsedMilliseconds = stopwatch.ElapsedMilliseconds; + + await _loginLogService.AddAsync(loginLogAddInput); + } + } + + /// + /// 邮箱登录 + /// + /// + /// + [HttpPost] + [AllowAnonymous] + [NoOperationLog] + public async Task EmailLoginAsync(AuthEmailLoginInput input) + { + var stopwatch = Stopwatch.StartNew(); + + var ip = IPHelper.GetIP(AppInfo.HttpContext?.Request); + var locationInfo = GetIpLocationInfo(ip); + var loginLogAddInput = new LoginLogAddInput + { + Status = true, + IP = ip, + Country = locationInfo?.Country, + Province = locationInfo?.Province, + City = locationInfo?.City, + Isp = locationInfo?.Isp, + CreatedUserName = input.Email + }; + + try + { + var userRep = _userRep.Value; + + using var _ = userRep.DataFilter.DisableAll(); + using var __ = userRep.DataFilter.Enable(FilterNames.Delete); + + #region 邮箱验证码验证 + if (input.CodeId.IsNull() || input.Code.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + var codeKey = CacheKeys.GetEmailCodeKey(input.Email, input.CodeId); + var code = await Cache.GetAsync(codeKey); + if (code.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + await Cache.DelAsync(codeKey); + if (code != input.Code) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + + #endregion + + #region 登录 + var user = await userRep.Select.Where(a => a.Email == input.Email).ToOneAsync(); + if (!(user?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["账号不存在"]); + } + + if (!user.Enabled) + { + throw ResultOutput.Exception(_adminLocalizer["账号已停用,禁止登录"]); + } + #endregion + + loginLogAddInput.Name = user.Name; + loginLogAddInput.CreatedUserId = user.Id; + loginLogAddInput.CreatedUserName = user.UserName; + loginLogAddInput.CreatedUserRealName = user.Name; + + #region 获得token + var authLoginOutput = Mapper.Map(user); + if (_appConfig.Value.Value.Tenant) + { + var tenant = await _tenantRep.Value.Select.WhereDynamic(user.TenantId).ToOneAsync(); + if (!(tenant != null && tenant.Enabled)) + { + throw ResultOutput.Exception(_adminLocalizer["企业已停用,禁止登录"]); + } + authLoginOutput.Tenant = tenant; + } + var tokenInfo = GetTokenInfo(authLoginOutput); + #endregion + + loginLogAddInput.TenantId = authLoginOutput.TenantId; + + //更新最后登录信息 + await UpdateLastLoginInfoAsync(user.Id, ip, locationInfo); + + stopwatch.Stop(); + + await AddLoginLogAsync(authLoginOutput, locationInfo, user, stopwatch); + + return tokenInfo; + } + catch (Exception ex) + { + loginLogAddInput.Status = false; + loginLogAddInput.Msg = ex.Message; + + throw; + } + finally + { + stopwatch.Stop(); + loginLogAddInput.ElapsedMilliseconds = stopwatch.ElapsedMilliseconds; + + await _loginLogService.AddAsync(loginLogAddInput); + } + } + + /// + /// 邮箱更改密码 + /// + /// + /// + [HttpPost] + [AllowAnonymous] + [NoOperationLog] + public async Task ChangePasswordByEmailAsync(AuthChangePasswordByEmailInput input) + { + if (input.ConfirmPassword.NotNull() && input.ConfirmPassword != input.NewPassword) + { + throw ResultOutput.Exception(_adminLocalizer["新密码和确认密码不一致"]); + } + + //检查密码格式 + _userHelper.CheckPassword(input.NewPassword); + + #region 邮箱验证码验证 + + if (input.Email.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["请输入邮箱地址"]); + } + + if (input.CodeId.IsNull() || input.Code.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + var codeKey = CacheKeys.GetEmailCodeKey(input.Email, input.CodeId); + var code = await Cache.GetAsync(codeKey); + if (code.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + await Cache.DelAsync(codeKey); + if (code != input.Code) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + + #endregion + + var userRep = _userRep.Value; + using var _ = userRep.DataFilter.DisableAll(); + using var __ = userRep.DataFilter.Enable(FilterNames.Delete); + + UserEntity user = await userRep.Select.Where(a => a.Email == input.Email).ToOneAsync(); + + if (user == null) + { + throw ResultOutput.Exception(_adminLocalizer["账号不存在"]); + } + + if (user.PasswordEncryptType == PasswordEncryptType.PasswordHasher) + { + user.Password = _passwordHasher.Value.HashPassword(user, input.NewPassword); + } + else + { + user.Password = MD5Encrypt.Encrypt32(input.NewPassword); + } + + await userRep.UpdateAsync(user); + } + + /// + /// 手机更改密码 + /// + /// + /// + [HttpPost] + [AllowAnonymous] + [NoOperationLog] + public async Task ChangePasswordByMobileAsync(AuthChangePasswordByMobileInput input) + { + if (input.ConfirmPassword.NotNull() && input.ConfirmPassword != input.NewPassword) + { + throw ResultOutput.Exception(_adminLocalizer["新密码和确认密码不一致"]); + } + + //检查密码格式 + _userHelper.CheckPassword(input.NewPassword); + + #region 短信验证码验证 + + if (input.Mobile.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["请输入手机号"]); + } + + if (input.CodeId.IsNull() || input.Code.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + var codeKey = CacheKeys.GetSmsCodeKey(input.Mobile, input.CodeId); + var code = await Cache.GetAsync(codeKey); + if (code.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + await Cache.DelAsync(codeKey); + if (code != input.Code) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + + #endregion + + var userRep = _userRep.Value; + using var _ = userRep.DataFilter.DisableAll(); + using var __ = userRep.DataFilter.Enable(FilterNames.Delete); + + UserEntity user = await userRep.Select.Where(a => a.Mobile == input.Mobile).ToOneAsync(); + + if (user == null) + { + throw ResultOutput.Exception(_adminLocalizer["账号不存在"]); + } + + if (user.PasswordEncryptType == PasswordEncryptType.PasswordHasher) + { + user.Password = _passwordHasher.Value.HashPassword(user, input.NewPassword); + } + else + { + user.Password = MD5Encrypt.Encrypt32(input.NewPassword); + } + + await userRep.UpdateAsync(user); + } + + /// + /// 邮箱注册 + /// + /// + /// + [HttpPost] + [AllowAnonymous] + [NoOperationLog] + public async Task RegByEmailAsync(AuthRegByEmailInput input) + { + //检查密码格式 + if (input.Password.NotNull()) + { + _userHelper.CheckPassword(input.Password); + } + + #region 邮箱验证码验证 + + if (input.Email.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["请输入邮箱地址"]); + } + + if (input.CodeId.IsNull() || input.Code.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + var codeKey = CacheKeys.GetEmailCodeKey(input.Email, input.CodeId); + var code = await Cache.GetAsync(codeKey); + if (code.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + await Cache.DelAsync(codeKey); + if (code != input.Code) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + + #endregion + + await _tenantService.Value.RegAsync(new TenantRegInput + { + Name = input.CorpName, + UserName = input.Email, + Email = input.Email, + Password = input.Password, + Enabled = true, + }); + } + + /// + /// 手机号注册 + /// + /// + /// + [HttpPost] + [AllowAnonymous] + [NoOperationLog] + public async Task RegByMobileAsync(AuthRegByMobileInput input) + { + //检查密码格式 + if (input.Password.NotNull()) + { + _userHelper.CheckPassword(input.Password); + } + + #region 短信验证码验证 + + if (input.Mobile.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["请输入手机号"]); + } + + if (input.CodeId.IsNull() || input.Code.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + var codeKey = CacheKeys.GetSmsCodeKey(input.Mobile, input.CodeId); + var code = await Cache.GetAsync(codeKey); + if (code.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + await Cache.DelAsync(codeKey); + if (code != input.Code) + { + throw ResultOutput.Exception(_adminLocalizer["验证码错误"]); + } + + #endregion + + await _tenantService.Value.RegAsync(new TenantRegInput + { + Name = input.CorpName, + UserName = input.Mobile, + Mobile = input.Mobile, + Password = input.Password, + Enabled = true, + }); + } + + /// + /// 刷新Token + /// 以旧换新 + /// + /// + /// + [HttpGet] + [AllowAnonymous] + public async Task Refresh([BindRequired] string token) + { + var jwtSecurityToken = _userToken.Decode(token); + var userClaims = jwtSecurityToken?.Claims?.ToArray(); + if (userClaims == null || userClaims.Length == 0) + { + throw ResultOutput.Exception(_adminLocalizer["无法解析token"]); + } + + var refreshExpires = userClaims.FirstOrDefault(a => a.Type == ClaimAttributes.RefreshExpires)?.Value; + if (refreshExpires.IsNull() || refreshExpires.ToLong() <= DateTime.Now.ToTimestamp()) + { + throw ResultOutput.Exception(_adminLocalizer["登录信息已过期"]); + } + + var userId = userClaims.FirstOrDefault(a => a.Type == ClaimAttributes.UserId)?.Value; + if (userId.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["登录信息已失效"]); + } + + //验签 + var securityKey = _jwtConfig.Value.Value.SecurityKey; + var signingCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(securityKey)), SecurityAlgorithms.HmacSha256); + var input = jwtSecurityToken.RawHeader + "." + jwtSecurityToken.RawPayload; + if (jwtSecurityToken.RawSignature != JwtTokenUtilities.CreateEncodedSignature(input, signingCredentials)) + { + throw ResultOutput.Exception(_adminLocalizer["验签失败"]); + } + + var user = await _userService.GetLoginUserAsync(userId.ToLong()); + if (!(user?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["账号不存在"]); + } + if (!user.Enabled) + { + throw ResultOutput.Exception(_adminLocalizer["账号已停用,禁止登录"]); + } + + if (_appConfig.Value.Value.Tenant) + { + if (!(user.Tenant != null && user.Tenant.Enabled)) + { + throw ResultOutput.Exception(_adminLocalizer["企业已停用,禁止登录"]); + } + } + + var tokenInfo = GetTokenInfo(user); + return tokenInfo; + } + + /// + /// SAML 登录 + /// + /// + [HttpGet] + [AllowAnonymous] + [NoOperationLog] + public async Task LoginBySAML() + { + var samlConfig = AppInfo.GetOptions(); + + if (!samlConfig.Enable) + { + throw ResultOutput.Exception(_adminLocalizer["SAML认证未启用"]); + } + + var request = new AuthRequest( + samlConfig.EntityId, + samlConfig.AssertionConsumerServiceUrl + ); + + return request.GetRedirectUrl(samlConfig.SingleSignOnServiceUrl); + } + + /// + /// SAML 回调处理 + /// + /// + /// + [HttpPost] + [AllowAnonymous] + [NoOperationLog] + public async Task SamlCallback([FromForm] string SAMLResponse) + { + var samlConfig = AppInfo.GetOptions(); + + if (!samlConfig.Enable) + { + throw ResultOutput.Exception(_adminLocalizer["SAML认证未启用"]); + } + + try + { + // 解码SAML响应 + var samlResponse = new Response( + samlConfig.IdpCertificate, + SAMLResponse + ); + + if (!samlResponse.IsValid()) + { + throw ResultOutput.Exception(_adminLocalizer["SAML响应验证失败"]); + } + + // 获取用户信息 + var userName = samlResponse.GetNameID(); + var email = samlResponse.GetCustomAttribute(samlConfig.EmailAttribute); + var name = samlResponse.GetCustomAttribute(samlConfig.NameAttribute); + + // 查找或创建用户 + var user = await GetOrCreateUserAsync(userName, email, name); + + if (!user.Enabled) + { + throw ResultOutput.Exception(_adminLocalizer["账号已停用,禁止登录"]); + } + + // 生成JWT Token + var authLoginOutput = Mapper.Map(user); + + if (_appConfig.Value.Value.Tenant) + { + var tenant = await _tenantRep.Value.Select.WhereDynamic(user.TenantId).ToOneAsync(); + if (!(tenant != null && tenant.Enabled)) + { + throw ResultOutput.Exception(_adminLocalizer["企业已停用,禁止登录"]); + } + authLoginOutput.Tenant = tenant; + } + + return GetTokenInfo(authLoginOutput); + } + catch (Exception ex) + { + throw ResultOutput.Exception(_adminLocalizer["SAML认证处理失败: {0}", ex.Message]); + } + } + + /// + /// 获取或创建用户 + /// + /// + /// + /// + /// + private async Task GetOrCreateUserAsync(string userName, string email, string name) + { + var userRep = _userRep.Value; + var samlConfig = AppInfo.GetOptions(); + + using var _ = userRep.DataFilter.DisableAll(); + using var __ = userRep.DataFilter.Enable(FilterNames.Delete); + + // 先通过用户名查找 + var user = await userRep.Select.Where(a => a.UserName == userName).ToOneAsync(); + + // 如果没找到,通过邮箱查找 + if (user == null && !string.IsNullOrEmpty(email)) + { + user = await userRep.Select.Where(a => a.Email == email).ToOneAsync(); + } + + // 如果还没找到,且启用了自动创建用户 + if (user == null && samlConfig.AutoCreateUser) + { + user = await CreateUserAsync(userName, email, name); + } + + if (user == null) + { + throw ResultOutput.Exception(_adminLocalizer["用户不存在,请联系管理员"]); + } + + return user; + } + + /// + /// 创建新用户 + /// + /// + /// + /// + /// + private async Task CreateUserAsync(string userName, string email, string name) + { + var samlConfig = AppInfo.GetOptions(); + var userRep = _userRep.Value; + + var user = new UserEntity + { + UserName = userName, + Name = name ?? userName, + Email = email, + Type = (UserType)samlConfig.DefaultUserType, + Enabled = true, + TenantId = samlConfig.DefaultTenantId ?? 1, + Password = Guid.NewGuid().ToString("N"), // 生成随机密码,SAML用户不需要密码 + PasswordEncryptType = PasswordEncryptType.PasswordHasher + }; + + await userRep.InsertAsync(user); + return user; + } + + /// + /// 是否开启验证码 + /// + /// + [HttpGet] + [AllowAnonymous] + [NoOperationLog] + public bool IsCaptcha() + { + return _appConfig.Value.Value.VarifyCode.Enable; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Auth/SamlService.cs b/src/modules/admin/ZhonTai.Admin/Services/Auth/SamlService.cs new file mode 100644 index 0000000..99968fe --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Auth/SamlService.cs @@ -0,0 +1,210 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Options; +using System.Security.Claims; +using System.Text; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Auth; +using ZhonTai.Admin.Services.Auth.Dto; +using ZhonTai.Admin.Services.User; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Db; +using ZhonTai.Admin.Resources; +using ZhonTai.Common.Extensions; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using Saml; +using System.Security.Cryptography.X509Certificates; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Authorization; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Dto; + +namespace ZhonTai.Admin.Services.Auth; + +/// +/// SAML认证服务 +/// +[DynamicApi(Area = AdminConsts.AreaName)] +public class SamlService : BaseService, ISamlService, IDynamicApi +{ + private readonly IUserToken _userToken; + private readonly IUserService _userService; + private readonly Lazy> _samlConfig; + private readonly Lazy> _appConfig; + private readonly Lazy> _jwtConfig; + private readonly Lazy _userRep; + private readonly AdminLocalizer _adminLocalizer; + + public SamlService( + IUserToken userToken, + IUserService userService, + Lazy> samlConfig, + Lazy> appConfig, + Lazy> jwtConfig, + Lazy userRep, + AdminLocalizer adminLocalizer + ) + { + _userToken = userToken; + _userService = userService; + _samlConfig = samlConfig; + _appConfig = appConfig; + _jwtConfig = jwtConfig; + _userRep = userRep; + _adminLocalizer = adminLocalizer; + } + + /// + /// 获取SAML登录URL + /// + /// + [HttpGet] + [AllowAnonymous] + [NoOperationLog] + public async Task GetLoginUrlAsync() + { + var samlConfig = _samlConfig.Value.Value; + + if (!samlConfig.Enable) + { + throw ResultOutput.Exception(_adminLocalizer["SAML认证未启用"]); + } + + var request = new AuthRequest( + samlConfig.EntityId, + samlConfig.AssertionConsumerServiceUrl + ); + + return request.GetRedirectUrl(samlConfig.SingleSignOnServiceUrl); + } + + /// + /// SAML回调处理 + /// + /// + /// + [HttpPost] + [AllowAnonymous] + [NoOperationLog] + public async Task ProcessCallbackAsync([FromForm] string SAMLResponse) + { + var samlConfig = _samlConfig.Value.Value; + + if (!samlConfig.Enable) + { + throw ResultOutput.Exception(_adminLocalizer["SAML认证未启用"]); + } + + try + { + // 解码SAML响应 + var samlResponse = new Response( + samlConfig.IdpCertificate, + SAMLResponse + ); + + if (!samlResponse.IsValid()) + { + throw ResultOutput.Exception(_adminLocalizer["SAML响应验证失败"]); + } + + // 获取用户信息 + var userName = samlResponse.GetNameID(); + var email = samlResponse.GetCustomAttribute(samlConfig.EmailAttribute); + var name = samlResponse.GetCustomAttribute(samlConfig.NameAttribute); + + // 查找或创建用户 + var user = await GetOrCreateUserAsync(userName, email, name); + + if (!user.Enabled) + { + throw ResultOutput.Exception(_adminLocalizer["账号已停用,禁止登录"]); + } + + // 生成JWT Token + var authLoginOutput = Mapper.Map(user); + return GetTokenInfo(authLoginOutput); + } + catch (Exception ex) + { + throw ResultOutput.Exception(_adminLocalizer["SAML认证处理失败: {0}", ex.Message]); + } + } + + /// + /// 获取或创建用户 + /// + /// + /// + /// + /// + private async Task GetOrCreateUserAsync(string userName, string email, string name) + { + var userRep = _userRep.Value; + var samlConfig = _samlConfig.Value.Value; + + using var _ = userRep.DataFilter.DisableAll(); + using var __ = userRep.DataFilter.Enable(FilterNames.Delete); + + // 先通过用户名查找 + var user = await userRep.Select.Where(a => a.UserName == userName).ToOneAsync(); + + // 如果没找到,通过邮箱查找 + if (user == null && !string.IsNullOrEmpty(email)) + { + user = await userRep.Select.Where(a => a.Email == email).ToOneAsync(); + } + + // 如果还没找到,且启用了自动创建用户 + if (user == null && samlConfig.AutoCreateUser) + { + user = await CreateUserAsync(userName, email, name); + } + + if (user == null) + { + throw ResultOutput.Exception(_adminLocalizer["用户不存在,请联系管理员"]); + } + + return user; + } + + /// + /// 创建新用户 + /// + /// + /// + /// + /// + private async Task CreateUserAsync(string userName, string email, string name) + { + var samlConfig = _samlConfig.Value.Value; + var userRep = _userRep.Value; + + var user = new UserEntity + { + UserName = userName, + Name = name ?? userName, + Email = email, + Type = (UserType)samlConfig.DefaultUserType, + Enabled = true, + TenantId = samlConfig.DefaultTenantId ?? 1, + Password = Guid.NewGuid().ToString("N"), // 生成随机密码,SAML用户不需要密码 + PasswordEncryptType = PasswordEncryptType.PasswordHasher + }; + + await userRep.InsertAsync(user); + return user; + } + + /// + /// 获得令牌信息 + /// + /// + /// + private TokenInfo GetTokenInfo(AuthLoginOutput user) + { + return null; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Board/BoardService.cs b/src/modules/admin/ZhonTai.Admin/Services/Board/BoardService.cs new file mode 100644 index 0000000..fa94236 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Board/BoardService.cs @@ -0,0 +1,196 @@ +using Mapster; +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Contracts.Domain.Board; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Contracts.Services.Board; +using ZhonTai.Admin.Contracts.Services.Board.Dto; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Common.Extensions; +using ZhonTai.Admin.Domain.User; + +namespace ZhonTai.Admin.Services.Board; + +/// +/// 看板服务 +/// +[Order(210)] +[DynamicApi(Area = AdminConsts.AreaName)] +public partial class BoardService : BaseService, IBoardService, IDynamicApi +{ + private readonly AdminRepositoryBase _boardRepository; + private readonly AdminRepositoryBase _boardUserRepository; + private readonly AdminRepositoryBase _userRepository; + private readonly AdminLocalizer _adminLocalizer; + + public BoardService( + AdminRepositoryBase boardRepository, + AdminRepositoryBase boardUserRepository, + AdminRepositoryBase userRepository, + AdminLocalizer adminLocalizer + ) + { + _boardRepository = boardRepository; + _boardUserRepository = boardUserRepository; + _userRepository = userRepository; + _adminLocalizer = adminLocalizer; + } + + /// + /// 获取看板 + /// + public async Task GetAsync(long id) + { + var entity = await _boardRepository.Select.Where(a => a.Id == id).ToOneAsync(); + if (entity == null) + { + throw ResultOutput.Exception(_adminLocalizer["看板不存在"]); + } + return entity.Adapt(); + } + + /// + /// 查询看板分页 + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var list = await _boardRepository.Select + .WhereDynamicFilter(input.DynamicFilter) + .WhereIf(input.Filter?.Name.NotNull() == true, a => a.Name.Contains(input.Filter.Name) || a.Keywords.Contains(input.Filter.Name)) + .WhereIf(input.Filter?.Keywords.NotNull() == true, a => a.Keywords.Contains(input.Filter.Keywords)) + .WhereIf(input.Filter?.StartCreatedTime.HasValue == true, a => a.CreatedTime >= input.Filter.StartCreatedTime) + .WhereIf(input.Filter?.EndCreatedTime.HasValue == true, a => a.CreatedTime <= input.Filter.EndCreatedTime) + .Count(out var total) + .OrderBy(true, c => c.Sort) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(); + + var data = new PageOutput() + { + List = list, + Total = total + }; + return data; + } + + /// + /// 新增看板 + /// + public async Task AddAsync(BoardAddInput input) + { + var entity = input.Adapt(); + await _boardRepository.InsertAsync(entity); + return entity.Id; + } + + /// + /// 修改看板 + /// + public async Task UpdateAsync(BoardUpdateInput input) + { + var entity = await _boardRepository.Select.Where(a => a.Id == input.Id).ToOneAsync(); + if (entity == null) + { + throw ResultOutput.Exception(_adminLocalizer["看板不存在"]); + } + input.Adapt(entity); + await _boardRepository.UpdateAsync(entity); + } + + /// + /// 删除看板 + /// + public async Task DeleteAsync(long id) + { + await _boardRepository.SoftDeleteAsync(a => a.Id == id); + } + + + /// + /// 根据用户ID获取看板列表 + /// + public async Task> GetBoardListByUserIdAsync() + { + var list = await _boardRepository.Select.From() + .InnerJoin(a => a.t2.BoardId == a.t1.Id) + .Where(a => a.t2.UserId == User.Id) + .ToListAsync(); + return list; + } + + /// + /// 获取看板用户列表 + /// + public async Task> GetBoardUserListAsync(BoardUserGetListInput input) + { + var list = await _userRepository.Select.From() + .InnerJoin(a => a.t2.UserId == a.t1.Id) + .Where(a => a.t2.BoardId == input.BoardId) + .WhereIf(input.UserName.NotNull(), a => a.t1.Name.Contains(input.UserName)) + .OrderByDescending(a => a.t1.Id) + .ToListAsync(); + + return list; + } + + /// + /// 批量添加看板用户 + /// + [HttpPost] + [Transaction] + public async Task AddBoardUserAsync(BoardUserAddInput input) + { + var userIds = input.UserIds; + + if (userIds == null || !userIds.Any()) + { + return; + } + + // 查询已存在的关联关系 + var existingRelations = await _boardUserRepository.Select + .Where(a => a.BoardId == input.BoardId && userIds.Contains(a.UserId)) + .ToListAsync(a => new { a.BoardId, a.UserId }); + + // 构建需要新增的关联关系 + var newRelations = new List(); + + foreach (var userId in userIds) + { + if (!existingRelations.Any(r => r.BoardId == input.BoardId && r.UserId == userId)) + { + newRelations.Add(new BoardUserEntity + { + BoardId = input.BoardId, + UserId = userId + }); + } + } + + // 批量插入新的关联关系 + if (newRelations.Any()) + { + await _boardUserRepository.InsertAsync(newRelations); + } + } + + /// + /// 批量移除看板用户 + /// + [HttpPost] + public async Task RemoveBoardUserAsync(BoardUserAddInput input) + { + var boardId = input.BoardId; + var userIds = input.UserIds; + + if (userIds != null && userIds.Any()) + { + await _boardUserRepository.Where(a => a.BoardId == boardId && userIds.Contains(a.UserId)).ToDelete().ExecuteAffrowsAsync(); + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Cache/CacheService.cs b/src/modules/admin/ZhonTai.Admin/Services/Cache/CacheService.cs new file mode 100644 index 0000000..4bbf163 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Cache/CacheService.cs @@ -0,0 +1,70 @@ +using Microsoft.Extensions.Logging; +using System.ComponentModel; +using System.Reflection; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Common.Helpers; +using Microsoft.Extensions.Options; + +namespace ZhonTai.Admin.Services.Cache; + +/// +/// 缓存服务 +/// +[Order(80)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class CacheService : BaseService, ICacheService, IDynamicApi +{ + private readonly AppConfig _appConfig; + public CacheService(IOptions appConfig) + { + _appConfig = appConfig.Value; + } + + /// + /// 查询列表 + /// + /// + public List GetList() + { + var list = new List(); + + Assembly[] assemblies = AssemblyHelper.GetAssemblyList(_appConfig.AssemblyNames); + + foreach (Assembly assembly in assemblies) + { + var types = assembly.GetExportedTypes().Where(a => a.GetCustomAttribute(false) != null); + foreach (Type type in types) + { + var fields = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); + foreach (FieldInfo field in fields) + { + var descriptionAttribute = field.GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault() as DescriptionAttribute; + + list.Add(new + { + field.Name, + Value = field.GetRawConstantValue().ToString(), + descriptionAttribute?.Description + }); + } + } + } + + return list; + } + + /// + /// 清除缓存 + /// + /// 缓存键 + /// + public async Task ClearAsync(string cacheKey) + { + Logger.LogWarning($"{User.Id}.{User.UserName}清除缓存[{cacheKey}]"); + await Cache.DelByPatternAsync(cacheKey + "*"); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Captcha/CaptchaService.cs b/src/modules/admin/ZhonTai.Admin/Services/Captcha/CaptchaService.cs new file mode 100644 index 0000000..298688a --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Captcha/CaptchaService.cs @@ -0,0 +1,153 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Authorization; +using DotNetCore.CAP; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Captcha; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Services.Captcha.Dto; +using ZhonTai.Admin.Services.Email.Events; +using ZhonTai.Common.Helpers; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using Lazy.SlideCaptcha.Core; +using Lazy.SlideCaptcha.Core.Validator; +using static Lazy.SlideCaptcha.Core.ValidateResult; +using ZhonTai.Admin.Resources; + +namespace ZhonTai.Admin.Services.Cache; + +/// +/// 验证码服务 +/// +[Order(210)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class CaptchaService : BaseService, IDynamicApi +{ + private readonly ICaptcha _captcha; + private readonly ISlideCaptcha _slideCaptcha; + private readonly ICapPublisher _capPublisher; + private readonly AdminLocalizer _adminLocalizer; + + public CaptchaService(ICaptcha captcha, + ISlideCaptcha slideCaptcha, + ICapPublisher capPublisher, + AdminLocalizer adminLocalizer) + { + _captcha = captcha; + _slideCaptcha = slideCaptcha; + _capPublisher = capPublisher; + _adminLocalizer = adminLocalizer; + } + + /// + /// 生成 + /// + /// 验证码id + /// + [AllowAnonymous] + [NoOperationLog] + public CaptchaData Generate(string captchaId = null) + { + return _captcha.Generate(captchaId); + } + + /// + /// 验证 + /// + /// 验证码Id + /// 滑动轨迹 + /// + [AllowAnonymous] + [NoOperationLog] + public ValidateResult CheckAsync([FromQuery] string captchaId, SlideTrack track) + { + if (captchaId.IsNull() || track == null) + { + throw ResultOutput.Exception(_adminLocalizer["请完成安全验证"]); + } + + return _slideCaptcha.Validate(captchaId, track, false); + } + + /// + /// 发送短信验证码 + /// + /// + /// + [AllowAnonymous] + [NoOperationLog] + public async Task SendSmsCodeAsync(SendSmsCodeInput input) + { + if (input.Mobile.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["请输入手机号"]); + } + + if (input.CaptchaId.IsNull() || input.Track == null) + { + throw ResultOutput.Exception(_adminLocalizer["请完成安全验证"]); + } + + var validateResult = _captcha.Validate(input.CaptchaId, input.Track); + if (validateResult.Result != ValidateResultType.Success) + { + throw ResultOutput.Exception(_adminLocalizer["安全{0}", validateResult.Message]); + } + + var codeId = input.CodeId.IsNull() ? Guid.NewGuid().ToString() : input.CodeId; + var code = StringHelper.GenerateRandomNumber(); + await Cache.SetAsync(CacheKeys.GetSmsCodeKey(input.Mobile, codeId), code, TimeSpan.FromMinutes(5)); + + //发送短信验证码 + await _capPublisher.PublishAsync(SubscribeNames.SmsSendCode, new + { + input.Mobile, + Text = code + }); + + return codeId; + } + + /// + /// 发送邮件验证码 + /// + /// + /// + [AllowAnonymous] + [NoOperationLog] + public async Task SendEmailCodeAsync(SendEmailCodeInput input) + { + if (input.Email.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["请输入邮件地址"]); + } + + if (input.CaptchaId.IsNull() || input.Track == null) + { + throw ResultOutput.Exception(_adminLocalizer["请完成安全验证"]); + } + + var validateResult = _captcha.Validate(input.CaptchaId, input.Track); + if (validateResult.Result != ValidateResultType.Success) + { + throw ResultOutput.Exception(_adminLocalizer["安全{0}", validateResult.Message]); + } + + var codeId = input.CodeId.IsNull() ? Guid.NewGuid().ToString() : input.CodeId; + var code = StringHelper.GenerateRandomNumber(); + await Cache.SetAsync(CacheKeys.GetEmailCodeKey(input.Email, codeId), code, TimeSpan.FromMinutes(5)); + + //发送邮箱验证码 + await _capPublisher.PublishAsync(SubscribeNames.EmailSendCode, new EmailSendCodeEvent + { + ToEmail = new EmailSendCodeEvent.Models.EmailModel + { + Address = input.Email, + }, + Code = code, + }); + + return codeId; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Dict/DictService.cs b/src/modules/admin/ZhonTai.Admin/Services/Dict/DictService.cs new file mode 100644 index 0000000..1220857 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Dict/DictService.cs @@ -0,0 +1,438 @@ +using System.ComponentModel.DataAnnotations; +using System.Data; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Magicodes.ExporterAndImporter.Core.Models; +using Mapster; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Db; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Core.Helpers; +using ZhonTai.Admin.Domain.Dict; +using ZhonTai.Admin.Domain.DictType; +using ZhonTai.Admin.Domain.Dict.Dto; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Services.Dict.Dto; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; + +namespace ZhonTai.Admin.Services.Dict; + +/// +/// 数据字典服务 +/// +[Order(60)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class DictService : BaseService, IDictService, IDynamicApi +{ + private readonly AdminRepositoryBase _dictRep; + private readonly AdminRepositoryBase _dictTypeRep; + private readonly AdminLocalizer _adminLocalizer; + private readonly IEHelper _iEHelper; + + public DictService(AdminRepositoryBase dictRep, + AdminRepositoryBase dictTypeRep, + AdminLocalizer adminLocalizer, + IEHelper iEHelper) + { + _dictRep = dictRep; + _dictTypeRep = dictTypeRep; + _adminLocalizer = adminLocalizer; + _iEHelper = iEHelper; + } + + /// + /// 查询 + /// + /// + /// + public async Task GetAsync(long id) + { + var result = await _dictRep.GetAsync(id); + return result; + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var key = input.Filter?.Name; + var dictTypeId = input.Filter?.DictTypeId; + + var select = _dictRep.Select + .WhereDynamicFilter(input.DynamicFilter) + .WhereIf(dictTypeId.HasValue && dictTypeId.Value > 0, a => a.DictTypeId == dictTypeId) + .WhereIf(key.NotNull(), a => a.Name.Contains(key) || a.Code.Contains(key)) + .Count(out var total); + + if (input.SortList != null && input.SortList.Count > 0) + { + input.SortList.ForEach(sort => + { + select = select.OrderByPropertyNameIf(sort.Order.HasValue, sort.PropName, sort.IsAscending.Value); + }); + } + else + { + select = select.OrderBy(a => a.Sort); + } + + var list = await select + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 通过类型编码查询列表 + /// + /// 字典类型编码列表 + /// + [AllowAnonymous] + [HttpPost] + public async Task>> GetListAsync(string[] codes) + { + var list = await _dictRep.Select + .Where(a => codes.Contains(a.DictType.Code) && a.DictType.Enabled == true && a.Enabled == true) + .OrderBy(a => a.Sort) + .ToListAsync(a => new DictGetListOutput { DictTypeCode = a.DictType.Code }); + + var dicts = new Dictionary>(); + foreach (var code in codes) + { + if (code.NotNull()) + dicts[code] = list.Where(a => a.DictTypeCode == code).ToList(); + } + + return dicts; + } + + /// + /// 通过类型名称查询列表 + /// + /// 字典类型名称列表 + /// + [AllowAnonymous] + [HttpPost] + public async Task>> GetListByNamesAsync(string[] names) + { + var list = await _dictRep.Select + .Where(a => names.Contains(a.DictType.Name) && a.DictType.Enabled == true && a.Enabled == true) + .OrderBy(a => a.Sort) + .ToListAsync(a => new DictGetListOutput { DictTypeName = a.DictType.Name }); + + var dicts = new Dictionary>(); + foreach (var name in names) + { + if (name.NotNull()) + dicts[name] = list.Where(a => a.DictTypeName == name).ToList(); + } + + return dicts; + } + + /// + /// 下载导入模板 + /// + /// + [HttpPost] + [NonFormatResult] + public async Task DownloadTemplateAsync() + { + var fileName = _adminLocalizer["数据字典模板{0}.xlsx", DateTime.Now.ToString("yyyyMMddHHmmss")]; + return await _iEHelper.DownloadTemplateAsync(new DictImport(), fileName); + } + + /// + /// 下载错误标记文件 + /// + /// + /// + /// + [HttpPost] + [NonFormatResult] + public async Task DownloadErrorMarkAsync(string fileId, string fileName) + { + if (fileName.IsNull()) + { + fileName = _adminLocalizer["数据字典错误标记{0}.xlsx", DateTime.Now.ToString("yyyyMMddHHmmss")]; + } + return await _iEHelper.DownloadErrorMarkAsync(fileId, fileName); + } + + /// + /// 导出数据 + /// + /// + [HttpPost] + [NonFormatResult] + public async Task ExportDataAsync(ExportInput input) + { + using var _ = _dictRep.DataFilter.DisableAll(); + + var select = _dictRep.Select; + if (input.SortList != null && input.SortList.Count > 0) + { + select = select.SortList(input.SortList); + } + else + { + select = select.OrderBy(a => a.DictType.Sort).OrderBy(a => a.Sort); + } + + //查询数据 + var dataList = await select.WhereDynamicFilter(input.DynamicFilter).ToListAsync(a => new DictExport { DictTypeName = a.DictType.Name }); + + var dictTypeName = dataList.Count > 0 ? dataList[0].DictTypeName : string.Empty; + + //导出数据 + var fileName = input.FileName.NotNull() ? input.FileName : _adminLocalizer["数据字典-{0}列表{1}.xlsx", dictTypeName, DateTime.Now.ToString("yyyyMMddHHmmss")]; + + return await _iEHelper.ExportDataAsync(dataList, fileName, dictTypeName); + } + + /// + /// 导入数据 + /// + /// + /// + /// + /// + [HttpPost] + public async Task ImportDataAsync([Required] IFormFile file, int duplicateAction, string fileId) + { + var importResult = await _iEHelper.ImportDataAsync(file, fileId, async (importResult) => + { + //检查数据 + var importDataList = importResult.Data; + var importDictTypeNameList = importDataList.Select(a => a.DictTypeName).Distinct().ToList(); + var dictTypeList = await _dictTypeRep.Where(a => importDictTypeNameList.Contains(a.Name)).ToListAsync(a => new { a.Id, a.Name }); + var dictTypeIdList = dictTypeList.Select(a => a.Id).Distinct().ToList(); + var dictList = await _dictRep.Where(a => dictTypeIdList.Contains(a.DictTypeId)).ToListAsync(a => new { a.Id, a.DictTypeId, a.Name, a.Code, a.Value }); + + if (importResult.RowErrors == null) + { + importResult.RowErrors = new List(); + } + var errorList = importResult.RowErrors; + + foreach (var importData in importDataList) + { + var rowIndex = importDataList.ToList().FindIndex(o => o.Equals(importData)) + 2; + importData.DictTypeId = dictTypeList.Where(a => a.Name == importData.DictTypeName).Select(a => a.Id).FirstOrDefault(); + + if (importData.DictTypeId > 0) + { + importData.Id = dictList.Where(a => a.DictTypeId == importData.DictTypeId && a.Name == importData.Name).Select(a => a.Id).FirstOrDefault(); + + if (importData.Id > 0) + { + if (duplicateAction == 1) + { + if (importData.Code.NotNull() && dictList.Where(a => a.Id != importData.Id && a.DictTypeId == importData.DictTypeId && a.Code == importData.Code).Any()) + { + var errorInfo = new DataRowErrorInfo() + { + RowIndex = rowIndex, + }; + errorInfo.FieldErrors.Add(_adminLocalizer["字典编码"], _adminLocalizer["{0}已存在", importData.Code]); + errorList.Add(errorInfo); + } + + if (importData.Value.NotNull() && dictList.Where(a => a.Id != importData.Id && a.DictTypeId == importData.DictTypeId && a.Value == importData.Value).Any()) + { + var errorInfo = new DataRowErrorInfo() + { + RowIndex = rowIndex, + }; + errorInfo.FieldErrors.Add(_adminLocalizer["字典值"], _adminLocalizer["{0}已存在", importData.Value]); + errorList.Add(errorInfo); + } + } + } + else + { + if (importData.Code.NotNull() && dictList.Where(a => a.DictTypeId == importData.DictTypeId && a.Code == importData.Code).Any()) + { + var errorInfo = new DataRowErrorInfo() + { + RowIndex = rowIndex, + }; + errorInfo.FieldErrors.Add(_adminLocalizer["字典编码"], _adminLocalizer["{0}已存在", importData.Code]); + errorList.Add(errorInfo); + } + + if (importData.Value.NotNull() && dictList.Where(a => a.DictTypeId == importData.DictTypeId && a.Value == importData.Value).Any()) + { + var errorInfo = new DataRowErrorInfo() + { + RowIndex = rowIndex, + }; + errorInfo.FieldErrors.Add(_adminLocalizer["字典值"], _adminLocalizer["{0}已存在", importData.Value]); + errorList.Add(errorInfo); + } + } + } + else + { + var errorInfo = new DataRowErrorInfo() + { + RowIndex = rowIndex, + }; + errorInfo.FieldErrors.Add(_adminLocalizer["字典分类"], _adminLocalizer["{0}不存在", importData.DictTypeName]); + errorList.Add(errorInfo); + } + } + + return importResult; + }); + + var importDataList = importResult.Data; + var output = new ImportOutput() + { + Total = importDataList.Count + }; + if (output.Total > 0) + { + //新增 + var insetImportDataList = importDataList.Where(a=>a.Id == 0).ToList(); + var insetDataList = insetImportDataList.Adapt>(); + output.InsertCount = insetDataList.Count; + await _dictRep.InsertAsync(insetDataList); + + //修改 + var updateImportDataList = importDataList.Where(a => a.Id > 0).ToList(); + if (duplicateAction == 1 && updateImportDataList?.Count > 0) + { + var updateImportDataIds = updateImportDataList.Select(e => e.Id).ToList(); + var dbDataList = await _dictRep.Where(a => updateImportDataIds.Contains(a.Id)).ToListAsync(); + foreach (var dbData in dbDataList) + { + var data = updateImportDataList.Where(a => a.Id == dbData.Id).First(); + data.Adapt(dbData); + } + output.UpdateCount = updateImportDataList.Count; + await _dictRep.UpdateAsync(dbDataList); + } + } + + return output; + } + + /// + /// 新增 + /// + /// + /// + public async Task AddAsync(DictAddInput input) + { + if (await _dictRep.Select.AnyAsync(a => a.DictTypeId == input.DictTypeId && a.Name == input.Name)) + { + throw ResultOutput.Exception(_adminLocalizer["字典已存在"]); + } + + if (input.Code.NotNull() && await _dictRep.Select.AnyAsync(a => a.DictTypeId == input.DictTypeId && a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["字典编码已存在"]); + } + + if (input.Value.NotNull() && await _dictRep.Select.AnyAsync(a => a.DictTypeId == input.DictTypeId && a.Value == input.Value)) + { + throw ResultOutput.Exception(_adminLocalizer["字典值已存在"]); + } + + var entity = Mapper.Map(input); + if (entity.Sort == 0) + { + var sort = await _dictRep.Select.Where(a => a.DictTypeId == input.DictTypeId).MaxAsync(a => a.Sort); + entity.Sort = sort + 1; + } + await _dictRep.InsertAsync(entity); + return entity.Id; + } + + /// + /// 修改 + /// + /// + /// + public async Task UpdateAsync(DictUpdateInput input) + { + var entity = await _dictRep.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["字典不存在"]); + } + + if (await _dictRep.Select.AnyAsync(a => a.Id != input.Id && a.DictTypeId == input.DictTypeId && a.Name == input.Name)) + { + throw ResultOutput.Exception(_adminLocalizer["字典已存在"]); + } + + if (input.Code.NotNull() && await _dictRep.Select.AnyAsync(a => a.Id != input.Id && a.DictTypeId == input.DictTypeId && a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["字典编码已存在"]); + } + + if (input.Value.NotNull() && await _dictRep.Select.AnyAsync(a => a.Id != input.Id && a.DictTypeId == input.DictTypeId && a.Value == input.Value)) + { + throw ResultOutput.Exception(_adminLocalizer["字典值已存在"]); + } + + Mapper.Map(input, entity); + await _dictRep.UpdateAsync(entity); + } + + /// + /// 彻底删除 + /// + /// + /// + public async Task DeleteAsync(long id) + { + await _dictRep.DeleteAsync(m => m.Id == id); + } + + /// + /// 批量彻底删除 + /// + /// + /// + public async Task BatchDeleteAsync(long[] ids) + { + await _dictRep.DeleteAsync(a => ids.Contains(a.Id)); + } + + /// + /// 删除 + /// + /// + /// + public async Task SoftDeleteAsync(long id) + { + await _dictRep.SoftDeleteAsync(id); + } + + /// + /// 批量删除 + /// + /// + /// + public async Task BatchSoftDeleteAsync(long[] ids) + { + await _dictRep.SoftDeleteAsync(ids); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/DictType/DictTypeService.cs b/src/modules/admin/ZhonTai.Admin/Services/DictType/DictTypeService.cs new file mode 100644 index 0000000..b7a720d --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/DictType/DictTypeService.cs @@ -0,0 +1,194 @@ +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.DictType; +using ZhonTai.Admin.Domain.Dict; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Services.DictType.Dto; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; + +namespace ZhonTai.Admin.Services.DictType; + +/// +/// 数据字典类型服务 +/// +[Order(61)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class DictTypeService : BaseService, IDictTypeService, IDynamicApi +{ + private readonly AdminRepositoryBase _dictTypeRep; + private readonly AdminRepositoryBase _dictRep; + private readonly AdminLocalizer _adminLocalizer; + + public DictTypeService(AdminRepositoryBase dictTypeRep, + AdminRepositoryBase dictRep, + AdminLocalizer adminLocalizer) + { + _dictTypeRep = dictTypeRep; + _dictRep = dictRep; + _adminLocalizer = adminLocalizer; + } + + /// + /// 查询 + /// + /// + /// + public async Task GetAsync(long id) + { + var result = await _dictTypeRep.GetAsync(id); + return result; + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var key = input.Filter?.Name; + + var list = await _dictTypeRep.Select + .WhereDynamicFilter(input.DynamicFilter) + .WhereIf(key.NotNull(), a => a.Name.Contains(key) || a.Code.Contains(key)) + .Count(out var total) + .OrderByDescending(a => a.Sort) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 新增 + /// + /// + /// + public async Task AddAsync(DictTypeAddInput input) + { + if (await _dictTypeRep.Select.AnyAsync(a => a.Name == input.Name)) + { + throw ResultOutput.Exception(_adminLocalizer["字典类型已存在"]); + } + + if (input.Code.NotNull() && await _dictTypeRep.Select.AnyAsync(a => a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["字典类型编码已存在"]); + } + + var entity = Mapper.Map(input); + if (entity.Sort == 0) + { + var sort = await _dictTypeRep.Select.MaxAsync(a => a.Sort); + entity.Sort = sort + 1; + } + await _dictTypeRep.InsertAsync(entity); + return entity.Id; + } + + /// + /// 修改 + /// + /// + /// + public async Task UpdateAsync(DictTypeUpdateInput input) + { + var entity = await _dictTypeRep.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["字典类型不存在"]); + } + + if (input.Id == input.ParentId) + { + throw ResultOutput.Exception(_adminLocalizer["上级字典类型不能是本字典类型"]); + } + + if (await _dictTypeRep.Select.AnyAsync(a => a.Id != input.Id && a.Name == input.Name)) + { + throw ResultOutput.Exception(_adminLocalizer["字典类型已存在"]); + } + + if (input.Code.NotNull() && await _dictTypeRep.Select.AnyAsync(a => a.Id != input.Id && a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["字典类型编码已存在"]); + } + + var childIdList = await _dictTypeRep.Select + .Where(a => a.Id == input.Id) + .AsTreeCte() + .ToListAsync(a => a.Id); + if (childIdList.Contains(input.ParentId)) + { + throw ResultOutput.Exception(_adminLocalizer["上级字典类型不能是下级字典类型"]); + } + + Mapper.Map(input, entity); + await _dictTypeRep.UpdateAsync(entity); + } + + /// + /// 彻底删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task DeleteAsync(long id) + { + //删除字典数据 + await _dictRep.DeleteAsync(a => a.DictTypeId == id); + + //删除数据字典类型 + await _dictTypeRep.DeleteAsync(a => a.Id == id); + } + + /// + /// 批量彻底删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task BatchDeleteAsync(long[] ids) + { + //删除字典数据 + await _dictRep.DeleteAsync(a => ids.Contains(a.DictTypeId)); + + //删除数据字典类型 + await _dictTypeRep.DeleteAsync(a => ids.Contains(a.Id)); + } + + /// + /// 删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task SoftDeleteAsync(long id) + { + await _dictRep.SoftDeleteAsync(a => a.DictTypeId == id); + await _dictTypeRep.SoftDeleteAsync(id); + } + + /// + /// 批量删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task BatchSoftDeleteAsync(long[] ids) + { + await _dictRep.SoftDeleteAsync(a => ids.Contains(a.DictTypeId)); + await _dictTypeRep.SoftDeleteAsync(ids); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Doc/DocService.cs b/src/modules/admin/ZhonTai.Admin/Services/Doc/DocService.cs new file mode 100644 index 0000000..eb809b9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Doc/DocService.cs @@ -0,0 +1,253 @@ +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Domain.Doc; +using ZhonTai.Admin.Domain.DocImage; +using ZhonTai.Admin.Services.Doc.Dto; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; + +namespace ZhonTai.Admin.Services.Doc; + +/// +/// 文档服务 +/// +[Order(180)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class DocService : BaseService, IDocService, IDynamicApi +{ + private readonly IDocRepository _docRep; + private readonly IDocImageRepository _docImageRep; + private readonly Lazy _fileService; + + public DocService( + IDocRepository docRep, + IDocImageRepository docImageRep, + Lazy fileService + ) + { + _docRep = docRep; + _docImageRep = docImageRep; + _fileService = fileService; + } + + /// + /// 查询分组 + /// + /// + /// + public async Task GetGroupAsync(long id) + { + var result = await _docRep.GetAsync(id); + return result; + } + + /// + /// 查询菜单 + /// + /// + /// + public async Task GetMenuAsync(long id) + { + var result = await _docRep.GetAsync(id); + return result; + } + + /// + /// 查询文档内容 + /// + /// + /// + public async Task GetContentAsync(long id) + { + var result = await _docRep.GetAsync(id); + return result; + } + + /// + /// 查询文档列表 + /// + /// + /// + /// + /// + public async Task> GetListAsync(string key, DateTime? start, DateTime? end) + { + if (end.HasValue) + { + end = end.Value.AddDays(1); + } + + var data = await _docRep + .WhereIf(key.NotNull(), a => a.Name.Contains(key) || a.Label.Contains(key)) + .WhereIf(start.HasValue && end.HasValue, a => a.CreatedTime.Value.BetweenEnd(start.Value, end.Value)) + .OrderBy(a => a.ParentId) + .OrderBy(a => a.Sort) + .ToListAsync(); + + return data; + } + + /// + /// 查询图片列表 + /// + /// + /// + public async Task> GetImageListAsync(long id) + { + var result = await _docImageRep.Select + .Where(a => a.DocumentId == id) + .OrderByDescending(a => a.Id) + .ToListAsync(a => a.Url); + + return result; + } + + /// + /// 新增分组 + /// + /// + /// + public async Task AddGroupAsync(DocAddGroupInput input) + { + var entity = Mapper.Map(input); + await _docRep.InsertAsync(entity); + + return entity.Id; + } + + /// + /// 新增菜单 + /// + /// + /// + public async Task AddMenuAsync(DocAddMenuInput input) + { + var entity = Mapper.Map(input); + await _docRep.InsertAsync(entity); + + return entity.Id; + } + + /// + /// 新增图片 + /// + /// + /// + public async Task AddImageAsync(DocAddImageInput input) + { + var entity = Mapper.Map(input); + await _docImageRep.InsertAsync(entity); + + return entity.Id; + } + + /// + /// 修改分组 + /// + /// + /// + public async Task UpdateGroupAsync(DocUpdateGroupInput input) + { + var entity = await _docRep.GetAsync(input.Id); + entity = Mapper.Map(input, entity); + await _docRep.UpdateAsync(entity); + } + + /// + /// 修改菜单 + /// + /// + /// + public async Task UpdateMenuAsync(DocUpdateMenuInput input) + { + var entity = await _docRep.GetAsync(input.Id); + entity = Mapper.Map(input, entity); + await _docRep.UpdateAsync(entity); + } + + /// + /// 修改文档内容 + /// + /// + /// + public async Task UpdateContentAsync(DocUpdateContentInput input) + { + var entity = await _docRep.GetAsync(input.Id); + entity = Mapper.Map(input, entity); + await _docRep.UpdateAsync(entity); + } + + /// + /// 彻底删除文档 + /// + /// + /// + public async Task DeleteAsync(long id) + { + await _docRep.DeleteAsync(m => m.Id == id); + } + + /// + /// 彻底删除图片 + /// + /// + /// + /// + public async Task DeleteImageAsync(long documentId, string url) + { + await _docImageRep.DeleteAsync(m => m.DocumentId == documentId && m.Url == url); + } + + /// + /// 删除文档 + /// + /// + /// + public async Task SoftDeleteAsync(long id) + { + await _docRep.SoftDeleteAsync(id); + } + + /// + /// 查询精简文档列表 + /// + /// + public async Task> GetPlainListAsync() + { + var documents = await _docRep.Select + .OrderBy(a => a.ParentId) + .OrderBy(a => a.Sort) + .ToListAsync(a => new { a.Id, a.ParentId, a.Label, a.Type, a.Opened }); + + var menus = documents + .Where(a => (new[] { DocType.Group, DocType.Markdown }).Contains(a.Type)) + .Select(a => new + { + a.Id, + a.ParentId, + a.Label, + a.Type, + a.Opened + }); + + return menus; + } + + /// + /// 上传文档图片 + /// + /// + /// + [HttpPost] + public async Task UploadImage([FromForm] DocUploadImageInput input) + { + var fileInfo = await _fileService.Value.UploadFileAsync(input.File); + //保存文档图片 + await AddImageAsync(new DocAddImageInput + { + DocumentId = input.Id, + Url = fileInfo.LinkUrl + }); + return fileInfo.LinkUrl; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Email/EmailSendService.cs b/src/modules/admin/ZhonTai.Admin/Services/Email/EmailSendService.cs new file mode 100644 index 0000000..817ebb3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Email/EmailSendService.cs @@ -0,0 +1,148 @@ +using DotNetCore.CAP; +using ZhonTai.Admin.Contracts.Services.Email; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Services.Email.Events; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Services.Email; + +/// +/// 邮件发送服务 +/// +[Order(230)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class EmailSendService : BaseService, IEmailSendService, IDynamicApi +{ + private readonly ICapPublisher _capPublisher; + + public EmailSendService(ICapPublisher capPublisher) + { + _capPublisher = capPublisher; + } + + /// + /// 发送单封邮件 + /// + /// 收件人邮箱 + /// 收件人姓名 + /// 邮件主题 + /// 邮件内容 + /// 发件人邮箱(可选) + /// 发件人姓名(可选) + /// + public async Task SendSingleEmailAsync(string toEmail, string toName, string subject, string body, string fromEmail = null, string fromName = null) + { + var emailEvent = new EmailSingleSendEvent + { + ToEmail = new EmailSingleSendEvent.Models.EmailModel + { + Address = toEmail, + Name = toName ?? toEmail + }, + Subject = subject, + Body = body + }; + + if (!string.IsNullOrWhiteSpace(fromEmail)) + { + emailEvent.FromEmail = new EmailSingleSendEvent.Models.EmailModel + { + Address = fromEmail, + Name = fromName ?? fromEmail + }; + } + + await _capPublisher.PublishAsync(SubscribeNames.EmailSingleSend, emailEvent); + } + + /// + /// 发送多封邮件 + /// + /// 收件人列表 + /// 邮件主题 + /// 邮件内容 + /// 抄送人列表(可选) + /// 密送人列表(可选) + /// 是否HTML格式 + /// 附件列表(可选) + /// 发件人邮箱(可选) + /// 发件人姓名(可选) + /// + public async Task SendMultipleEmailAsync( + List<(string email, string name)> toEmails, + string subject, + string body, + List<(string email, string name)> ccEmails = null, + List<(string email, string name)> bccEmails = null, + bool isHtml = true, + List attachments = null, + string fromEmail = null, + string fromName = null) + { + var emailEvent = new EmailMultipleSendEvent + { + ToEmails = toEmails?.Select(e => new EmailMultipleSendEvent.Models.EmailModel + { + Address = e.email, + Name = e.name ?? e.email + }).ToList() ?? new List(), + Subject = subject, + Body = body, + IsHtml = isHtml, + Attachments = attachments ?? new List() + }; + + // 设置发件人 + if (!string.IsNullOrWhiteSpace(fromEmail)) + { + emailEvent.FromEmail = new EmailMultipleSendEvent.Models.EmailModel + { + Address = fromEmail, + Name = fromName ?? fromEmail + }; + } + + // 设置抄送人 + if (ccEmails != null && ccEmails.Any()) + { + emailEvent.CcEmails = ccEmails.Select(e => new EmailMultipleSendEvent.Models.EmailModel + { + Address = e.email, + Name = e.name ?? e.email + }).ToList(); + } + + // 设置密送人 + if (bccEmails != null && bccEmails.Any()) + { + emailEvent.BccEmails = bccEmails.Select(e => new EmailMultipleSendEvent.Models.EmailModel + { + Address = e.email, + Name = e.name ?? e.email + }).ToList(); + } + + await _capPublisher.PublishAsync(SubscribeNames.EmailMultipleSend, emailEvent); + } + + /// + /// 发送带附件的邮件 + /// + /// 收件人列表 + /// 邮件主题 + /// 邮件内容 + /// 附件列表 + /// 是否HTML格式 + /// + public async Task SendEmailWithAttachmentsAsync( + List<(string email, string name)> toEmails, + string subject, + string body, + List attachments, + bool isHtml = true) + { + await SendMultipleEmailAsync(toEmails, subject, body, null, null, isHtml, attachments); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Email/EmailService.cs b/src/modules/admin/ZhonTai.Admin/Services/Email/EmailService.cs new file mode 100644 index 0000000..fb7e47f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Email/EmailService.cs @@ -0,0 +1,174 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using DotNetCore.CAP; +using MimeKit; +using MailKit.Net.Smtp; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Services.Email.Events; +using ZhonTai.Admin.Resources; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Admin.Services.Email; + +public class EmailService: ICapSubscribe +{ + private readonly EmailConfig _emailConfig; + private readonly AdminLocalizer _adminLocalizer; + + public EmailService(IOptions emailConfig, AdminLocalizer adminLocalizer) + { + _emailConfig = emailConfig.Value; + _adminLocalizer = adminLocalizer; + } + + /// + /// 邮件单发 + /// + /// + /// + [NonAction] + [CapSubscribe(SubscribeNames.EmailSingleSend)] + public async Task SingleSendAsync(EmailSingleSendEvent @event) + { + var emailConfig = _emailConfig; + + var builder = new BodyBuilder() + { + HtmlBody = @event.Body + }; + var message = new MimeMessage() + { + Subject = @event.Subject, + Body = builder.ToMessageBody() + }; + + var fromEmailName = @event.FromEmail!=null && @event.FromEmail.Name.NotNull() ? @event.FromEmail.Name : emailConfig.FromEmail.Name; + var fromEmailAddress = @event.FromEmail != null && @event.FromEmail.Address.NotNull() ? @event.FromEmail.Address : emailConfig.FromEmail.Address; + message.From.Add(new MailboxAddress(fromEmailName, fromEmailAddress)); + message.To.Add(new MailboxAddress(@event.ToEmail.Name, @event.ToEmail.Address)); + + using var client = new SmtpClient(); + await client.ConnectAsync(emailConfig.Host, emailConfig.Port, emailConfig.UseSsl); + await client.AuthenticateAsync(emailConfig.UserName, emailConfig.Password); + await client.SendAsync(message); + await client.DisconnectAsync(true); + } + + /// + /// 邮件多发 + /// + /// + /// + [NonAction] + [CapSubscribe(SubscribeNames.EmailMultipleSend)] + public async Task MultipleSendAsync(EmailMultipleSendEvent @event) + { + var emailConfig = _emailConfig; + + // 验证收件人 + if (@event.ToEmails == null || !@event.ToEmails.Any()) + { + throw new ArgumentException(_adminLocalizer["请至少指定一个收件人"]); + } + + var builder = new BodyBuilder(); + + // 设置邮件内容 + if (@event.IsHtml) + { + builder.HtmlBody = @event.Body; + } + else + { + builder.TextBody = @event.Body; + } + + // 添加附件 + if (@event.Attachments != null && @event.Attachments.Any()) + { + foreach (var attachment in @event.Attachments) + { + if (!string.IsNullOrWhiteSpace(attachment.Content) && !string.IsNullOrWhiteSpace(attachment.FileName)) + { + try + { + var contentBytes = Convert.FromBase64String(attachment.Content); + var contentType = string.IsNullOrWhiteSpace(attachment.ContentType) ? "application/octet-stream" : attachment.ContentType; + builder.Attachments.Add(attachment.FileName, contentBytes, ContentType.Parse(contentType)); + } + catch (Exception ex) + { + // 记录附件添加失败,但不中断邮件发送 + Console.WriteLine($"添加附件失败: {attachment.FileName}, 错误: {ex.Message}"); + } + } + } + } + + var message = new MimeMessage() + { + Subject = @event.Subject, + Body = builder.ToMessageBody() + }; + + // 设置发件人 + var fromEmailName = @event.FromEmail?.Name?.NotNull() == true ? @event.FromEmail.Name : emailConfig.FromEmail.Name; + var fromEmailAddress = @event.FromEmail?.Address?.NotNull() == true ? @event.FromEmail.Address : emailConfig.FromEmail.Address; + message.From.Add(new MailboxAddress(fromEmailName, fromEmailAddress)); + + // 添加收件人 + foreach (var toEmail in @event.ToEmails.Where(e => !string.IsNullOrWhiteSpace(e.Address))) + { + var name = string.IsNullOrWhiteSpace(toEmail.Name) ? toEmail.Address : toEmail.Name; + message.To.Add(new MailboxAddress(name, toEmail.Address)); + } + + // 添加抄送人 + if (@event.CcEmails != null && @event.CcEmails.Any()) + { + foreach (var ccEmail in @event.CcEmails.Where(e => !string.IsNullOrWhiteSpace(e.Address))) + { + var name = string.IsNullOrWhiteSpace(ccEmail.Name) ? ccEmail.Address : ccEmail.Name; + message.Cc.Add(new MailboxAddress(name, ccEmail.Address)); + } + } + + // 添加密送人 + if (@event.BccEmails != null && @event.BccEmails.Any()) + { + foreach (var bccEmail in @event.BccEmails.Where(e => !string.IsNullOrWhiteSpace(e.Address))) + { + var name = string.IsNullOrWhiteSpace(bccEmail.Name) ? bccEmail.Address : bccEmail.Name; + message.Bcc.Add(new MailboxAddress(name, bccEmail.Address)); + } + } + + // 发送邮件 + using var client = new SmtpClient(); + await client.ConnectAsync(emailConfig.Host, emailConfig.Port, emailConfig.UseSsl); + await client.AuthenticateAsync(emailConfig.UserName, emailConfig.Password); + await client.SendAsync(message); + await client.DisconnectAsync(true); + } + + /// + /// 发送邮箱验证码 + /// + /// + /// + [NonAction] + [CapSubscribe(SubscribeNames.EmailSendCode)] + public async Task SendCodeAsync(EmailSendCodeEvent @event) + { + await SingleSendAsync(new EmailSingleSendEvent + { + ToEmail = new EmailSingleSendEvent.Models.EmailModel + { + Address = @event.ToEmail.Address, + }, + Subject = _adminLocalizer["邮箱验证码"], + Body = _adminLocalizer["

你正在进行邮箱登录操作

邮箱验证码: {0},有效期5分钟

如非本人操作,请忽略。

", @event.Code] + }); + } +} diff --git a/src/modules/admin/ZhonTai.Admin/Services/Feedback/FeedbackService.cs b/src/modules/admin/ZhonTai.Admin/Services/Feedback/FeedbackService.cs new file mode 100644 index 0000000..db1f1b4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Feedback/FeedbackService.cs @@ -0,0 +1,469 @@ +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Contracts.Domain.Feedback; +using ZhonTai.Admin.Contracts.Services.Feedback; +using ZhonTai.Admin.Resources; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Core; +using DotNetCore.CAP; +using ZhonTai.Admin.Services.Email.Events; +using ZhonTai.Common.Extensions; +using System.Linq; +using ZhonTai.Admin.Domain.User; + +namespace ZhonTai.Admin.Services.Feedback; + +/// +/// 意见反馈服务 +/// +[Order(150)] +[DynamicApi(Area = AdminConsts.AreaName)] +public partial class FeedbackService : BaseService, IFeedbackService, IDynamicApi +{ + private readonly AdminRepositoryBase _feedbackRep; + private readonly AdminRepositoryBase _teamProcessorRep; + private readonly AdminRepositoryBase _userRep; + private readonly AdminLocalizer _adminLocalizer; + private readonly ICapPublisher _capPublisher; + + public FeedbackService( + AdminRepositoryBase feedbackRep, + AdminRepositoryBase teamProcessorRep, + AdminLocalizer adminLocalizer, + AdminRepositoryBase userRep, + ICapPublisher capPublisher + ) + { + _feedbackRep = feedbackRep; + _teamProcessorRep = teamProcessorRep; + _adminLocalizer = adminLocalizer; + _capPublisher = capPublisher; + _userRep = userRep; + } + + /// + /// 提交意见反馈 + /// + /// 反馈输入 + /// 反馈ID + [HttpPost] + public async Task SubmitFeedbackAsync(FeedbackSubmitInput input) + { + var user = _userRep.Select.Where(a => a.Id == User.Id).First(); + input.FeedbackPersonId = User.Id; + + var entity = Mapper.Map(input); + entity.Status = FeedbackStatusEnum.Pending; + entity.RelatedPersons = input.RelatedPersons; + entity.FeedbackPersonEmail = user.Email; + entity.FeedbackPersonName = user.Name; + + // 查找对应的团队负责人 + var teamProcessor = await _teamProcessorRep.Select + .Where(a => a.Id == Convert.ToInt64(input.FeedbackTeam)) + .Where(a => a.Enabled == true) + .FirstAsync(); + + // 处理人信息 + entity.ProcessorId = teamProcessor.ProcessorId; + entity.ProcessorName = teamProcessor.ProcessorName; + entity.FeedbackTeam = teamProcessor.TeamName; + + await _feedbackRep.InsertAsync(entity); + + if (teamProcessor != null) + { + // 发送邮件通知团队负责人 + await SendEmailToProcessorAsync(entity, teamProcessor, "新反馈通知"); + } + + return entity.Id; + } + + /// + /// 获取反馈分页列表(用户端) + /// + /// 分页查询输入 + /// 反馈分页数据 + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var title = input.Filter?.Title; + var feedbackType = input.Filter?.FeedbackType; + var status = input.Filter?.Status; + var createdTimeStart = input.Filter?.CreatedTimeStart; + var createdTimeEnd = input.Filter?.CreatedTimeEnd; + + var list = await _feedbackRep.Select.Where(a => a.FeedbackPersonId == User.Id) + + .WhereIf(title.NotNull(), a => a.Title.Contains(title)) + .WhereIf(feedbackType.HasValue, a => a.FeedbackType == feedbackType.Value) + .WhereIf(status.HasValue, a => a.Status == status.Value) + .WhereIf(createdTimeStart.HasValue, a => a.CreatedTime >= createdTimeStart.Value) + .WhereIf(createdTimeEnd.HasValue, a => a.CreatedTime <= createdTimeEnd.Value.AddDays(1)) + .WhereDynamicFilter(input.DynamicFilter) + .Count(out var total) + .OrderByDescending(true, a => a.Id) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(a => new FeedbackListOutput + { + Id = a.Id, + Title = a.Title, + FeedbackType = a.FeedbackType, + FeedbackTeam = a.FeedbackTeam, + FeedbackPersonName = a.FeedbackPersonName, + FeedbackPersonEmail = a.FeedbackPersonEmail, + Status = a.Status, + ProcessorName = a.ProcessorName, + ProcessTime = a.ProcessTime, + ContentSummary = a.Content, + CreatedTime = a.CreatedTime + }); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + foreach (var item in data.List) + { + item.FeedbackTypeName = GetFeedbackTypeName(item.FeedbackType); + item.StatusName = GetStatusName(item.Status); + } + + return data; + } + + /// + /// 获取待处理反馈列表(处理人端) + /// + /// 分页查询输入 + /// 反馈分页数据 + [HttpPost] + public async Task> GetPendingPageAsync(PageInput input) + { + + var title = input.Filter?.Title; + var feedbackType = input.Filter?.FeedbackType; + var feedbackPersonName = input.Filter?.FeedbackPersonName; + var status = input.Filter?.Status; + var createdTimeStart = input.Filter?.CreatedTimeStart; + var createdTimeEnd = input.Filter?.CreatedTimeEnd; + + var list = await _feedbackRep.Select + .Where(a => a.ProcessorId == User.Id) + .WhereDynamicFilter(input.DynamicFilter) + .WhereIf(title.NotNull(), a => a.Title.Contains(title)) + .WhereIf(feedbackType.HasValue, a => a.FeedbackType == feedbackType.Value) + .WhereIf(feedbackPersonName.NotNull(), a => a.FeedbackPersonName.Contains(feedbackPersonName)) + .WhereIf(status.HasValue, a => a.Status == status.Value) + .WhereIf(createdTimeStart.HasValue, a => a.CreatedTime >= createdTimeStart.Value) + .WhereIf(createdTimeEnd.HasValue, a => a.CreatedTime <= createdTimeEnd.Value.AddDays(1)) + .WhereDynamicFilter(input.DynamicFilter) + .Count(out var total) + .OrderByDescending(true, a => a.Id) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(a => new FeedbackListOutput + { + Id = a.Id, + Title = a.Title, + FeedbackType = a.FeedbackType, + //FeedbackTypeName = GetFeedbackTypeName(a.FeedbackType), + FeedbackTeam = a.FeedbackTeam, + FeedbackPersonName = a.FeedbackPersonName, + FeedbackPersonEmail = a.FeedbackPersonEmail, + Status = a.Status, + //StatusName = GetStatusName(a.Status), + ProcessorName = a.ProcessorName, + ProcessTime = a.ProcessTime, + ContentSummary = a.Content, + CreatedTime = a.CreatedTime + }); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + foreach (var item in data.List) + { + item.FeedbackTypeName = GetFeedbackTypeName(item.FeedbackType); + item.StatusName = GetStatusName(item.Status); + } + + return data; + } + + /// + /// 获取反馈详情 + /// + /// 反馈ID + /// 反馈详情 + public async Task GetAsync(long id) + { + var entity = await _feedbackRep.Select + .Where(a => a.Id == id) + .FirstAsync(); + + if (entity == null) + { + throw ResultOutput.Exception(_adminLocalizer["反馈不存在"]); + } + + var output = Mapper.Map(entity); + output.FeedbackTypeName = GetFeedbackTypeName(entity.FeedbackType); + output.StatusName = GetStatusName(entity.Status); + output.ContentSummary = entity.Content.Length > 100 ? entity.Content.Substring(0, 100) + "..." : entity.Content; + + return output; + } + + /// + /// 标记为处理中 + /// + /// 处理输入 + /// 处理结果 + [HttpPost] + public async Task MarkAsProcessingAsync(FeedbackProcessInput input) + { + return await UpdateFeedbackStatusAsync(input, FeedbackStatusEnum.Processing, "处理中状态更新"); + } + + /// + /// 标记为已处理 + /// + /// 处理输入 + /// 处理结果 + [HttpPost] + public async Task MarkAsCompletedAsync(FeedbackProcessInput input) + { + return await UpdateFeedbackStatusAsync(input, FeedbackStatusEnum.Completed, "已处理完成"); + } + + /// + /// 标记为已驳回 + /// + /// 驳回输入 + /// 驳回结果 + [HttpPost] + public async Task MarkAsRejectedAsync(FeedbackProcessInput input) + { + return await UpdateFeedbackStatusAsync(input, FeedbackStatusEnum.Rejected, "反馈已驳回"); + } + + /// + /// 获取团队负责人列表(用于下拉选择) + /// + /// 团队负责人列表 + public async Task> GetTeamProcessorsAsync() + { + var list = await _teamProcessorRep.Select + .Where(a => a.Enabled == true) + .OrderBy(a => a.TeamName) + .OrderBy(a => a.Site) + .OrderBy(a => a.Sort) + .ToListAsync(a => new FeedbackTeamProcessorOutput + { + Id = a.Id, + TeamName = a.TeamName, + Site = a.Site, + ProcessorId = a.ProcessorId, + ProcessorName = a.ProcessorName, + ProcessorEmail = a.ProcessorEmail, + DisplayName = $"{a.TeamName}-{a.Site}-{a.ProcessorName}" + }); + + return list; + } + + /// + /// 添加团队负责人配置 + /// + /// 团队负责人配置输入 + /// 添加结果 + [HttpPost] + public async Task AddTeamProcessorAsync(FeedbackTeamProcessorAddInput input) + { + // 检查是否已存在相同的团队-站点组合 + var exists = await _teamProcessorRep.Select + .Where(a => a.TeamName == input.TeamName && a.Site == input.Site) + .AnyAsync(); + + if (exists) + { + throw ResultOutput.Exception(_adminLocalizer["该团队在此站点的负责人配置已存在"]); + } + + var entity = Mapper.Map(input); + await _teamProcessorRep.InsertAsync(entity); + + return entity.Id; + } + + /// + /// 初始化预定义的团队负责人配置数据 + /// + /// 初始化结果 + [HttpPost] + public async Task InitTeamProcessorSeedDataAsync() + { + // 检查是否已有数据 + var hasData = await _teamProcessorRep.Select.AnyAsync(); + if (hasData) + { + throw ResultOutput.Exception(_adminLocalizer["团队负责人配置数据已存在,无需重复初始化"]); + } + + var seedData = FeedbackTeamProcessorSeedData.GetSeedData(); + var entities = Mapper.Map>(seedData); + + await _teamProcessorRep.InsertAsync(entities); + + return true; + } + + #region 私有方法 + + /// + /// 更新反馈状态 + /// + private async Task UpdateFeedbackStatusAsync(FeedbackProcessInput input, FeedbackStatusEnum status, string notificationTitle) + { + var entity = await _feedbackRep.GetAsync(input.FeedbackId); + if (entity == null) + { + throw ResultOutput.Exception(_adminLocalizer["反馈不存在"]); + } + + // 更新状态 + entity.Status = status; + entity.ProcessorId = User.Id; + entity.ProcessorName = User.Name; + entity.ProcessTime = DateTime.Now; + entity.ProcessRemark = input.ProcessRemark; + + await _feedbackRep.UpdateAsync(entity); + + // 发送邮件通知反馈人 + if (entity.FeedbackPersonEmail.NotNull()) + { + await SendEmailToUserAsync(entity, notificationTitle); + } + + return true; + } + + /// + /// 发送邮件给团队负责人 + /// + private async Task SendEmailToProcessorAsync(FeedbackEntity feedback, FeedbackTeamProcessorEntity processor, string title) + { + if (processor.ProcessorEmail.IsNull()) + return; + + await _capPublisher.PublishAsync(SubscribeNames.EmailMultipleSend, new EmailMultipleSendEvent + { + ToEmails = new List + { + new() { Address = processor.ProcessorEmail, Name = processor.ProcessorName } + }, + Subject = $"【{title}】{feedback.Title}", + Body = $@" +
+

【{title}】{feedback.Title}

+
+

反馈类型:{GetFeedbackTypeName(feedback.FeedbackType)}

+

被反馈团队:{feedback.FeedbackTeam}

+

反馈人:{feedback.FeedbackPersonName}

+

联系邮箱:{feedback.FeedbackPersonEmail}

+ {(feedback.RelatedPersons.NotNull() ? $"

相关知情人:{feedback.RelatedPersons}

" : "")} +

反馈内容:

+
+ {feedback.Content} +
+ {(feedback.AttachmentPaths.NotNull() ? $"

附件:{feedback.AttachmentPaths}

" : "")} +

提交时间:{feedback.CreatedTime:yyyy-MM-dd HH:mm:ss}

+
+

+ 请及时处理此意见反馈。这是一封系统自动发送的通知邮件,请勿回复。 +

+
", + IsHtml = true + }); + } + + /// + /// 发送邮件给反馈用户 + /// + private async Task SendEmailToUserAsync(FeedbackEntity feedback, string title) + { + await _capPublisher.PublishAsync(SubscribeNames.EmailMultipleSend, new EmailMultipleSendEvent + { + ToEmails = new List + { + new() { Address = feedback.FeedbackPersonEmail, Name = feedback.FeedbackPersonName ?? feedback.FeedbackPersonEmail } + }, + Subject = $"【{title}】{feedback.Title}", + Body = $@" +
+

【{title}】{feedback.Title}

+
+

反馈状态:{GetStatusName(feedback.Status)}

+

处理人:{feedback.ProcessorName}

+

处理时间:{feedback.ProcessTime:yyyy-MM-dd HH:mm:ss}

+ {(feedback.ProcessRemark.NotNull() ? $"

处理说明:{feedback.ProcessRemark}

" : "")} +
+
+

您的反馈内容:

+
+ {feedback.Content} +
+
+

+ 感谢您的反馈!这是一封系统自动发送的处理结果通知邮件,请勿回复。 +

+
", + IsHtml = true + }); + } + + /// + /// 获取反馈类型名称 + /// + private static string GetFeedbackTypeName(FeedbackTypeEnum feedbackType) + { + return feedbackType switch + { + FeedbackTypeEnum.Bug => "Bug", + FeedbackTypeEnum.Requirement => "需求", + FeedbackTypeEnum.Suggestion => "建议", + FeedbackTypeEnum.Complaint => "投诉", + FeedbackTypeEnum.Consultation => "咨询", + FeedbackTypeEnum.Other => "其它", + _ => "未知" + }; + } + + /// + /// 获取状态名称 + /// + private static string GetStatusName(FeedbackStatusEnum status) + { + return status switch + { + FeedbackStatusEnum.Pending => "待处理", + FeedbackStatusEnum.Processing => "处理中", + FeedbackStatusEnum.Completed => "已处理", + FeedbackStatusEnum.Rejected => "已驳回", + _ => "未知" + }; + } + + #endregion +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/File/FileService.cs b/src/modules/admin/ZhonTai.Admin/Services/File/FileService.cs new file mode 100644 index 0000000..0072dd9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/File/FileService.cs @@ -0,0 +1,289 @@ +using System.ComponentModel.DataAnnotations; +using OnceMi.AspNetCore.OSS; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using ZhonTai.Admin.Core.Helpers; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain; +using ZhonTai.Admin.Domain.Dto; +using ZhonTai.Admin.Services.Dto; +using ZhonTai.Admin.Resources; +using ZhonTai.Common.Files; +using ZhonTai.Common.Helpers; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; + +namespace ZhonTai.Admin.Services; + +/// +/// 文件服务 +/// +[Order(110)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class FileService : BaseService, IFileService, IDynamicApi +{ + private readonly IFileRepository _fileRep; + private readonly IOSSServiceFactory _oSSServiceFactory; + private readonly OSSConfig _oSSConfig; + private readonly IHttpContextAccessor _httpContextAccessor; + private readonly AdminLocalizer _adminLocalizer; + + public FileService( + IFileRepository fileRep, + IOSSServiceFactory oSSServiceFactory, + IOptions oSSConfig, + IHttpContextAccessor httpContextAccessor, + AdminLocalizer adminLocalizer + ) + { + _fileRep = fileRep; + _oSSServiceFactory = oSSServiceFactory; + _oSSConfig = oSSConfig.Value; + _httpContextAccessor = httpContextAccessor; + _adminLocalizer = adminLocalizer; + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var fileName = input.Filter?.FileName; + + var list = await _fileRep.Select + .WhereDynamicFilter(input.DynamicFilter) + .WhereIf(fileName.NotNull(), a => a.FileName.Contains(fileName)) + .Count(out var total) + .OrderByDescending(true, c => c.Id) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(a => new FileGetPageOutput { ProviderName = a.Provider.ToString() }); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 删除 + /// + /// + /// + [HttpPost] + public async Task DeleteAsync(FileDeleteInput input) + { + var file = await _fileRep.GetAsync(input.Id); + if (file == null) + { + return; + } + + var shareFile = await _fileRep.Where(a=>a.Id != input.Id && a.LinkUrl == file.LinkUrl).AnyAsync(); + if (!shareFile) + { + if(file.Provider.HasValue) + { + var oSSService = _oSSServiceFactory.Create(file.Provider.ToString()); + var oSSOptions = _oSSConfig.OSSConfigs.Where(a => a.Enable && a.Provider == file.Provider).FirstOrDefault(); + var enableOss = oSSOptions != null && oSSOptions.Enable; + if (enableOss) + { + var filePath = Path.Combine(file.FileDirectory, file.SaveFileName + file.Extension).ToPath(); + await oSSService.RemoveObjectAsync(file.BucketName, filePath); + } + } + else + { + var env = LazyGetRequiredService(); + var filePath = Path.Combine(env.WebRootPath, file.FileDirectory, file.SaveFileName + file.Extension).ToPath(); + if (System.IO.File.Exists(filePath)) + { + System.IO.File.Delete(filePath); + } + } + } + + await _fileRep.DeleteAsync(file.Id); + } + + /// + /// 上传文件 + /// + /// 文件 + /// 文件目录 + /// 文件重命名 + /// + public async Task UploadFileAsync([Required] IFormFile file, string fileDirectory = "", bool fileReName = true) + { + var localUploadConfig = _oSSConfig.LocalUploadConfig; + + var extention = Path.GetExtension(file.FileName).ToLower(); + var hasIncludeExtension = localUploadConfig.IncludeExtension?.Length > 0; + if (hasIncludeExtension && !localUploadConfig.IncludeExtension.Contains(extention)) + { + throw new Exception(_adminLocalizer["不允许上传{0}文件格式", extention]); + } + var hasExcludeExtension = localUploadConfig.ExcludeExtension?.Length > 0; + if (hasExcludeExtension && localUploadConfig.ExcludeExtension.Contains(extention)) + { + throw new Exception(_adminLocalizer["不允许上传{0}文件格式", extention]); + } + + var fileLenth = file.Length; + if (fileLenth > localUploadConfig.MaxSize) + { + throw new Exception(_adminLocalizer["文件大小不能超过{0}", new FileSize(localUploadConfig.MaxSize)]); + } + + var oSSOptions = _oSSConfig.OSSConfigs.Where(a => a.Enable && a.Provider == _oSSConfig.Provider).FirstOrDefault(); + var enableOss = oSSOptions != null && oSSOptions.Enable; + var enableMd5 = enableOss ? oSSOptions.Md5 : localUploadConfig.Md5; + var md5 = string.Empty; + if (enableMd5) + { + md5 = MD5Encrypt.GetHash(file.OpenReadStream()); + var md5FileEntity = await _fileRep.WhereIf(enableOss, a => a.Provider == oSSOptions.Provider).Where(a => a.Md5 == md5).FirstAsync(); + if (md5FileEntity != null) + { + var sameFileEntity = new FileEntity + { + Provider = md5FileEntity.Provider, + BucketName = md5FileEntity.BucketName, + FileGuid = FreeUtil.NewMongodbId(), + SaveFileName = md5FileEntity.SaveFileName, + FileName = Path.GetFileNameWithoutExtension(file.FileName), + Extension = extention, + FileDirectory = md5FileEntity.FileDirectory, + Size = md5FileEntity.Size, + SizeFormat = md5FileEntity.SizeFormat, + LinkUrl = md5FileEntity.LinkUrl, + Md5 = md5, + }; + sameFileEntity = await _fileRep.InsertAsync(sameFileEntity); + return sameFileEntity; + } + } + + if (fileDirectory.IsNull()) + { + fileDirectory = localUploadConfig.Directory; + if (localUploadConfig.DateTimeDirectory.NotNull()) + { + fileDirectory = Path.Combine(fileDirectory, DateTime.Now.ToString(localUploadConfig.DateTimeDirectory)).ToPath(); + } + } + + var fileSize = new FileSize(fileLenth); + var fileEntity = new FileEntity + { + Provider = oSSOptions?.Provider, + BucketName = oSSOptions?.BucketName, + FileGuid = FreeUtil.NewMongodbId(), + FileName = Path.GetFileNameWithoutExtension(file.FileName), + Extension = extention, + FileDirectory = fileDirectory, + Size = fileSize.Size, + SizeFormat = fileSize.ToString(), + Md5 = md5 + }; + fileEntity.SaveFileName = fileReName ? fileEntity.FileGuid.ToString() : fileEntity.FileName; + + var filePath = Path.Combine(fileDirectory, fileEntity.SaveFileName + fileEntity.Extension).ToPath(); + var url = string.Empty; + if (enableOss) + { + url = oSSOptions.Url; + if (url.IsNull()) + { + url = oSSOptions.Provider switch + { + OSSProvider.Minio => $"{oSSOptions.Endpoint}/{oSSOptions.BucketName}", + OSSProvider.Aliyun => $"{oSSOptions.BucketName}.{oSSOptions.Endpoint}", + OSSProvider.QCloud => $"{oSSOptions.BucketName}-{oSSOptions.Endpoint}.cos.{oSSOptions.Region}.myqcloud.com", + OSSProvider.Qiniu => $"{oSSOptions.BucketName}.{oSSOptions.Region}.qiniucs.com", + OSSProvider.HuaweiCloud => $"{oSSOptions.BucketName}.{oSSOptions.Endpoint}", + _ => "" + }; + + if (url.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["请配置{0}的Url参数", oSSOptions.Provider]); + } + + var urlProtocol = oSSOptions.IsEnableHttps ? "https" : "http"; + fileEntity.LinkUrl = $"{urlProtocol}://{url}/{filePath}"; + } + else + { + fileEntity.LinkUrl = $"{url}/{filePath}"; + } + } + else + { + string scheme = _httpContextAccessor.HttpContext.Request.Scheme; + string host = _httpContextAccessor.HttpContext.Request.Host.Value; + string httpHost = $"{scheme}://{host}"; + + if (_httpContextAccessor.HttpContext.Request.Headers.TryGetValue("X-Original", out var original)) + { + httpHost = original.FirstOrDefault(); + } + else if (_httpContextAccessor.HttpContext.Request.Headers.TryGetValue("X-Forwarded-Proto", out var forwardedProto) && + _httpContextAccessor.HttpContext.Request.Headers.TryGetValue("X-Forwarded-Host", out var forwardedHost)) + { + httpHost = $"{forwardedProto.FirstOrDefault()}://{forwardedHost.FirstOrDefault()}"; + } + + fileEntity.LinkUrl = $"{(httpHost.EndsWith("/") ? httpHost : httpHost + "/")}{filePath}"; + } + + if (enableOss) + { + var oSSService = _oSSServiceFactory.Create(_oSSConfig.Provider.ToString()); + await oSSService.PutObjectAsync(oSSOptions.BucketName, filePath, file.OpenReadStream()); + } + else + { + var uploadHelper = LazyGetRequiredService(); + var env = LazyGetRequiredService(); + fileDirectory = Path.Combine(env.WebRootPath, fileDirectory).ToPath(); + if (!Directory.Exists(fileDirectory)) + { + Directory.CreateDirectory(fileDirectory); + } + filePath = Path.Combine(env.WebRootPath, filePath).ToPath(); + await uploadHelper.SaveAsync(file, filePath); + } + + fileEntity = await _fileRep.InsertAsync(fileEntity); + + return fileEntity; + } + + /// + /// 上传多文件 + /// + /// 文件列表 + /// 文件目录 + /// 文件重命名 + /// + public async Task> UploadFilesAsync([Required] IFormFileCollection files, string fileDirectory = "", bool fileReName = true) + { + var fileList = new List(); + foreach (var file in files) + { + fileList.Add(await UploadFileAsync(file, fileDirectory, fileReName)); + } + return fileList; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/LoginLog/LoginLogService.cs b/src/modules/admin/ZhonTai.Admin/Services/LoginLog/LoginLogService.cs new file mode 100644 index 0000000..b903c41 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/LoginLog/LoginLogService.cs @@ -0,0 +1,103 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.LoginLog; +using ZhonTai.Admin.Services.LoginLog.Dto; +using ZhonTai.Common.Helpers; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; + +namespace ZhonTai.Admin.Services.LoginLog; + +/// +/// 登录日志服务 +/// +[Order(190)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class LoginLogService : BaseService, ILoginLogService, IDynamicApi +{ + private readonly IHttpContextAccessor _context; + private readonly ILoginLogRepository _loginLogRep; + + public LoginLogService( + IHttpContextAccessor context, + ILoginLogRepository loginLogRep + ) + { + _context = context; + _loginLogRep = loginLogRep; + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var select = _loginLogRep.Select.WhereDynamicFilter(input.DynamicFilter); + if (User.PlatformAdmin) + { + select = select.DisableGlobalFilter(); + } + + if(input.Filter != null) + { + var addStartTime = input.Filter.AddStartTime; + var addEndTime = input.Filter.AddEndTime; + select = select + .WhereIf(input.Filter.CreatedUserName.NotNull(), a => a.CreatedUserName.Contains(input.Filter.CreatedUserName)) + .WhereIf(input.Filter.Status.HasValue, a => a.Status == input.Filter.Status) + .WhereIf(input.Filter.IP.NotNull(), a => a.IP.Contains(input.Filter.IP)) + .WhereIf(addStartTime.HasValue && !addEndTime.HasValue, a => a.CreatedTime >= addStartTime) + .WhereIf(addEndTime.HasValue && !addStartTime.HasValue, a => a.CreatedTime < addEndTime.Value.AddDays(1)) + .WhereIf(addStartTime.HasValue && addEndTime.HasValue, a => a.CreatedTime.Value.BetweenEnd(addStartTime.Value, addEndTime.Value.AddDays(1))) + ; + } + + var list = await select + .Count(out var total) + .OrderByDescending(true, c => c.Id) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 新增 + /// + /// + /// + public async Task AddAsync(LoginLogAddInput input) + { + if(input.IP.IsNull()) + input.IP = IPHelper.GetIP(_context?.HttpContext?.Request); + + var entity = Mapper.Map(input); + + string ua = _context?.HttpContext?.Request?.Headers?.UserAgent; + if (ua.NotNull()) + { + var client = UAParser.Parser.GetDefault().Parse(ua); + var device = client.Device.Family; + device = device.ToLower() == "other" ? "" : device; + entity.Browser = client.UA.Family; + entity.Os = client.OS.Family; + entity.Device = device; + entity.BrowserInfo = ua; + } + + await _loginLogRep.InsertAsync(entity); + + return entity.Id; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Msg/MsgService.cs b/src/modules/admin/ZhonTai.Admin/Services/Msg/MsgService.cs new file mode 100644 index 0000000..2f55a5b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Msg/MsgService.cs @@ -0,0 +1,398 @@ +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.Msg; +using ZhonTai.Admin.Resources; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Services.Msg.Dto; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core; +using DotNetCore.CAP; +using Microsoft.AspNetCore.Authorization; +using ZhonTai.Admin.Services.Email.Events; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Admin.Services.Msg; + +/// +/// 消息服务 +/// +[Order(20)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class MsgService : BaseService, IDynamicApi +{ + private readonly AdminRepositoryBase _msgRep; + private readonly AdminRepositoryBase _userRep; + private readonly AdminRepositoryBase _msgUserRep; + private readonly AdminLocalizer _adminLocalizer; + private readonly ICapPublisher _capPublisher; + + public MsgService( + AdminRepositoryBase msgRep, + AdminRepositoryBase userRep, + AdminRepositoryBase msgUserRep, + AdminLocalizer adminLocalizer, + ICapPublisher capPublisher + ) + { + _msgRep = msgRep; + _userRep = userRep; + _msgUserRep = msgUserRep; + _adminLocalizer = adminLocalizer; + _capPublisher = capPublisher; + } + + /// + /// 查询 + /// + /// + /// + public async Task GetAsync(long id) + { + var output = await _msgRep.Select + .WhereDynamic(id) + .ToOneAsync(); + + return output; + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var title = input.Filter?.Title; + var msgType = input.Filter?.MsgTypeValue; + var source = input.Filter?.Source; + + var list = await _msgRep.Select + .WhereDynamicFilter(input.DynamicFilter) + .WhereIf(title.NotNull(), a => a.Title.Contains(title)) + .WhereIf(msgType.HasValue,a=> a.TypeId == msgType.Value) + .WhereIf(source == 1, a => a.PublishTime.HasValue == false || (a.PublishTime.HasValue && a.PublishTime <= DateTime.Now)) + .Count(out var total) + .OrderByDescending(true, a => a.Id) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(a => new MsgGetPageOutput { TypeName = a.Type.Name }); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 查询消息用户列表 + /// + /// + /// + public async Task> GetMsgUserListAsync([FromQuery] MsgGetMsgUserListInput input) + { + var list = await _userRep.Select.From() + .InnerJoin(a => a.t2.UserId == a.t1.Id) + .Where(a => a.t2.MsgId == input.MsgId) + .WhereIf(input.Name.NotNull(), a => a.t1.Name.Contains(input.Name)) + .OrderByDescending(a => a.t1.Id) + .ToListAsync(a=> new MsgGetMsgUserListOutput + { + IsRead = a.t2.IsRead, + ReadTime = a.t2.ReadTime, + }); + + return list; + } + + /// + /// 添加消息用户 + /// + /// + /// + public async Task AddMsgUserAsync(MsgAddMsgUserListInput input) + { + var msgId = input.MsgId; + var userIds = await _msgUserRep.Select.Where(a => a.MsgId == msgId).ToListAsync(a => a.UserId); + var insertUserIds = input.UserIds.Except(userIds); + + var msg = await _msgRep.GetAsync(msgId); + + if (insertUserIds != null && insertUserIds.Any()) + { + var userMsgList = insertUserIds.Select(userId => new MsgUserEntity + { + UserId = userId, + MsgId = msgId, + IsSendEmail = msg.Status == MsgStatusEnum.Published + }).ToList(); + + // 发送邮件 + if(msg.Status == MsgStatusEnum.Published) + { + // 查询需要发送邮件的用户信息 + var users = await _userRep.Select + .Where(a => insertUserIds.Contains(a.Id)) + .Where(a => a.Email.NotNull() && a.Email != "") + .ToListAsync(a => new { a.Id, a.Name, a.Email }); + + if (users.Any()) + { + // 构建收件人列表 + var toEmails = users.Select(u => new EmailMultipleSendEvent.Models.EmailModel + { + Address = u.Email, + Name = u.Name ?? u.Email + }).ToList(); + + // 发送多发邮件 + await _capPublisher.PublishAsync(SubscribeNames.EmailMultipleSend, new EmailMultipleSendEvent + { + ToEmails = toEmails, + Subject = $"【系统消息】{msg.Title}", + Body = $@" +
+

{msg.Title}

+
+ {msg.Content} +
+

+ 这是一封系统自动发送的消息通知邮件,请勿回复。 +

+
", + IsHtml = true + }); + } + } + + // 保存数据 + await _msgUserRep.InsertAsync(userMsgList); + } + } + + /// + /// 处理定时发布的消息 + /// + /// + [HttpPost] + [AllowAnonymous] + public async Task ProcessScheduledMessagesAsync() + { + var currentTime = DateTime.Now; + var processedCount = 0; + + // 查询状态为定时发布且发布时间已到的消息 + var scheduledMessages = await _msgRep.Select + .Where(a => a.Status == MsgStatusEnum.Scheduled) + .Where(a => a.PublishTime.HasValue && a.PublishTime.Value <= currentTime) + .ToListAsync(); + + foreach (var msg in scheduledMessages) + { + // 查询该消息下未发送邮件的用户 + var unsentUsers = await _msgUserRep.Select + .From() + .InnerJoin(a => a.t2.Id == a.t1.UserId) + .Where(a => a.t1.MsgId == msg.Id) + .Where(a => a.t1.IsSendEmail == false) + .ToListAsync(a => new { + MsgUserId = a.t1.Id, + UserId = a.t2.Id, + UserName = a.t2.Name, + UserEmail = a.t2.Email + }); + + if (unsentUsers.Count > 0) + { + // 构建收件人列表 + var toEmails = unsentUsers.Select(u => new EmailMultipleSendEvent.Models.EmailModel + { + Address = u.UserEmail, + Name = u.UserName ?? u.UserEmail + }).ToList(); + + // 发送多发邮件 + await _capPublisher.PublishAsync(SubscribeNames.EmailMultipleSend, new EmailMultipleSendEvent + { + ToEmails = toEmails, + Subject = $"【定时消息】{msg.Title}", + Body = $@" +
+

{msg.Title}

+
+ {msg.Content} +
+

+ 这是一封定时发送的系统消息通知邮件,发布时间:{msg.PublishTime:yyyy-MM-dd HH:mm:ss},请勿回复。 +

+
", + IsHtml = true + }); + + // 更新这些用户的邮件发送状态 + var msgUserIds = unsentUsers.Select(u => u.MsgUserId).ToArray(); + await _msgUserRep.UpdateDiy + .Set(a => a.IsSendEmail == true) + .Where(a => msgUserIds.Contains(a.Id)) + .ExecuteAffrowsAsync(); + + processedCount += unsentUsers.Count; + } + + // 可选:将消息状态更新为已发布 + await _msgRep.UpdateDiy + .Set(a => a.Status == MsgStatusEnum.Published) + .Where(a => a.Id == msg.Id) + .ExecuteAffrowsAsync(); + } + + return processedCount; + } + + /// + /// 查询所有待处理的定时消息 + /// + /// + [HttpGet] + public async Task> GetPendingScheduledMessagesAsync() + { + var currentTime = DateTime.Now; + + var messages = await _msgRep.Select + .Where(a => a.Status == MsgStatusEnum.Scheduled) + .Where(a => a.PublishTime.HasValue && a.PublishTime.Value <= currentTime) + .ToListAsync(); + + return messages; + } + + /// + /// 查询指定消息的未发送邮件用户列表 + /// + /// 消息ID + /// + [HttpGet] + public async Task> GetUnsentEmailUsersAsync(long msgId) + { + var list = await _userRep.Select.From() + .InnerJoin(a => a.t2.UserId == a.t1.Id) + .Where(a => a.t2.MsgId == msgId) + .Where(a => a.t2.IsSendEmail == false) + .OrderByDescending(a => a.t1.Id) + .ToListAsync(a => new MsgGetMsgUserListOutput + { + Id = a.t1.Id, + Name = a.t1.Name, + Mobile = a.t1.Mobile, + Email = a.t1.Email, + IsRead = a.t2.IsRead, + ReadTime = a.t2.ReadTime, + }); + + return list; + } + + /// + /// 移除消息用户 + /// + /// + /// + [HttpPost] + public async Task RemoveMsgUserAsync(MsgAddMsgUserListInput input) + { + var userIds = input.UserIds; + if (userIds != null && userIds.Any()) + { + await _msgUserRep.Where(a => a.MsgId == input.MsgId && input.UserIds.Contains(a.UserId)).ToDelete().ExecuteAffrowsAsync(); + } + } + + /// + /// 新增 + /// + /// + /// + public async Task AddAsync(MsgAddInput input) + { + var entity = Mapper.Map(input); + await _msgRep.InsertAsync(entity); + + return entity.Id; + } + + /// + /// 修改 + /// + /// + /// + public async Task UpdateAsync(MsgUpdateInput input) + { + var entity = await _msgRep.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["消息不存在"]); + } + + Mapper.Map(input, entity); + await _msgRep.UpdateAsync(entity); + } + + /// + /// 彻底删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task DeleteAsync(long id) + { + //删除消息用户 + await _msgUserRep.DeleteAsync(a => a.MsgId == id); + //删除消息 + await _msgRep.DeleteAsync(id); + } + + /// + /// 批量彻底删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task BatchDeleteAsync(long[] ids) + { + //删除消息用户 + await _msgUserRep.DeleteAsync(a => ids.Contains(a.MsgId)); + //删除消息 + await _msgRep.Where(a => ids.Contains(a.Id)).ToDelete().ExecuteAffrowsAsync(); + } + + /// + /// 删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task SoftDeleteAsync(long id) + { + await _msgUserRep.DeleteAsync(a => a.MsgId == id); + await _msgRep.SoftDeleteAsync(id); + } + + /// + /// 批量删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task BatchSoftDeleteAsync(long[] ids) + { + await _msgUserRep.DeleteAsync(a => ids.Contains(a.MsgId)); + await _msgRep.SoftDeleteAsync(a => ids.Contains(a.Id)); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/MsgType/MsgTypeService.cs b/src/modules/admin/ZhonTai.Admin/Services/MsgType/MsgTypeService.cs new file mode 100644 index 0000000..4e6de94 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/MsgType/MsgTypeService.cs @@ -0,0 +1,192 @@ +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.MsgType; +using ZhonTai.Admin.Services.MsgType.Dto; +using ZhonTai.Admin.Resources; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Admin.Repositories; + +namespace ZhonTai.Admin.Services.MsgType; + +/// +/// 消息分类服务 +/// +[Order(20)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class MsgTypeService : BaseService, IDynamicApi +{ + private readonly AdminRepositoryBase _msgTypeRep; + private readonly AdminLocalizer _adminLocalizer; + + public MsgTypeService(AdminRepositoryBase msgTypeRep, AdminLocalizer adminLocalizer) + { + _msgTypeRep = msgTypeRep; + _adminLocalizer = adminLocalizer; + } + + /// + /// 获得本级和下级Id + /// + /// + /// + [NonAction] + public async Task> GetChildIdListAsync(long id) + { + return await _msgTypeRep.Select + .Where(a => a.Id == id) + .AsTreeCte() + .ToListAsync(a => a.Id); + } + + /// + /// 获得本级和下级Id + /// + /// + /// + [NonAction] + public async Task> GetChildIdListAsync(long[] ids) + { + return await _msgTypeRep.Select + .Where(a => ids.Contains(a.Id)) + .AsTreeCte() + .ToListAsync(a => a.Id); + } + + /// + /// 查询 + /// + /// + /// + public async Task GetAsync(long id) + { + var output = await _msgTypeRep.Select + .WhereDynamic(id) + .ToOneAsync(); + + return output; + } + + /// + /// 查询列表 + /// + /// + /// + [Login] + public async Task> GetListAsync([FromQuery]MsgTypeGetListInput input) + { + var list = await _msgTypeRep.Select + .WhereIf(input.Name.NotNull(), a => a.Name.Contains(input.Name)) + .OrderBy(a => new {a.ParentId, a.Sort}) + .ToListAsync(); + + return list; + } + + /// + /// 新增 + /// + /// + /// + public async Task AddAsync(MsgTypeAddInput input) + { + if (await _msgTypeRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Name == input.Name)) + { + throw ResultOutput.Exception(_adminLocalizer["此分类已存在"]); + } + + if (input.Code.NotNull() && await _msgTypeRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["此分类编码已存在"]); + } + + var entity = Mapper.Map(input); + if (entity.Sort == 0) + { + var sort = await _msgTypeRep.Select.Where(a => a.ParentId == input.ParentId).MaxAsync(a => a.Sort); + entity.Sort = sort + 1; + } + + await _msgTypeRep.InsertAsync(entity); + + return entity.Id; + } + + /// + /// 修改 + /// + /// + /// + public async Task UpdateAsync(MsgTypeUpdateInput input) + { + if (input.Id == input.ParentId) + { + throw ResultOutput.Exception(_adminLocalizer["上级分组不能是自己"]); + } + + var entity = await _msgTypeRep.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["分类不存在"]); + } + + if (await _msgTypeRep.Select.AnyAsync(a => a.Id != input.Id && a.ParentId == input.ParentId && a.Name == input.Name)) + { + throw ResultOutput.Exception(_adminLocalizer["此分类已存在"]); + } + + if (input.Code.NotNull() && await _msgTypeRep.Select.AnyAsync(a => a.Id != input.Id && a.ParentId == input.ParentId && a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["此分类编码已存在"]); + } + + Mapper.Map(input, entity); + await _msgTypeRep.UpdateAsync(entity); + } + + /// + /// 彻底删除 + /// + /// + /// + public virtual async Task DeleteAsync(long id) + { + var msgTypeIdList = await GetChildIdListAsync(id); + await _msgTypeRep.DeleteAsync(a => msgTypeIdList.Contains(a.Id)); + } + + /// + /// 批量彻底删除 + /// + /// + /// + public virtual async Task BatchDeleteAsync(long[] ids) + { + var msgTypeIdList = await GetChildIdListAsync(ids); + await _msgTypeRep.Where(a => msgTypeIdList.Contains(a.Id)).AsTreeCte().ToDelete().ExecuteAffrowsAsync(); + } + + /// + /// 删除 + /// + /// + /// + public virtual async Task SoftDeleteAsync(long id) + { + var msgTypeIdList = await GetChildIdListAsync(id); + await _msgTypeRep.SoftDeleteRecursiveAsync(a => msgTypeIdList.Contains(a.Id)); + } + + /// + /// 批量删除 + /// + /// + /// + public virtual async Task BatchSoftDeleteAsync(long[] ids) + { + var msgTypeIdList = await GetChildIdListAsync(ids); + await _msgTypeRep.SoftDeleteRecursiveAsync(a => msgTypeIdList.Contains(a.Id)); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/OnlineApp/OnlineAppService.cs b/src/modules/admin/ZhonTai.Admin/Services/OnlineApp/OnlineAppService.cs new file mode 100644 index 0000000..d925636 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/OnlineApp/OnlineAppService.cs @@ -0,0 +1,164 @@ +using FreeSql; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.OnlineApp; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Domain.RemoteApp; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Services.OnlineApp.Dto; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Services.Org; +using ZhonTai.Admin.Services.RemoteApp.Dto; +using ZhonTai.Admin.Services.User.Dto; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Admin.Services.OnlineApp; + +/// +/// 在线应用服务 +/// +[Order(70)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class OnlineAppService : BaseService, IOnlineAppService, IDynamicApi +{ + private readonly AdminRepositoryBase _onlineAppRepository; + private readonly AdminRepositoryBase _userRepository; + private readonly OrgService _orgService; + private readonly AdminLocalizer _adminLocalizer; + + public OnlineAppService( + AdminRepositoryBase onlineAppRepository, + AdminRepositoryBase userRepository, + OrgService orgService, + AdminLocalizer adminLocalizer + ) + { + _onlineAppRepository = onlineAppRepository; + _adminLocalizer = adminLocalizer; + _userRepository = userRepository; + _orgService = orgService; + } + + /// + /// 获取在线应用 + /// + /// + /// + public async Task GetAsync(long id) + { + var entity = await _onlineAppRepository.Select.Where(a => a.Id == id).ToOneAsync(); + if (entity == null) + { + throw ResultOutput.Exception(_adminLocalizer["在线应用不存在"]); + } + + return entity.Adapt(); + } + + /// + /// GetList + /// + /// + [HttpPost] + public async Task> GetListAsync() + { + var orgs = await _orgService.GetSimpleListWithPathAsync(); + var orgDict = orgs.ToDictionary(a => a.Id, a => a.Path); + + var user = await _userRepository.Select + .Where(a => a.Id == User.Id) + .OrderByDescending(true, a => a.Id) + .IncludeMany(a => a.Orgs.Select(b => new OrgEntity { Id = b.Id })) + .FirstAsync(a => new UserGetPageOutput + { + Orgs = a.Orgs, + Sex = a.Staff.Sex + }); + + var orgPathList = user.OrgIds.Select(a => orgDict.GetValueOrDefault(a)).Where(a => a != null).ToList(); + user.OrgPaths = string.Join(" ; ", orgPathList); + + var list = await _onlineAppRepository.Select + .WhereIf(user.OrgPaths.Contains("WGQ"), a => a.ApplicableSite == "WGQ" || a.ApplicableSite == "CN") + .WhereIf(user.OrgPaths.Contains("FX"), a => a.ApplicableSite == "FX" || a.ApplicableSite == "CN") + .WhereIf(user.OrgPaths.Contains("WX"), a => a.ApplicableSite == "WX" || a.ApplicableSite == "CN") + .Count(out var total) + .OrderByDescending(true, c => c.Id) + .ToListAsync(); + + return list; + } + + /// + /// 查询在线应用分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var list = await _onlineAppRepository.Select + .WhereDynamicFilter(input.DynamicFilter) + .WhereIf(input.Filter?.WebsiteName.NotNull() == true, a => a.WebsiteName.Contains(input.Filter.WebsiteName) || a.FunctionIntro.Contains(input.Filter.WebsiteName) || a.Keywords.Contains(input.Filter.WebsiteName) || a.WebsiteUrl.Contains(input.Filter.WebsiteName)) + .WhereIf(input.Filter?.PrimaryTitle.NotNull() == true, a => a.PrimaryTitle.Equals(input.Filter.PrimaryTitle)) + .WhereIf(input.Filter?.SecondaryTitle.NotNull() == true, a => a.SecondaryTitle.Equals(input.Filter.SecondaryTitle)) + .WhereIf(input.Filter?.StartCreatedTime.HasValue == true, a => a.CreatedTime >= input.Filter.StartCreatedTime) + .WhereIf(input.Filter?.EndCreatedTime.HasValue == true, a => a.CreatedTime <= input.Filter.EndCreatedTime) + .Count(out var total) + .OrderByDescending(true, c => c.Id) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 新增在线应用 + /// + /// + /// + public async Task AddAsync(OnlineAppAddInput input) + { + var entity = input.Adapt(); + await _onlineAppRepository.InsertAsync(entity); + return entity.Id; + } + + /// + /// 修改在线应用 + /// + /// + /// + public async Task UpdateAsync(OnlineAppUpdateInput input) + { + var entity = await _onlineAppRepository.Select.Where(a => a.Id == input.Id).ToOneAsync(); + if (entity == null) + { + throw ResultOutput.Exception(_adminLocalizer["在线应用不存在"]); + } + + input.Adapt(entity); + await _onlineAppRepository.UpdateAsync(entity); + } + + /// + /// 删除在线应用 + /// + /// + /// + public async Task DeleteAsync(long id) + { + await _onlineAppRepository.SoftDeleteAsync(a => a.Id == id); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/OperationLog/OperationLogService.cs b/src/modules/admin/ZhonTai.Admin/Services/OperationLog/OperationLogService.cs new file mode 100644 index 0000000..11b9945 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/OperationLog/OperationLogService.cs @@ -0,0 +1,137 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using ZhonTai.Admin.Core; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.OperationLog; +using ZhonTai.Admin.Services.OperationLog.Dto; +using ZhonTai.Common.Helpers; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using IP2Region.Net.Abstractions; +using LocationInfo = ZhonTai.Admin.Core.Records.LocationInfo; + +namespace ZhonTai.Admin.Services.OperationLog; + +/// +/// 操作日志服务 +/// +[Order(200)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class OperationLogService : BaseService, IOperationLogService, IDynamicApi +{ + private readonly IHttpContextAccessor _context; + private readonly IOperationLogRepository _operationLogRep; + private readonly AppConfig _appConfig; + + public OperationLogService( + IHttpContextAccessor context, + IOperationLogRepository operationLogRep, + IOptions appConfig + ) + { + _context = context; + _operationLogRep = operationLogRep; + _appConfig = appConfig.Value; + } + + /// + /// 获得IP地址 + /// + /// + /// + private LocationInfo GetIpLocationInfo(string ip) + { + var locationInfo = new LocationInfo(); + if (_appConfig.IP2Region.Enable) + { + var region = AppInfo.GetRequiredService().Search(ip); + locationInfo = LocationInfo.Parse(region); + } + + return locationInfo; + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var select = _operationLogRep.Select.WhereDynamicFilter(input.DynamicFilter); + if (User.PlatformAdmin) + { + select = select.DisableGlobalFilter(); + } + + if (input.Filter != null) + { + var addStartTime = input.Filter.AddStartTime; + var addEndTime = input.Filter.AddEndTime; + select = select + .WhereIf(input.Filter.CreatedUserName.NotNull(), a => a.CreatedUserName.Contains(input.Filter.CreatedUserName)) + .WhereIf(input.Filter.Status.HasValue, a => a.Status == input.Filter.Status) + .WhereIf(input.Filter.Api.NotNull(), a => a.ApiPath.Contains(input.Filter.Api) || a.ApiLabel.Contains(input.Filter.Api)) + .WhereIf(input.Filter.IP.NotNull(), a => a.IP.Contains(input.Filter.IP)) + .WhereIf(addStartTime.HasValue && !addEndTime.HasValue, a => a.CreatedTime >= addStartTime) + .WhereIf(addEndTime.HasValue && !addStartTime.HasValue, a => a.CreatedTime < addEndTime.Value.AddDays(1)) + .WhereIf(addStartTime.HasValue && addEndTime.HasValue, a => a.CreatedTime.Value.BetweenEnd(addStartTime.Value, addEndTime.Value.AddDays(1))) + ; + } + + var list = await select + .Count(out var total) + .OrderByDescending(true, c => c.Id) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 新增 + /// + /// + /// + public async Task AddAsync(OperationLogAddInput input) + { + string ua = _context.HttpContext.Request.Headers["User-Agent"]; + if (ua.NotNull()) + { + var client = UAParser.Parser.GetDefault().Parse(ua); + var device = client.Device.Family; + device = device.ToLower() == "other" ? "" : device; + input.Browser = client.UA.Family; + input.Os = client.OS.Family; + input.Device = device; + input.BrowserInfo = ua; + } + input.Name = User.Name; + + var entity = Mapper.Map(input); + + if (entity.IP.IsNull()) + { + entity.IP = IPHelper.GetIP(_context?.HttpContext?.Request); + var locationInfo = GetIpLocationInfo(entity.IP); + entity.Country = locationInfo?.Country; + entity.Province = locationInfo?.Province; + entity.City = locationInfo?.City; + entity.Isp = locationInfo?.Isp; + } + + await _operationLogRep.InsertAsync(entity); + + return entity.Id; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Org/OrgService.cs b/src/modules/admin/ZhonTai.Admin/Services/Org/OrgService.cs new file mode 100644 index 0000000..1e9aa9f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Org/OrgService.cs @@ -0,0 +1,247 @@ +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Domain.UserOrg; +using ZhonTai.Admin.Domain.Role; +using ZhonTai.Admin.Domain.RoleOrg; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Services.Org.Input; +using ZhonTai.Admin.Services.Org.Output; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.DynamicApi; +using ZhonTai.Admin.Tools.Cache; +using ZhonTai.Admin.Core.Auth; +using ZhonTai.Admin.Contracts.Core.Consts; + +namespace ZhonTai.Admin.Services.Org; + +/// +/// 部门服务 +/// +[Order(30)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class OrgService : BaseService, IOrgService, IDynamicApi +{ + private readonly IOrgRepository _orgRep; + private readonly IUserOrgRepository _userOrgRep; + private readonly IRoleOrgRepository _roleOrgRep; + private readonly AdminLocalizer _localizer; + private readonly ICacheTool _cache; + private readonly IUser _user; + + public OrgService( + IOrgRepository orgRep, + IUserOrgRepository userOrgRep, + IRoleOrgRepository roleOrgRep, + AdminLocalizer localizer, + ICacheTool cache, + IUser user + ) + { + _orgRep = orgRep; + _userOrgRep = userOrgRep; + _roleOrgRep = roleOrgRep; + _localizer = localizer; + _cache = cache; + _user = user; + } + + /// + /// 清除缓存 + /// + private async Task ClearCacheAsync() + { + await Cache.DelByPatternAsync(CacheKeys.DataPermission + "*"); + await Cache.DelAsync(AdminCacheKeys.GetOrgKey(1)); + } + + /// + /// 查询 + /// + /// + /// + public async Task GetAsync(long id) + { + var result = await _orgRep.GetAsync(id); + return result; + } + + /// + /// 查询列表 + /// + /// + /// + public async Task> GetListAsync(string key) + { + var dataPermission = User.DataPermission; + + var data = await _orgRep.Select + .WhereIf(dataPermission.OrgIds.Count > 0, a => dataPermission.OrgIds.Contains(a.Id)) + .WhereIf(dataPermission.DataScope == DataScope.Self, a => a.CreatedUserId == User.Id) + .WhereIf(key.NotNull(), a => a.Name.Contains(key) || a.Code.Contains(key)) + .ToListAsync(); + + return data?.Count > 0 ? data.DistinctBy(a => a.Id).OrderBy(a => a.ParentId).ThenBy(a => a.Sort).ToList() : data; + } + + /// + /// 获取部门路径列表 + /// + /// + public async Task> GetSimpleListWithPathAsync() + { + return await _cache.GetOrSetAsync(AdminCacheKeys.GetOrgKey(1), async () => + { + return await _orgRep.Select.Where(a => a.ParentId == 0) + .AsTreeCte(a => a.Name, pathSeparator: "/") + .ToListAsync(a => new OrgGetSimpleListWithPathOutput + { + Id = a.Id, + Path = "a.cte_path" + }); + }, TimeSpan.FromDays(365)); + + } + + /// + /// 新增 + /// + /// + /// + public async Task AddAsync(OrgAddInput input) + { + if(input.ParentId == 0) + { + throw ResultOutput.Exception(_localizer["请选择上级部门"]); + } + + if (await _orgRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Name == input.Name)) + { + throw ResultOutput.Exception(_localizer["此部门已存在"]); + } + + if (input.Code.NotNull() && await _orgRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Code == input.Code)) + { + throw ResultOutput.Exception(_localizer["此部门编码已存在"]); + } + + var entity = Mapper.Map(input); + + if (entity.Sort == 0) + { + var sort = await _orgRep.Select.Where(a => a.ParentId == input.ParentId).MaxAsync(a => a.Sort); + entity.Sort = sort + 1; + } + + await _orgRep.InsertAsync(entity); + await ClearCacheAsync(); + + return entity.Id; + } + + /// + /// 修改 + /// + /// + /// + public async Task UpdateAsync(OrgUpdateInput input) + { + if (input.ParentId == 0) + { + throw ResultOutput.Exception(_localizer["请选择上级部门"]); + } + + var entity = await _orgRep.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_localizer["部门不存在"]); + } + + if (input.Id == input.ParentId) + { + throw ResultOutput.Exception(_localizer["上级部门不能是本部门"]); + } + + if (await _orgRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Name == input.Name)) + { + throw ResultOutput.Exception(_localizer["此部门已存在"]); + } + + if (input.Code.NotNull() && await _orgRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Code == input.Code)) + { + throw ResultOutput.Exception(_localizer["此部门编码已存在"]); + } + + var childIdList = await _orgRep.GetChildIdListAsync(input.Id); + if (childIdList.Contains(input.ParentId)) + { + throw ResultOutput.Exception(_localizer["上级部门不能是下级部门"]); + } + + Mapper.Map(input, entity); + await _orgRep.UpdateAsync(entity); + + await ClearCacheAsync(); + } + + /// + /// 彻底删除 + /// + /// + /// + [AdminTransaction] + public async Task DeleteAsync(long id) + { + //本部门下是否有员工 + if(await _userOrgRep.HasUser(id)) + { + throw ResultOutput.Exception(_localizer["当前部门有员工无法删除"]); + } + + var orgIdList = await _orgRep.GetChildIdListAsync(id); + //本部门的下级部门下是否有员工 + if (await _userOrgRep.HasUser(orgIdList)) + { + throw ResultOutput.Exception(_localizer["本部门的下级部门有员工无法删除"]); + } + + //删除部门角色 + await _roleOrgRep.DeleteAsync(a => orgIdList.Contains(a.OrgId)); + + //删除本部门和下级部门 + await _orgRep.DeleteAsync(a => orgIdList.Contains(a.Id)); + + await ClearCacheAsync(); + } + + /// + /// 删除 + /// + /// + /// + [AdminTransaction] + public async Task SoftDeleteAsync(long id) + { + //本部门下是否有员工 + if (await _userOrgRep.HasUser(id)) + { + throw ResultOutput.Exception(_localizer["当前部门有员工无法删除"]); + } + + var orgIdList = await _orgRep.GetChildIdListAsync(id); + //本部门的下级部门下是否有员工 + if (await _userOrgRep.HasUser(orgIdList)) + { + throw ResultOutput.Exception(_localizer["本部门的下级部门有员工无法删除"]); + } + + //删除部门角色 + await _roleOrgRep.SoftDeleteAsync(a => orgIdList.Contains(a.OrgId)); + + //删除本部门和下级部门 + await _orgRep.SoftDeleteAsync(a => orgIdList.Contains(a.Id)); + + await ClearCacheAsync(); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Permission/PermissionService.cs b/src/modules/admin/ZhonTai.Admin/Services/Permission/PermissionService.cs new file mode 100644 index 0000000..049ffd6 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Permission/PermissionService.cs @@ -0,0 +1,530 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using FreeSql; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.Permission; +using ZhonTai.Admin.Domain.RolePermission; +using ZhonTai.Admin.Domain.UserRole; +using ZhonTai.Admin.Domain.PermissionApi; +using ZhonTai.Admin.Domain.Role; +using ZhonTai.Admin.Domain.Tenant; +using ZhonTai.Admin.Domain.PkgPermission; +using ZhonTai.Admin.Domain.TenantPkg; +using ZhonTai.Admin.Services.Permission.Dto; +using ZhonTai.Admin.Resources; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using System.Linq.Expressions; +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Admin.Services.Permission; + +/// +/// 权限服务 +/// +[Order(40)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class PermissionService : BaseService, IPermissionService, IDynamicApi +{ + private readonly IPermissionRepository _permissionRep; + private readonly IPermissionApiRepository _permissionApiRep; + private readonly AdminLocalizer _adminLocalizer; + private readonly Lazy> _appConfig; + private readonly Lazy _roleRep; + private readonly Lazy _rolePermissionRep; + private readonly Lazy _userRoleRep; + + + public PermissionService( + IPermissionRepository permissionRep, + IPermissionApiRepository permissionApiRep, + AdminLocalizer adminLocalizer, + Lazy> appConfig, + Lazy roleRep, + Lazy rolePermissionRep, + Lazy userRoleRep + ) + { + _permissionRep = permissionRep; + _permissionApiRep = permissionApiRep; + _adminLocalizer = adminLocalizer; + _appConfig = appConfig; + _roleRep = roleRep; + _rolePermissionRep = rolePermissionRep; + _userRoleRep = userRoleRep; + } + + /// + /// 清除权限下关联的用户权限缓存 + /// + /// + /// + private async Task ClearUserPermissionsAsync(List permissionIds) + { + var userIds = await _userRoleRep.Value.Select.Where(a => + _rolePermissionRep.Value + .Where(b => b.RoleId == a.RoleId && permissionIds.Contains(b.PermissionId)) + .Any() + ).ToListAsync(a => a.UserId); + foreach (var userId in userIds) + { + await Cache.DelAsync(CacheKeys.UserPermission + userId); + } + } + + /// + /// 查询分组 + /// + /// + /// + public async Task GetGroupAsync(long id) + { + var result = await _permissionRep.GetAsync(id); + return result; + } + + /// + /// 查询菜单 + /// + /// + /// + public async Task GetMenuAsync(long id) + { + var result = await _permissionRep.GetAsync(id); + return result; + } + + /// + /// 查询权限点 + /// + /// + /// + public async Task GetDotAsync(long id) + { + var output = await _permissionRep.Select + .WhereDynamic(id) + .ToOneAsync(a => new PermissionGetDotOutput + { + ApiIds = _permissionApiRep.Where(b => b.PermissionId == a.Id).OrderBy(a => a.Id).ToList(b => b.Api.Id) + }); + return output; + } + + /// + /// 查询权限列表 + /// + /// + /// + [HttpPost] + public async Task> GetListAsync(PermissionGetListInput input) + { + var platform = input?.Platform?.Trim(); + var label = input?.Label?.Trim(); + var path = input?.Path?.Trim(); + + var select = _permissionRep.Select; + if (platform.NotNull()) + { + Expression> where = null; + where = where.And(a => a.Platform == platform); + if (platform.ToLower() == AdminConsts.WebName) + { + where = where.Or(a => string.IsNullOrEmpty(a.Platform)); + } + select = select.Where(where); + } + else + { + select = select.Where(a => string.IsNullOrEmpty(a.Platform)); + } + + var data = await select + .WhereIf(label.NotNull(), a => a.Label.Contains(label)) + .WhereIf(path.NotNull(), a => a.Path.Contains(path)) + .Include(a => a.View) + .OrderBy(a => new { a.ParentId, a.Sort }) + .ToListAsync(a => new PermissionGetListOutput + { + ViewPath = a.View.Path, + ApiPaths = string.Join(";", _permissionApiRep.Where(b => b.PermissionId == a.Id).ToList(b => b.Api.Path)) + }); + + return data; + } + + /// + /// 查询授权权限列表 + /// + /// + /// + public async Task> GetPermissionListAsync(string platform) + { + var select = _permissionRep.Select; + if (platform.NotNull()) + { + Expression> where = null; + where = where.And(a => a.Platform == platform); + if (platform.ToLower() == AdminConsts.WebName) + { + where = where.Or(a => string.IsNullOrEmpty(a.Platform)); + } + select = select.Where(where); + } + else + { + select = select.Where(a => string.IsNullOrEmpty(a.Platform)); + } + + var permissions = await select + .Where(a => a.Enabled == true && a.IsSystem == false) + .WhereIf(_appConfig.Value.Value.Tenant && User.TenantType == TenantType.Tenant, a => + _permissionRep.Orm.Select() + .Where((b, c) => b.PkgId == c.PkgId && b.TenantId == User.TenantId && c.PermissionId == a.Id) + .Any() + ) + .AsTreeCte(up: true) + .Where(a => a.Type != PermissionType.Menu || (a.Type == PermissionType.Menu && a.View.Enabled == true)) + .ToListAsync(a => new { a.Id, a.ParentId, a.Label, a.Type, a.Sort }); + + var menus = permissions.DistinctBy(a => a.Id).OrderBy(a => a.ParentId).ThenBy(a => a.Sort) + .Select(a => new PermissionGetPermissionListOutput + { + Id = a.Id, + ParentId = a.ParentId, + Label = a.Label, + Row = a.Type == PermissionType.Menu, + }).ToList(); + + menus = menus.ToTree((r, c) => + { + return c.ParentId == 0; + }, + (r, c) => + { + return r.Id == c.ParentId; + }, + (r, datalist) => + { + r.Children ??= []; + r.Children.AddRange(datalist); + }); + + return menus; + } + + /// + /// 查询角色权限列表 + /// + /// + /// + public async Task> GetRolePermissionListAsync(long roleId = 0) + { + var permissionIds = await _rolePermissionRep.Value + .Select.Where(d => d.RoleId == roleId) + .ToListAsync(a => a.PermissionId); + + return permissionIds; + } + + /// + /// 新增分组 + /// + /// + /// + public async Task AddGroupAsync(PermissionAddGroupInput input) + { + if (await _permissionRep.Select.AnyAsync(a => a.Platform == input.Platform && a.ParentId == input.ParentId && a.Label == input.Label)) + { + throw ResultOutput.Exception(_adminLocalizer["此分组已存在"]); + } + + var entity = Mapper.Map(input); + entity.Type = PermissionType.Group; + + if (entity.Sort == 0) + { + var sort = await _permissionRep.Select.Where(a => a.ParentId == input.ParentId).MaxAsync(a => a.Sort); + entity.Sort = sort + 1; + } + + await _permissionRep.InsertAsync(entity); + return entity.Id; + } + + /// + /// 新增菜单 + /// + /// + /// + public async Task AddMenuAsync(PermissionAddMenuInput input) + { + if (await _permissionRep.Select.AnyAsync(a => a.Platform == input.Platform && a.ParentId == input.ParentId && a.Label == input.Label)) + { + throw ResultOutput.Exception(_adminLocalizer["此菜单已存在"]); + } + + var entity = Mapper.Map(input); + entity.Type = PermissionType.Menu; + if (entity.Sort == 0) + { + var sort = await _permissionRep.Select.Where(a => a.ParentId == input.ParentId).MaxAsync(a => a.Sort); + entity.Sort = sort + 1; + } + await _permissionRep.InsertAsync(entity); + + return entity.Id; + } + + /// + /// 新增权限点 + /// + /// + /// + [AdminTransaction] + public virtual async Task AddDotAsync(PermissionAddDotInput input) + { + if (await _permissionRep.Select.AnyAsync(a => a.Platform == input.Platform && a.ParentId == input.ParentId && a.Label == input.Label)) + { + throw ResultOutput.Exception(_adminLocalizer["此权限点已存在"]); + } + + if (await _permissionRep.Select.AnyAsync(a => a.Platform == input.Platform && a.ParentId == input.ParentId && a.Label == input.Label)) + { + throw ResultOutput.Exception(_adminLocalizer["此权限点已存在"]); + } + + if (await _permissionRep.Select.AnyAsync(a => a.Platform == input.Platform && a.ParentId == input.ParentId && a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["此权限点编码已存在"]); + } + + var entity = Mapper.Map(input); + entity.Type = PermissionType.Dot; + if (entity.Sort == 0) + { + var sort = await _permissionRep.Select.Where(a => a.ParentId == input.ParentId).MaxAsync(a => a.Sort); + entity.Sort = sort + 1; + } + await _permissionRep.InsertAsync(entity); + + if (input.ApiIds != null && input.ApiIds.Any()) + { + var permissionApis = input.ApiIds.Select(a => new PermissionApiEntity { PermissionId = entity.Id, ApiId = a }).ToList(); + await _permissionApiRep.InsertAsync(permissionApis); + } + + return entity.Id; + } + + /// + /// 修改分组 + /// + /// + /// + public async Task UpdateGroupAsync(PermissionUpdateGroupInput input) + { + var entity = await _permissionRep.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["分组不存在"]); + } + + if (input.Id == input.ParentId) + { + throw ResultOutput.Exception(_adminLocalizer["上级分组不能是本分组"]); + } + + if (await _permissionRep.Select.AnyAsync(a => a.Platform == input.Platform && a.ParentId == input.ParentId && a.Id != input.Id && a.Label == input.Label)) + { + throw ResultOutput.Exception(_adminLocalizer["此分组已存在"]); + } + + entity = Mapper.Map(input, entity); + await _permissionRep.UpdateAsync(entity); + } + + /// + /// 修改菜单 + /// + /// + /// + public async Task UpdateMenuAsync(PermissionUpdateMenuInput input) + { + var entity = await _permissionRep.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["菜单不存在"]); + } + + if (await _permissionRep.Select.AnyAsync(a => a.Platform == input.Platform && a.ParentId == input.ParentId && a.Id != input.Id && a.Label == input.Label)) + { + throw ResultOutput.Exception(_adminLocalizer["此菜单已存在"]); + } + + entity = Mapper.Map(input, entity); + await _permissionRep.UpdateAsync(entity); + } + + /// + /// 修改权限点 + /// + /// + /// + [AdminTransaction] + public virtual async Task UpdateDotAsync(PermissionUpdateDotInput input) + { + var entity = await _permissionRep.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["权限点不存在"]); + } + + if (await _permissionRep.Select.AnyAsync(a => a.Platform == input.Platform && a.ParentId == input.ParentId && a.Id != input.Id && a.Label == input.Label)) + { + throw ResultOutput.Exception(_adminLocalizer["此权限点已存在"]); + } + + Mapper.Map(input, entity); + await _permissionRep.UpdateAsync(entity); + await _permissionApiRep.DeleteAsync(a => a.PermissionId == entity.Id); + + if (input.ApiIds != null && input.ApiIds.Any()) + { + var permissionApis = input.ApiIds.Select(a => new PermissionApiEntity { PermissionId = entity.Id, ApiId = a }); + await _permissionApiRep.InsertAsync(permissionApis.ToList()); + } + + //清除用户权限缓存 + await ClearUserPermissionsAsync(new List { entity.Id }); + } + + /// + /// 彻底删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task DeleteAsync(long id) + { + //递归查询所有权限点 + var ids = _permissionRep.Select + .Where(a => a.Id == id) + .AsTreeCte() + .ToList(a => a.Id); + + //删除权限关联接口 + await _permissionApiRep.DeleteAsync(a => ids.Contains(a.PermissionId)); + + //删除相关权限 + await _permissionRep.DeleteAsync(a => ids.Contains(a.Id)); + + //清除用户权限缓存 + await ClearUserPermissionsAsync(ids); + } + + /// + /// 删除 + /// + /// + /// + public async Task SoftDeleteAsync(long id) + { + //递归查询所有权限点 + var ids = _permissionRep.Select + .Where(a => a.Id == id) + .AsTreeCte() + .ToList(a => a.Id); + + //删除权限 + await _permissionRep.SoftDeleteAsync(a => ids.Contains(a.Id)); + + //清除用户权限缓存 + await ClearUserPermissionsAsync(ids); + } + + /// + /// 保存角色权限 + /// + /// + /// + [AdminTransaction] + public virtual async Task AssignAsync(PermissionAssignInput input) + { + //分配权限的时候判断角色是否存在 + var exists = await _roleRep.Value.Select.DisableGlobalFilter(FilterNames.Tenant).WhereDynamic(input.RoleId).AnyAsync(); + if (!exists) + { + throw ResultOutput.Exception(_adminLocalizer["该角色不存在或已被删除"]); + } + + var platform = input?.Platform; + Expression> where = null; + if (platform.NotNull()) + { + where = where.And(a => a.Platform == platform); + if (platform.ToLower() == AdminConsts.WebName) + { + where = where.Or(a => string.IsNullOrEmpty(a.Platform)); + } + } + else + { + where = where.And(a => string.IsNullOrEmpty(a.Platform)); + } + + //查询角色权限 + var permissionIds = await _rolePermissionRep.Value.Where(where).Where(a => a.RoleId == input.RoleId).ToListAsync(a => a.PermissionId); + + //批量删除权限 + var deleteIds = permissionIds.Where(a => !input.PermissionIds.Contains(a)); + if (deleteIds.Any()) + { + await _rolePermissionRep.Value.Where(where).Where(a => a.RoleId == input.RoleId && deleteIds.Contains(a.PermissionId)).ToDelete().ExecuteAffrowsAsync(); + } + + //批量插入权限 + var insertRolePermissions = new List(); + var insertPermissionIds = input.PermissionIds.Where(a => !permissionIds.Contains(a)); + + //防止租户非法授权,查询主库租户权限范围 + if (_appConfig.Value.Value.Tenant && User.TenantType == TenantType.Tenant) + { + var cloud = ServiceProvider.GetRequiredService(); + var mainDb = cloud.Use(DbKeys.AppDb); + var pkgPermissionIds = await mainDb.Select() + .Where(a => + mainDb.Select() + .Where((b) => b.PkgId == a.PkgId && b.TenantId == User.TenantId) + .Any() + ) + .ToListAsync(a => a.PermissionId); + + insertPermissionIds = insertPermissionIds.Where(a => pkgPermissionIds.Contains(a)); + } + + if (insertPermissionIds.Any()) + { + foreach (var permissionId in insertPermissionIds) + { + insertRolePermissions.Add(new RolePermissionEntity() + { + Platform = platform, + RoleId = input.RoleId, + PermissionId = permissionId, + }); + } + await _rolePermissionRep.Value.InsertAsync(insertRolePermissions); + } + + //清除角色下关联的用户权限缓存 + var userIds = await _userRoleRep.Value.Select.Where(a => a.RoleId == input.RoleId).ToListAsync(a => a.UserId); + foreach (var userId in userIds) + { + await Cache.DelAsync(CacheKeys.UserPermission + userId); + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Permission/_MapConfig.cs b/src/modules/admin/ZhonTai.Admin/Services/Permission/_MapConfig.cs new file mode 100644 index 0000000..9eaf9f2 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Permission/_MapConfig.cs @@ -0,0 +1,18 @@ +using Mapster; +using ZhonTai.Admin.Domain.Permission; +using ZhonTai.Admin.Services.Permission.Dto; + +namespace ZhonTai.Admin.Services.Admin.Permission; + +/// +/// 映射配置 +/// +public class MapConfig : IRegister +{ + public void Register(TypeAdapterConfig config) + { + config + .NewConfig() + .Map(dest => dest.ApiIds, src => src.Apis.Select(a => a.Id)); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Pkg/PkgService.cs b/src/modules/admin/ZhonTai.Admin/Services/Pkg/PkgService.cs new file mode 100644 index 0000000..342424f --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Pkg/PkgService.cs @@ -0,0 +1,425 @@ +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.Pkg; +using ZhonTai.Admin.Domain.PkgPermission; +using ZhonTai.Admin.Domain.TenantPkg; +using ZhonTai.Admin.Domain.Tenant; +using ZhonTai.Admin.Domain.RolePermission; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Services.Pkg.Dto; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using System.Linq.Expressions; + +namespace ZhonTai.Admin.Services.Pkg; + +/// +/// 套餐服务 +/// +[Order(51)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class PkgService : BaseService, IDynamicApi +{ + private readonly IPkgRepository _pkgRep; + private readonly ITenantPkgRepository _tenantPkgRep; + private readonly AdminLocalizer _adminLocalizer; + private readonly Lazy _tenantRep; + private readonly Lazy _pkgPermissionRep; + private readonly Lazy _rolePermissionRep; + private readonly Lazy _userRep; + + public PkgService( + IPkgRepository pkgRep, + ITenantPkgRepository tenantPkgRep, + AdminLocalizer adminLocalizer, + Lazy tenantRep, + Lazy pkgPermissionRep, + Lazy rolePermissionRep, + Lazy userRep + + ) + { + _pkgRep = pkgRep; + _tenantPkgRep = tenantPkgRep; + _adminLocalizer = adminLocalizer; + _tenantRep = tenantRep; + _pkgPermissionRep = pkgPermissionRep; + _rolePermissionRep = rolePermissionRep; + _userRep = userRep; + } + + /// + /// 清除租户下所有用户权限缓存 + /// + /// + [NonAction] + public async Task ClearUserPermissionsAsync(List tenantIds) + { + using var _ = _userRep.Value.DataFilter.Disable(FilterNames.Tenant); + var userIds = await _userRep.Value.Select.Where(a => tenantIds.Contains(a.TenantId.Value)).ToListAsync(a => a.Id); + if (userIds.Any()) + { + foreach (var userId in userIds) + { + await Cache.DelAsync(CacheKeys.UserPermission + userId); + } + } + } + + /// + /// 查询 + /// + /// + /// + public async Task GetAsync(long id) + { + return await _pkgRep.Select + .WhereDynamic(id) + .ToOneAsync(); + } + + /// + /// 查询列表 + /// + /// + /// + public async Task> GetListAsync([FromQuery]PkgGetListInput input) + { + var list = await _pkgRep.Select + .WhereIf(input.Name.NotNull(), a => a.Name.Contains(input.Name)) + .OrderBy(a => new {a.ParentId, a.Sort}) + .ToListAsync(); + + return list; + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var key = input.Filter?.Name; + + var list = await _pkgRep.Select + .WhereDynamicFilter(input.DynamicFilter) + .WhereIf(key.NotNull(), a => a.Name.Contains(key)) + .Count(out var total) + .OrderByDescending(true, c => c.Id) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 查询套餐租户列表 + /// + /// + /// + public async Task> GetPkgTenantListAsync([FromQuery] PkgGetPkgTenantListInput input) + { + using var _ = _tenantRep.Value.DataFilter.Disable(FilterNames.Tenant); + + var list = await _tenantRep.Value.Select.From((s, b, c) => s + .InnerJoin(a => a.Id == b.TenantId) + .InnerJoin(a => a.OrgId == c.Id)) + .Where((a, b, c) => b.PkgId == input.PkgId) + .WhereIf(input.TenantName.NotNull(), (a, b, c) => c.Name.Contains(input.TenantName)) + .OrderByDescending((a, b, c) => b.Id) + .ToListAsync((a, b, c) => new PkgGetPkgTenantListOutput { Id = a.Id, Name = c.Name, Code = c.Code }); + + return list; + } + + /// + /// 查询套餐租户分页 + /// + /// + /// + [HttpPost] + public async Task> GetPkgTenantPageAsync(PageInput input) + { + using var _ = _tenantRep.Value.DataFilter.Disable(FilterNames.Tenant); + + var list = await _tenantRep.Value.Select.From((s, b, c) => s + .InnerJoin(a => a.Id == b.TenantId) + .InnerJoin(a => a.OrgId == c.Id)) + .Where((a, b, c) => b.PkgId == input.Filter.PkgId) + .WhereIf(input.Filter.TenantName.NotNull(), (a, b, c) => c.Name.Contains(input.Filter.TenantName)) + .Count(out var total) + .OrderByDescending((a, b, c) => b.Id) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync((a, b, c) => new PkgGetPkgTenantListOutput { Id = a.Id, Name = c.Name, Code = c.Code }); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 查询套餐权限列表 + /// + /// 套餐编号 + /// + public async Task> GetPkgPermissionListAsync(long pkgId) + { + var permissionIds = await _pkgPermissionRep.Value + .Select.Where(d => d.PkgId == pkgId) + .ToListAsync(a => a.PermissionId); + + return permissionIds; + } + + /// + /// 设置套餐权限 + /// + /// + /// + [AdminTransaction] + public virtual async Task SetPkgPermissionsAsync(PkgSetPkgPermissionsInput input) + { + var platform = input?.Platform; + Expression> where = null; + if (platform.NotNull()) + { + where = where.And(a => a.Platform == platform); + if (platform.ToLower() == AdminConsts.WebName) + { + where = where.Or(a => string.IsNullOrEmpty(a.Platform)); + } + } + else + { + where = where.And(a => string.IsNullOrEmpty(a.Platform)); + } + + //查询套餐权限 + var permissionIds = await _pkgPermissionRep.Value.Select.Where(where).Where(a => a.PkgId == input.PkgId).ToListAsync(a => a.PermissionId); + + //批量删除套餐权限 + var deleteIds = permissionIds.Where(d => !input.PermissionIds.Contains(d)); + if (deleteIds.Any()) + { + //删除套餐权限 + await _pkgPermissionRep.Value.Where(where).Where(a => a.PkgId == input.PkgId && deleteIds.Contains(a.PermissionId)).ToDelete().ExecuteAffrowsAsync(); + //删除套餐下关联的角色权限 + await _rolePermissionRep.Value.DeleteAsync(a => deleteIds.Contains(a.PermissionId)); + } + + //批量插入套餐权限 + var pkgPermissions = new List(); + var insertPermissionIds = input.PermissionIds.Where(a => !permissionIds.Contains(a)); + if (insertPermissionIds.Any()) + { + foreach (var permissionId in insertPermissionIds) + { + pkgPermissions.Add(new PkgPermissionEntity() + { + Platform = platform, + PkgId = input.PkgId, + PermissionId = permissionId, + }); + } + await _pkgPermissionRep.Value.InsertAsync(pkgPermissions); + } + + var tenantIds = await _tenantPkgRep.Select.Where(a => a.PkgId == input.PkgId).ToListAsync(a => a.TenantId); + //清除租户下所有用户权限缓存 + await ClearUserPermissionsAsync(tenantIds); + } + + /// + /// 添加套餐租户 + /// + /// + /// + public async Task AddPkgTenantAsync(PkgAddPkgTenantListInput input) + { + var pkgId = input.PkgId; + var tenantIds = await _tenantPkgRep.Select.Where(a => a.PkgId == pkgId).ToListAsync(a => a.TenantId); + var insertTenantIds = input.TenantIds.Except(tenantIds); + if (insertTenantIds != null && insertTenantIds.Any()) + { + var tenantPkgList = insertTenantIds.Select(tenantId => new TenantPkgEntity + { + TenantId = tenantId, + PkgId = pkgId + }).ToList(); + await _tenantPkgRep.InsertAsync(tenantPkgList); + + //清除租户下所有用户权限缓存 + await ClearUserPermissionsAsync(insertTenantIds.ToList()); + } + } + + /// + /// 移除套餐租户 + /// + /// + /// + [HttpPost] + public async Task RemovePkgTenantAsync(PkgAddPkgTenantListInput input) + { + var tenantIds = input.TenantIds; + if (tenantIds != null && tenantIds.Any()) + { + await _tenantPkgRep.Where(a => a.PkgId == input.PkgId && input.TenantIds.Contains(a.TenantId)).ToDelete().ExecuteAffrowsAsync(); + + //清除租户下所有用户权限缓存 + await ClearUserPermissionsAsync(tenantIds.ToList()); + } + } + + /// + /// 新增 + /// + /// + /// + public async Task AddAsync(PkgAddInput input) + { + if (await _pkgRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Name == input.Name)) + { + throw ResultOutput.Exception(_adminLocalizer["此套餐名已存在"]); + } + + if (input.Code.NotNull() && await _pkgRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["此套餐编码已存在"]); + } + + var entity = Mapper.Map(input); + if (entity.Sort == 0) + { + var sort = await _pkgRep.Select.Where(a => a.ParentId == input.ParentId).MaxAsync(a => a.Sort); + entity.Sort = sort + 1; + } + + await _pkgRep.InsertAsync(entity); + + return entity.Id; + } + + /// + /// 修改 + /// + /// + /// + public async Task UpdateAsync(PkgUpdateInput input) + { + var entity = await _pkgRep.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["套餐不存在"]); + } + + if (await _pkgRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Name == input.Name)) + { + throw ResultOutput.Exception(_adminLocalizer["此套餐名已存在"]); + } + + if (input.Code.NotNull() && await _pkgRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["此套餐编码已存在"]); + } + + Mapper.Map(input, entity); + await _pkgRep.UpdateAsync(entity); + } + + /// + /// 彻底删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task DeleteAsync(long id) + { + var pkgIdList = await _pkgRep.GetChildIdListAsync(id); + var tenantIds = await _tenantPkgRep.Select.Where(a => pkgIdList.Contains(a.PkgId)).ToListAsync(a => a.TenantId); + + //删除租户套餐 + await _tenantPkgRep.DeleteAsync(a => a.TenantId == id); + //删除套餐权限 + await _pkgPermissionRep.Value.DeleteAsync(a => pkgIdList.Contains(a.PkgId)); + //删除套餐 + await _pkgRep.DeleteAsync(a => pkgIdList.Contains(a.Id)); + + //清除租户下所有用户权限缓存 + await ClearUserPermissionsAsync(tenantIds); + } + + /// + /// 批量彻底删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task BatchDeleteAsync(long[] ids) + { + var pkgIdList = await _pkgRep.GetChildIdListAsync(ids); + var tenantIds = await _tenantPkgRep.Select.Where(a => pkgIdList.Contains(a.PkgId)).ToListAsync(a => a.TenantId); + + //删除租户套餐 + await _tenantPkgRep.DeleteAsync(a => pkgIdList.Contains(a.PkgId)); + //删除套餐权限 + await _pkgPermissionRep.Value.DeleteAsync(a => pkgIdList.Contains(a.PkgId)); + //删除套餐 + await _pkgRep.Where(a => pkgIdList.Contains(a.Id)).AsTreeCte().ToDelete().ExecuteAffrowsAsync(); + + //清除租户下所有用户权限缓存 + await ClearUserPermissionsAsync(tenantIds); + } + + /// + /// 删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task SoftDeleteAsync(long id) + { + var pkgIdList = await _pkgRep.GetChildIdListAsync(id); + var tenantIds = await _tenantPkgRep.Select.Where(a => pkgIdList.Contains(a.PkgId)).ToListAsync(a => a.TenantId); + await _tenantPkgRep.DeleteAsync(a => pkgIdList.Contains(a.PkgId)); + await _pkgPermissionRep.Value.DeleteAsync(a => pkgIdList.Contains(a.PkgId)); + await _pkgRep.SoftDeleteRecursiveAsync(a => pkgIdList.Contains(a.Id)); + + //清除租户下所有用户权限缓存 + await ClearUserPermissionsAsync(tenantIds); + } + + /// + /// 批量删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task BatchSoftDeleteAsync(long[] ids) + { + var pkgIdList = await _pkgRep.GetChildIdListAsync(ids); + var tenantIds = await _tenantPkgRep.Select.Where(a => ids.Contains(a.PkgId)).ToListAsync(a => a.TenantId); + await _tenantPkgRep.DeleteAsync(a => pkgIdList.Contains(a.PkgId)); + await _pkgPermissionRep.Value.DeleteAsync(a => pkgIdList.Contains(a.PkgId)); + await _pkgRep.SoftDeleteRecursiveAsync(a => pkgIdList.Contains(a.Id)); + + //清除租户下所有用户权限缓存 + await ClearUserPermissionsAsync(tenantIds); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Pkg/_MapConfig.cs b/src/modules/admin/ZhonTai.Admin/Services/Pkg/_MapConfig.cs new file mode 100644 index 0000000..7ff380c --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Pkg/_MapConfig.cs @@ -0,0 +1,13 @@ +using Mapster; + +namespace ZhonTai.Admin.Services.Pkg; + +/// +/// 映射配置 +/// +public class MapConfig : IRegister +{ + public void Register(TypeAdapterConfig config) + { + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/PrintTemplate/PrintTemplateService.cs b/src/modules/admin/ZhonTai.Admin/Services/PrintTemplate/PrintTemplateService.cs new file mode 100644 index 0000000..1f292ff --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/PrintTemplate/PrintTemplateService.cs @@ -0,0 +1,229 @@ +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.PrintTemplate; +using ZhonTai.Admin.Resources; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Services.PrintTemplate.Outputs; +using ZhonTai.Admin.Services.PrintTemplate.Inputs; + +namespace ZhonTai.Admin.Services.PrintTemplate; + +/// +/// 打印模板服务 +/// +[Order(20)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class PrintTemplateService : BaseService, IDynamicApi +{ + private readonly AdminRepositoryBase _printTemplateRep; + private readonly AdminLocalizer _adminLocalizer; + + public PrintTemplateService( + AdminRepositoryBase printTemplateRep, + AdminLocalizer adminLocalizer + ) + { + _printTemplateRep = printTemplateRep; + _adminLocalizer = adminLocalizer; + } + + /// + /// 查询 + /// + /// + /// + public async Task GetAsync(long id) + { + var output = await _printTemplateRep.Select + .WhereDynamic(id) + .ToOneAsync(); + + return output; + } + + /// + /// 查询修改模板 + /// + /// + /// + public async Task GetUpdateTemplateAsync(long id) + { + var output = await _printTemplateRep.Select + .WhereDynamic(id) + .ToOneAsync(); + + return output; + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var list = await _printTemplateRep.Select + .WhereDynamicFilter(input.DynamicFilter) + .WhereIf(input.Filter != null && input.Filter.Name.NotNull(), a => a.Name.Contains(input.Filter.Name)) + .WhereIf(input.Filter != null && input.Filter.Code.NotNull(), a => a.Code.Contains(input.Filter.Code)) + .Count(out var total) + .OrderByDescending(true, a => a.Id) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(a => new PrintTemplateGetPageOutput { }); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 新增 + /// + /// + /// + public async Task AddAsync(PrintTemplateAddInput input) + { + if (await _printTemplateRep.Select.AnyAsync(a => a.Name == input.Name)) + { + throw ResultOutput.Exception(_adminLocalizer["打印模板名称已存在"]); + } + + if (input.Code.NotNull() && await _printTemplateRep.Select.AnyAsync(a => a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["打印模板编码已存在"]); + } + + var entity = Mapper.Map(input); + if (entity.Sort == 0) + { + var sort = await _printTemplateRep.Select.MaxAsync(a => a.Sort); + entity.Sort = sort + 1; + } + await _printTemplateRep.InsertAsync(entity); + + return entity.Id; + } + + /// + /// 修改 + /// + /// + /// + public async Task UpdateAsync(PrintTemplateUpdateInput input) + { + if (await _printTemplateRep.Select.AnyAsync(a => a.Id != input.Id && a.Name == input.Name)) + { + throw ResultOutput.Exception(_adminLocalizer["打印模板名称已存在"]); + } + + if (input.Code.NotNull() && await _printTemplateRep.Select.AnyAsync(a => a.Id != input.Id && a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["打印模板编码已存在"]); + } + + var entity = await _printTemplateRep.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["打印模板不存在"]); + } + + if(entity.Version != input.Version) + { + throw ResultOutput.Exception(_adminLocalizer["打印模板已被修改,请刷新后重试"]); + } + + Mapper.Map(input, entity); + await _printTemplateRep.UpdateAsync(entity); + } + + /// + /// 修改模板 + /// + /// + /// + public async Task UpdateTemplateAsync(PrintTemplateUpdateTemplateInput input) + { + var entity = await _printTemplateRep.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["打印模板不存在"]); + } + + if (entity.Version != input.Version) + { + throw ResultOutput.Exception(_adminLocalizer["打印模板已被修改,请刷新后重试"]); + } + + entity.Template = input.Template; + entity.PrintData = input.PrintData; + await _printTemplateRep.UpdateAsync(entity); + } + + /// + /// 设置启用 + /// + /// + /// + public async Task SetEnableAsync(PrintTemplateSetEnableInput input) + { + var printTemplateRep = _printTemplateRep; + using var _ = printTemplateRep.DataFilter.DisableAll(); + + var entity = await printTemplateRep.GetAsync(input.PrintTemplateId); + entity.Enabled = input.Enabled; + await printTemplateRep.UpdateAsync(entity); + } + + /// + /// 彻底删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task DeleteAsync(long id) + { + await _printTemplateRep.DeleteAsync(id); + } + + /// + /// 批量彻底删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task BatchDeleteAsync(long[] ids) + { + await _printTemplateRep.Where(a => ids.Contains(a.Id)).ToDelete().ExecuteAffrowsAsync(); + } + + /// + /// 删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task SoftDeleteAsync(long id) + { + await _printTemplateRep.SoftDeleteAsync(id); + } + + /// + /// 批量删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task BatchSoftDeleteAsync(long[] ids) + { + await _printTemplateRep.SoftDeleteAsync(a => ids.Contains(a.Id)); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Region/RegionInfo.cs b/src/modules/admin/ZhonTai.Admin/Services/Region/RegionInfo.cs new file mode 100644 index 0000000..4f868a8 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Region/RegionInfo.cs @@ -0,0 +1,39 @@ +using System.Text.Json.Serialization; +using System.Text.RegularExpressions; + +namespace ZhonTai.Admin.Services.Region; + + +public class RegionInfo +{ + private static readonly Regex ShengjiRegex = new Regex( + @"^(?.+?)[((](?[^))]+)[))]$", + RegexOptions.Compiled | RegexOptions.ExplicitCapture); + + [JsonPropertyName("children")] + public List Children { get; set; } + + [JsonPropertyName("diji")] + public string DiJi { get; set; } + + [JsonPropertyName("quHuaDaiMa")] + public string QuHuaDaiMa { get; set; } + + [JsonPropertyName("quhao")] + public string QuHao { get; set; } + + [JsonPropertyName("shengji")] + public string ShengJi { get; set; } + + [JsonPropertyName("xianji")] + public string XianJi { get; set; } + + public (string Name, string ShortName) ParseShengJi() + { + var match = ShengjiRegex.Match(ShengJi ?? ""); + return match.Success + ? (match.Groups["Name"].Value.Trim(), + match.Groups["ShortName"].Value.Trim()) + : ("", ""); + } +} diff --git a/src/modules/admin/ZhonTai.Admin/Services/Region/RegionService.cs b/src/modules/admin/ZhonTai.Admin/Services/Region/RegionService.cs new file mode 100644 index 0000000..2362aec --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Region/RegionService.cs @@ -0,0 +1,406 @@ +using Microsoft.AspNetCore.Mvc; +using AngleSharp; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.Region; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Resources; +using ZhonTai.Common.Extensions; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using Yitter.IdGenerator; +using ToolGood.Words.Pinyin; +using Flurl.Http; +using System.Text; +using AngleSharp.Dom; +using System.Text.RegularExpressions; +using ZhonTai.Common.Helpers; + +namespace ZhonTai.Admin.Services.Region; + +/// +/// 地区服务 +/// +[Order(220)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class RegionService : BaseService, IDynamicApi +{ + private readonly AdminRepositoryBase _regionRep; + private readonly AdminLocalizer _adminLocalizer; + + public RegionService(AdminRepositoryBase regionRep, AdminLocalizer adminLocalizer) + { + _regionRep = regionRep; + _adminLocalizer = adminLocalizer; + } + + [NonAction] + public async Task> GetParentIdListAsync(long id) + { + var regionRep = _regionRep; + using var _ = regionRep.DataFilter.DisableAll(); + + return await regionRep.Select + .Where(a => a.Id == id) + .AsTreeCte(up: true) + .ToListAsync(a => a.Id); + } + + /// + /// 查询 + /// + /// + /// + public async Task GetAsync(long id) + { + var regionRep = _regionRep; + using var _ = regionRep.DataFilter.DisableAll(); + + var ouput = await regionRep.Select + .WhereDynamic(id) + .ToOneAsync(); + + ouput.ParentIdList = await GetParentIdListAsync(ouput.ParentId); + + return ouput; + } + + /// + /// 查询下级列表 + /// + /// + /// + [HttpPost] + public async Task> GetChildListAsync(RegionGetListInput input) + { + var regionRep = _regionRep; + using var _ = regionRep.DataFilter.DisableAll(); + + return await regionRep.Select + .Where(a => a.ParentId == input.ParentId) + .WhereIf(input.Hot.HasValue, a => a.Hot == input.Hot.Value) + .WhereIf(input.Enabled.HasValue, a => a.Enabled == input.Enabled.Value) + .OrderBy(a => a.Level) + .OrderByDescending(a => a.Hot) + .OrderBy(a => new { a.Sort, a.Code }) + .ToListAsync(); + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var regionRep = _regionRep; + using var _ = regionRep.DataFilter.DisableAll(); + + var filter = input.Filter; + + var list = await regionRep.Select + .WhereIf(filter != null && filter.Name.NotNull(), a => a.Name.Contains(filter.Name)) + .WhereIf(filter != null && filter.ParentId.HasValue, a => a.ParentId == filter.ParentId.Value) + .WhereIf(filter != null && filter.Level.HasValue, a => a.Level == filter.Level.Value) + .WhereIf(filter != null && filter.Hot.HasValue, a => a.Hot == filter.Hot.Value) + .WhereIf(filter != null && filter.Enabled.HasValue, a => a.Enabled == filter.Enabled.Value) + .Count(out var total) + .Page(input.CurrentPage, input.PageSize) + .OrderBy(a => a.Level) + .OrderByDescending(a => a.Hot) + .OrderBy(a => new { a.Sort, a.Code }) + .ToListAsync(); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 新增 + /// + /// + /// + public async Task AddAsync(RegionAddInput input) + { + var regionRep = _regionRep; + using var _ = regionRep.DataFilter.DisableAll(); + + if (await regionRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Name == input.Name)) + { + throw ResultOutput.Exception(_adminLocalizer["此地区名已存在"]); + } + + if (input.Code.NotNull() && await regionRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["此地区代码已存在"]); + } + + var entity = Mapper.Map(input); + entity.Pinyin = WordsHelper.GetPinyin(entity.Name); + entity.PinyinFirst = WordsHelper.GetFirstPinyin(entity.Name); + + await regionRep.InsertAsync(entity); + + return entity.Id; + } + + /// + /// 修改 + /// + /// + /// + public async Task UpdateAsync(RegionUpdateInput input) + { + var regionRep = _regionRep; + using var _ = regionRep.DataFilter.DisableAll(); + + var entity = await regionRep.GetAsync(input.Id); + if (entity == null) + { + throw ResultOutput.Exception(_adminLocalizer["地区不存在"]); + } + + if (await regionRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Name == input.Name)) + { + throw ResultOutput.Exception(_adminLocalizer["此地区名已存在"]); + } + + if (input.Code.NotNull() && await regionRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["此地区代码已存在"]); + } + + Mapper.Map(input, entity); + await regionRep.UpdateAsync(entity); + } + + [NonAction] + public async Task> GetChildIdListAsync(long id) + { + var regionRep = _regionRep; + using var _ = regionRep.DataFilter.DisableAll(); + + return await regionRep.Select + .Where(a => a.Id == id) + .AsTreeCte() + .ToListAsync(a => a.Id); + } + + /// + /// 彻底删除 + /// + /// + /// + public async Task DeleteAsync(long id) + { + var regionRep = _regionRep; + using var _ = regionRep.DataFilter.DisableAll(); + + var idList = await GetChildIdListAsync(id); + + await regionRep.DeleteAsync(a => idList.Contains(a.Id)); + } + + /// + /// 删除 + /// + /// + /// + public async Task SoftDeleteAsync(long id) + { + var regionRep = _regionRep; + using var _ = regionRep.DataFilter.DisableAll(); + + var idList = await GetChildIdListAsync(id); + + await regionRep.SoftDeleteAsync(a => idList.Contains(a.Id)); + } + + /// + /// 设置启用 + /// + /// + /// + public async Task SetEnableAsync(RegionSetEnableInput input) + { + var regionRep = _regionRep; + using var _ = regionRep.DataFilter.DisableAll(); + + var entity = await regionRep.GetAsync(input.RegionId); + entity.Enabled = input.Enabled; + await regionRep.UpdateAsync(entity); + } + + /// + /// 设置热门 + /// + /// + /// + public async Task SetHotAsync(RegionSetHotInput input) + { + var regionRep = _regionRep; + using var _ = regionRep.DataFilter.DisableAll(); + + var entity = await regionRep.GetAsync(input.RegionId); + entity.Hot = input.Hot; + await regionRep.UpdateAsync(entity); + } + + /// + /// 获得省份列表 + /// + /// + /// + /// + private static List GetProvinceList(string html) + { + var regex = new Regex(@"var\s+json\s*=\s*(\[.*?\])\s*;", + RegexOptions.Singleline | RegexOptions.IgnoreCase); + + var match = regex.Match(html); + if (!match.Success) + throw new InvalidOperationException("未找到json数据"); + + var jsonString = match.Groups[1].Value; + + return JsonHelper.Deserialize>(jsonString) ?? []; + } + + /// + /// 同步数据 + /// + /// 地区级别 + /// + public async Task SyncDataAsync(RegionLevel regionLevel = RegionLevel.City) + { + // 支持GBK编码 + Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); + var xzqhHtml = await "http://xzqh.mca.gov.cn/map".GetStringAsync(); + var provinceList = GetProvinceList(xzqhHtml); + + var regionRep = _regionRep; + using var _ = regionRep.DataFilter.DisableAll(); + + foreach (var province in provinceList) + { + var regionList = new List(); + + //转换省份数据 + var shengJi = province.ParseShengJi(); + var provinceRegion = new RegionEntity() + { + Id = YitIdHelper.NextId(), + ParentId = 0, + Name = shengJi.Name, + ShortName = shengJi.ShortName, + Code = province.QuHuaDaiMa, + AreaCode = province.QuHao, + Level = RegionLevel.Province, + Pinyin = WordsHelper.GetPinyin(shengJi.Name), + PinyinFirst = WordsHelper.GetFirstPinyin(shengJi.Name), + }; + regionList.Add(provinceRegion); + + var config = Configuration.Default.WithDefaultLoader(); + var context = BrowsingContext.New(config); + // 使用GBK编码 + var gbk = Encoding.GetEncoding("GBK"); + var gbkBytes = gbk.GetBytes(province.ShengJi); + var shengJiEncoded = string.Join("", gbkBytes.Select(b => $"%{b:X2}")); + var document = await context.OpenAsync($"http://xzqh.mca.gov.cn/defaultQuery?shengji={shengJiEncoded}&diji=-1&xianji=-1"); + + var tableElement = document.QuerySelector("table.info_table"); + + //获取城市数据 + var cityList = tableElement.QuerySelectorAll("tr[flag].shi_nub"); + foreach (var city in cityList) + { + var cityTdList = city.QuerySelectorAll("td"); + var cityId = YitIdHelper.NextId(); + var cityName = cityTdList[0].QuerySelector(".name_text").Text().Trim(); + var population = cityTdList[2].TextContent.Trim(); + var area = cityTdList[3].TextContent.Trim(); + var cityCode = cityTdList[4].TextContent.Trim(); + var cityRegion = new RegionEntity() + { + Id = cityId, + ParentId = provinceRegion.Id, + Name = cityName, + Capital = cityTdList[1].TextContent.Trim(), + Population = population.NotNull() ? population.ToInt() : null, + Area = area.NotNull() ? area.ToInt() : null, + Code = cityCode.NotNull() ? cityCode : cityId.ToString(), + AreaCode = cityTdList[5].TextContent.Trim(), + ZipCode = cityTdList[6].TextContent.Trim(), + Level = RegionLevel.City, + Pinyin = WordsHelper.GetPinyin(cityName), + PinyinFirst = WordsHelper.GetFirstPinyin(cityName), + }; + regionList.Add(cityRegion); + + //获取县/区数据 + var countyList = tableElement.QuerySelectorAll($"tr[parent=\"{cityRegion.Name}\"]"); + foreach (var county in countyList) + { + var countyTdList = county.QuerySelectorAll("td"); + var countyId = YitIdHelper.NextId(); + var countyName = countyTdList[0].TextContent; + var countyPopulation = countyTdList[2].TextContent.Trim(); + var countyArea = countyTdList[3].TextContent.Trim(); + var countyCode = countyTdList[4].TextContent.Trim(); + var countyRegion = new RegionEntity() + { + Id = countyId, + ParentId = cityRegion.Id, + Name = countyName, + Capital = countyTdList[1].TextContent.Trim(), + Population = countyPopulation.NotNull() ? countyPopulation.ToInt() : null, + Area = countyArea.NotNull() ? countyArea.ToInt() : null, + Code = countyCode.NotNull() ? countyCode : countyId.ToString(), + AreaCode = countyTdList[5].TextContent.Trim(), + ZipCode = countyTdList[6].TextContent.Trim(), + Level = RegionLevel.County, + Pinyin = WordsHelper.GetPinyin(countyName), + PinyinFirst = WordsHelper.GetFirstPinyin(countyName), + }; + regionList.Add(countyRegion); + } + + var codeList = regionList.Select(a => a.Code).ToList(); + var existsDataList = await regionRep.Where(a => codeList.Contains(a.Code)).ToListAsync(); + var existsDataCodeList = existsDataList.Select(a => a.Code).ToList(); + var insertDataList = regionList.Where(a => !existsDataCodeList.Contains(a.Code)); + + if (insertDataList.Any()) + { + await regionRep.InsertAsync(insertDataList); + } + + if (existsDataList.Any()) + { + foreach (var item in existsDataList) + { + var updateItem = regionList.Where(a => a.Code == item.Code).First(); + item.Name = updateItem.Name; + item.Capital = updateItem.Capital; + item.Population = updateItem.Population; + item.Area = updateItem.Area; + item.Code = updateItem.Code; + item.AreaCode = updateItem.AreaCode; + item.ZipCode = updateItem.ZipCode; + item.Pinyin = updateItem.Pinyin; + item.PinyinFirst = updateItem.PinyinFirst; + } + + await regionRep.UpdateAsync(existsDataList); + } + } + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/RemoteApp/RemoteAppService.cs b/src/modules/admin/ZhonTai.Admin/Services/RemoteApp/RemoteAppService.cs new file mode 100644 index 0000000..e0e87a4 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/RemoteApp/RemoteAppService.cs @@ -0,0 +1,220 @@ +using Mapster; +using Microsoft.AspNetCore.Http; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.RemoteApp; +using ZhonTai.Admin.Services.RemoteApp.Dto; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Exceptions; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Core.Auth; +using ZhonTai.Admin.Core.Configs; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.StaticFiles; +using ZhonTai.Admin.Domain.User; + +namespace ZhonTai.Admin.Services.RemoteApp; + +/// +/// 远程应用服务 +/// +[Order(200)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class RemoteAppService : BaseService, IRemoteAppService, IDynamicApi +{ + private readonly AdminRepositoryBase _remoteAppRepository; + private readonly AdminRepositoryBase _userRepository; + private readonly Lazy _fileService; + private readonly AppConfig _appConfig; + private readonly IWebHostEnvironment _env; + + public RemoteAppService( + AdminRepositoryBase remoteAppRepository, + AdminRepositoryBase userRepository, + Lazy fileService, + IOptions appConfig, + IWebHostEnvironment env) + { + _remoteAppRepository = remoteAppRepository; + _userRepository = userRepository; + _fileService = fileService; + _appConfig = appConfig.Value; + _env = env; + } + + /// + /// 获取远程应用 + /// + /// + /// + public async Task GetAsync(long id) + { + var remoteApp = await _remoteAppRepository.GetAsync(id); + return remoteApp; + } + + /// + /// 查询远程应用分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var key = input.Filter?.Name; + var site = input.Filter?.Site; + var createdTimeRange = input.Filter?.CreatedTimeRange; + + var list = await _remoteAppRepository.Select + .WhereIf(key.NotNull(), a => a.Name.Contains(key) || a.IpAddress.Contains(key) || a.Domain.Contains(key)) + .WhereIf(site.NotNull(), a => a.Site.Equals(site)) + .WhereIf(createdTimeRange != null, + a => a.CreatedTime >= createdTimeRange[0] && a.CreatedTime <= createdTimeRange[1]) + .Count(out var total) + .OrderByDescending(true, a => a.Id) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 新增远程应用 + /// + /// + /// + public async Task AddAsync(RemoteAppAddInput input) + { + var entity = input.Adapt(); + await _remoteAppRepository.InsertAsync(entity); + return entity.Id; + } + + /// + /// 修改远程应用 + /// + /// + /// + public async Task UpdateAsync(RemoteAppUpdateInput input) + { + var entity = await _remoteAppRepository.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw new AppException("远程应用不存在!"); + } + + input.Adapt(entity); + await _remoteAppRepository.UpdateAsync(entity); + } + + /// + /// 删除远程应用 + /// + /// + /// + public async Task DeleteAsync(long id) + { + await _remoteAppRepository.SoftDeleteAsync(m => m.Id == id); + } + + /// + /// 上传头像 + /// + /// + /// + /// + [HttpPost] + [Login] + public async Task RemoteUpload(IFormFile file, bool autoUpdate = false) + { + var fileInfo = await _fileService.Value.UploadFileAsync(file); + return fileInfo.LinkUrl; + } + + /// + /// 生成远程连接 + /// + /// + /// + [HttpPost] + public async Task RemoteConnect(RemoteAppConncetInput input) + { + var entity = await _remoteAppRepository.GetAsync(input.Id); + if (entity == null) + { + throw ResultOutput.Exception("远程应用不存在!"); + } + + var username = entity.Domain == "WUXIBIO" ? _userRepository.Get(User.Id)?.Email.Split('@')[0] : entity.Username; + + var rdpContent = $@"screen mode id:i:2 +use multimon:i:0 +desktopwidth:i:1920 +desktopheight:i:1080 +session bpp:i:32 +winposstr:s:0,1,0,0,1920,1080 +compression:i:1 +keyboardhook:i:2 +audiocapturemode:i:0 +videoplaybackmode:i:1 +connection type:i:7 +networkautodetect:i:1 +bandwidthautodetect:i:1 +displayconnectionbar:i:1 +username:s:{username} +domain:s:{entity.Domain} +alternate shell:s: +shell working directory:s: +disable wallpaper:i:1 +disable full window drag:i:1 +disable menu anims:i:1 +disable themes:i:0 +disable cursor setting:i:0 +bitmapcachepersistenable:i:1 +full address:s:{entity.IpAddress} +audiomode:i:0 +redirectprinters:i:1 +redirectcomports:i:0 +redirectsmartcards:i:1 +redirectclipboard:i:1 +redirectposdevices:i:0 +autoreconnection enabled:i:1 +authentication level:i:2 +prompt for credentials:i:0 +negotiate security layer:i:1 +remoteapplicationmode:i:0 +alternate full address:s: +dynamic resolution:i:1 +"; + + // 确保目录存在 + var rdpDir = Path.Combine(_env.WebRootPath, "rdp"); + if (!Directory.Exists(rdpDir)) + { + Directory.CreateDirectory(rdpDir); + } + + // 生成文件保存在wwwroot/rdp目录下 + var fileName = $"{Guid.NewGuid()}.rdp"; + var filePath = Path.Combine(rdpDir, fileName); + await File.WriteAllTextAsync(filePath, rdpContent); + + // 配置文件提供者以支持.rdp文件类型 + var provider = new FileExtensionContentTypeProvider(); + provider.Mappings[".rdp"] = "application/x-rdp"; + + // 返回下载地址 + return $"{_appConfig.Urls[0]}/rdp/{fileName}"; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Role/RoleService.cs b/src/modules/admin/ZhonTai.Admin/Services/Role/RoleService.cs new file mode 100644 index 0000000..e3777ef --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Role/RoleService.cs @@ -0,0 +1,376 @@ +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain; +using ZhonTai.Admin.Domain.UserRole; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Domain.Role; +using ZhonTai.Admin.Domain.RolePermission; +using ZhonTai.Admin.Domain.RoleOrg; +using ZhonTai.Admin.Services.Role.Dto; +using ZhonTai.Admin.Resources; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; + +namespace ZhonTai.Admin.Services.Role; + +/// +/// 角色服务 +/// +[Order(20)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class RoleService : BaseService, IRoleService, IDynamicApi +{ + private readonly IRoleRepository _roleRep; + private readonly IUserRepository _userRep; + private readonly IUserRoleRepository _userRoleRep; + private readonly IRolePermissionRepository _rolePermissionRep; + private readonly IRoleOrgRepository _roleOrgRep; + private readonly AdminLocalizer _adminLocalizer; + + public RoleService( + IRoleRepository roleRep, + IUserRepository userRep, + IUserRoleRepository userRoleRep, + IRolePermissionRepository rolePermissionRep, + IRoleOrgRepository roleOrgRep, + AdminLocalizer adminLocalizer + ) + { + _roleRep = roleRep; + _userRep = userRep; + _userRoleRep = userRoleRep; + _rolePermissionRep = rolePermissionRep; + _roleOrgRep = roleOrgRep; + _adminLocalizer = adminLocalizer; + } + + /// + /// 添加角色部门 + /// + /// + /// + /// + private async Task AddRoleOrgAsync(long roleId, long[] orgIds) + { + if (orgIds != null && orgIds.Any()) + { + var roleOrgs = orgIds.Select(orgId => new RoleOrgEntity + { + RoleId = roleId, + OrgId = orgId + }).ToList(); + await _roleOrgRep.InsertAsync(roleOrgs); + } + } + + /// + /// 查询 + /// + /// + /// + public async Task GetAsync(long id) + { + var roleEntity = await _roleRep.Select + .WhereDynamic(id) + .IncludeMany(a => a.Orgs.Select(b => new OrgEntity { Id = b.Id })) + .ToOneAsync(a => new RoleGetOutput { Orgs = a.Orgs }); + + var output = Mapper.Map(roleEntity); + + return output; + } + + /// + /// 查询列表 + /// + /// + /// + public async Task> GetListAsync([FromQuery]RoleGetListInput input) + { + var list = await _roleRep.Select + .WhereIf(input.Name.NotNull(), a => a.Name.Contains(input.Name)) + .OrderBy(a => new {a.ParentId, a.Sort}) + .ToListAsync(); + + return list; + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var key = input.Filter?.Name; + + var list = await _roleRep.Select + .WhereDynamicFilter(input.DynamicFilter) + .WhereIf(key.NotNull(), a => a.Name.Contains(key)) + .Count(out var total) + .OrderByDescending(true, c => c.Id) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 查询角色用户列表 + /// + /// + /// + public async Task> GetRoleUserListAsync([FromQuery] RoleGetRoleUserListInput input) + { + var list = await _userRep.Select.From() + .InnerJoin(a => a.t2.UserId == a.t1.Id) + .Where(a => a.t2.RoleId == input.RoleId) + .WhereIf(input.Name.NotNull(), a => a.t1.Name.Contains(input.Name)) + .OrderByDescending(a => a.t1.Id) + .ToListAsync(); + + return list; + } + + /// + /// 添加角色用户 + /// + /// + /// + public async Task AddRoleUserAsync(RoleAddRoleUserListInput input) + { + var roleId = input.RoleId; + var userIds = await _userRoleRep.Select.Where(a => a.RoleId == roleId).ToListAsync(a => a.UserId); + var insertUserIds = input.UserIds.Except(userIds); + if (insertUserIds != null && insertUserIds.Any()) + { + var userRoleList = insertUserIds.Select(userId => new UserRoleEntity + { + UserId = userId, + RoleId = roleId + }).ToList(); + await _userRoleRep.InsertAsync(userRoleList); + } + + var clearUserIds = userIds.Concat(input.UserIds).Distinct(); + foreach (var userId in clearUserIds) + { + await Cache.DelByPatternAsync(CacheKeys.GetDataPermissionPattern(userId)); + } + } + + /// + /// 移除角色用户 + /// + /// + /// + [HttpPost] + public async Task RemoveRoleUserAsync(RoleAddRoleUserListInput input) + { + var userIds = input.UserIds; + if (userIds != null && userIds.Any()) + { + await _userRoleRep.Where(a => a.RoleId == input.RoleId && input.UserIds.Contains(a.UserId)).ToDelete().ExecuteAffrowsAsync(); + } + + foreach (var userId in userIds) + { + await Cache.DelByPatternAsync(CacheKeys.GetDataPermissionPattern(userId)); + } + } + + /// + /// 新增 + /// + /// + /// + public async Task AddAsync(RoleAddInput input) + { + if (await _roleRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Name == input.Name)) + { + throw ResultOutput.Exception(_adminLocalizer["此{0}已存在", input.Type == RoleType.Group ? "分组" : "角色"]); + } + + if (input.Code.NotNull() && await _roleRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["此{0}编码已存在", input.Type == RoleType.Group ? "分组" : "角色"]); + } + + var entity = Mapper.Map(input); + if (entity.Sort == 0) + { + var sort = await _roleRep.Select.Where(a => a.ParentId == input.ParentId).MaxAsync(a => a.Sort); + entity.Sort = sort + 1; + } + + await _roleRep.InsertAsync(entity); + if (input.DataScope == DataScope.Custom) + { + await AddRoleOrgAsync(entity.Id, input.OrgIds); + } + + return entity.Id; + } + + /// + /// 修改 + /// + /// + /// + public async Task UpdateAsync(RoleUpdateInput input) + { + var entity = await _roleRep.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["角色不存在"]); + } + + if (await _roleRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Name == input.Name)) + { + throw ResultOutput.Exception(_adminLocalizer["此{0}已存在", input.Type == RoleType.Group ? "分组" : "角色"]); + } + + if (input.Code.NotNull() && await _roleRep.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Code == input.Code)) + { + throw ResultOutput.Exception(_adminLocalizer["此{0}编码已存在", input.Type == RoleType.Group ? "分组" : "角色"]); + } + + Mapper.Map(input, entity); + await _roleRep.UpdateAsync(entity); + await _roleOrgRep.DeleteAsync(a => a.RoleId == entity.Id); + if (input.DataScope == DataScope.Custom) + { + await AddRoleOrgAsync(entity.Id, input.OrgIds); + } + + var userIds = await _userRoleRep.Select.Where(a => a.RoleId == entity.Id).ToListAsync(a => a.UserId); + foreach (var userId in userIds) + { + await Cache.DelByPatternAsync(CacheKeys.GetDataPermissionPattern(userId)); + } + } + + /// + /// 彻底删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task DeleteAsync(long id) + { + var roleIdList = await _roleRep.GetChildIdListAsync(id); + var userIds = await _userRoleRep.Select.Where(a => roleIdList.Contains(a.RoleId)).ToListAsync(a => a.UserId); + + //删除用户角色 + await _userRoleRep.DeleteAsync(a => a.UserId == id); + //删除角色权限 + await _rolePermissionRep.DeleteAsync(a => roleIdList.Contains(a.RoleId)); + //删除角色 + await _roleRep.DeleteAsync(a => roleIdList.Contains(a.Id)); + + foreach (var userId in userIds) + { + await Cache.DelByPatternAsync(CacheKeys.GetDataPermissionPattern(userId)); + } + } + + /// + /// 批量彻底删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task BatchDeleteAsync(long[] ids) + { + var roleIdList = await _roleRep.GetChildIdListAsync(ids); + var userIds = await _userRoleRep.Select.Where(a => roleIdList.Contains(a.RoleId)).ToListAsync(a => a.UserId); + + //删除用户角色 + await _userRoleRep.DeleteAsync(a => roleIdList.Contains(a.RoleId)); + //删除角色权限 + await _rolePermissionRep.DeleteAsync(a => roleIdList.Contains(a.RoleId)); + //删除角色 + await _roleRep.Where(a => roleIdList.Contains(a.Id)).AsTreeCte().ToDelete().ExecuteAffrowsAsync(); + + foreach (var userId in userIds) + { + await Cache.DelByPatternAsync(CacheKeys.GetDataPermissionPattern(userId)); + } + } + + /// + /// 删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task SoftDeleteAsync(long id) + { + var roleIdList = await _roleRep.GetChildIdListAsync(id); + var userIds = await _userRoleRep.Select.Where(a => roleIdList.Contains(a.RoleId)).ToListAsync(a => a.UserId); + await _userRoleRep.DeleteAsync(a => roleIdList.Contains(a.RoleId)); + await _rolePermissionRep.DeleteAsync(a => roleIdList.Contains(a.RoleId)); + await _roleRep.SoftDeleteRecursiveAsync(a => roleIdList.Contains(a.Id)); + foreach (var userId in userIds) + { + await Cache.DelByPatternAsync(CacheKeys.GetDataPermissionPattern(userId)); + } + } + + /// + /// 批量删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task BatchSoftDeleteAsync(long[] ids) + { + var roleIdList = await _roleRep.GetChildIdListAsync(ids); + var userIds = await _userRoleRep.Select.Where(a => ids.Contains(a.RoleId)).ToListAsync(a => a.UserId); + await _userRoleRep.DeleteAsync(a => roleIdList.Contains(a.RoleId)); + await _rolePermissionRep.DeleteAsync(a => roleIdList.Contains(a.RoleId)); + await _roleRep.SoftDeleteRecursiveAsync(a => roleIdList.Contains(a.Id)); + foreach (var userId in userIds) + { + await Cache.DelByPatternAsync(CacheKeys.GetDataPermissionPattern(userId)); + } + } + + /// + /// 设置数据权限 + /// + /// + /// + public async Task SetDataScopeAsync(RoleSetDataScopeInput input) + { + var entity = await _roleRep.GetAsync(input.RoleId); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["角色不存在"]); + } + + Mapper.Map(input, entity); + await _roleRep.UpdateAsync(entity); + await _roleOrgRep.DeleteAsync(a => a.RoleId == entity.Id); + if (input.DataScope == DataScope.Custom) + { + await AddRoleOrgAsync(entity.Id, input.OrgIds); + } + + var userIds = await _userRoleRep.Select.Where(a => a.RoleId == entity.Id).ToListAsync(a => a.UserId); + foreach (var userId in userIds) + { + await Cache.DelByPatternAsync(CacheKeys.GetDataPermissionPattern(userId)); + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Role/_MapConfig.cs b/src/modules/admin/ZhonTai.Admin/Services/Role/_MapConfig.cs new file mode 100644 index 0000000..6fc179e --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Role/_MapConfig.cs @@ -0,0 +1,17 @@ +using Mapster; +using ZhonTai.Admin.Services.Role.Dto; + +namespace ZhonTai.Admin.Services.Role; + +/// +/// 映射配置 +/// +public class MapConfig : IRegister +{ + public void Register(TypeAdapterConfig config) + { + config + .NewConfig() + .Map(dest => dest.OrgIds, src => src.Orgs.Select(a => a.Id)); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/SearchTemplate/SearchTemplateService.cs b/src/modules/admin/ZhonTai.Admin/Services/SearchTemplate/SearchTemplateService.cs new file mode 100644 index 0000000..8440bce --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/SearchTemplate/SearchTemplateService.cs @@ -0,0 +1,101 @@ +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Resources; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Services.SearchTemplate.Outputs; +using ZhonTai.Admin.Services.SearchTemplate.Inputs; +using ZhonTai.Admin.Domain.SearchTemplate; + +namespace ZhonTai.Admin.Services.SearchTemplate; + +/// +/// 查询模板服务 +/// +[Order(20)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class SearchTemplateService : BaseService, IDynamicApi +{ + private readonly AdminRepositoryBase _searchTemplateRep; + private readonly AdminLocalizer _adminLocalizer; + + public SearchTemplateService( + AdminRepositoryBase searchTemplateRep, + AdminLocalizer adminLocalizer + ) + { + _searchTemplateRep = searchTemplateRep; + _adminLocalizer = adminLocalizer; + } + + /// + /// 查询 + /// + /// + /// + [Login] + public async Task GetAsync(long id) + { + var output = await _searchTemplateRep.Select + .Where(a=>a.CreatedUserId == User.Id && a.Id == id) + .ToOneAsync(); + + return output; + } + + /// + /// 查询列表 + /// + /// + /// + [Login] + public async Task> GetListAsync(long moduleId) + { + var dataList = await _searchTemplateRep.Select + .Where(a => a.CreatedUserId == User.Id && a.ModuleId == moduleId) + .ToListAsync(); + + return dataList; + } + + /// + /// 保存 + /// + /// + /// + [Login] + public async Task SaveAsync(SearchTemplateSaveInput input) + { + var entity = await _searchTemplateRep.Where(a => a.CreatedUserId == User.Id && a.ModuleId == input.ModuleId && a.Name == input.Name).ToOneAsync(); + if (entity != null) + { + if (entity.Version != input.Version) + { + throw ResultOutput.Exception(_adminLocalizer["查询模板已被修改,请刷新后重试"]); + } + + entity.Template = input.Template; + await _searchTemplateRep.UpdateAsync(entity); + } + else + { + entity = Mapper.Map(input); + await _searchTemplateRep.InsertAsync(entity); + } + + return entity.Id; + } + + /// + /// 彻底删除 + /// + /// + /// + [Login] + public virtual async Task DeleteAsync(long id) + { + await _searchTemplateRep.DeleteAsync(a => a.CreatedUserId == User.Id && a.Id == id); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/SiteMsg/SiteMsgService.cs b/src/modules/admin/ZhonTai.Admin/Services/SiteMsg/SiteMsgService.cs new file mode 100644 index 0000000..53042ef --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/SiteMsg/SiteMsgService.cs @@ -0,0 +1,238 @@ +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.Msg; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Services.SiteMsg.Dto; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Services.MsgType; +using ZhonTai.Admin.Core.Db; +using ZhonTai.Admin.Resources; + +namespace ZhonTai.Admin.Services.SiteMsg; + +/// +/// 站内信服务 +/// +[Order(20)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class SiteMsgService : BaseService, IDynamicApi +{ + private readonly AdminRepositoryBase _msgUserRep; + private readonly MsgTypeService _msgTypeService; + private readonly AdminLocalizer _adminLocalizer; + + public SiteMsgService( + AdminRepositoryBase msgUserRep, + MsgTypeService msgTypeService, + AdminLocalizer adminLocalizer + ) + { + _msgUserRep = msgUserRep; + _msgTypeService = msgTypeService; + _adminLocalizer = adminLocalizer; + } + + /// + /// 获得内容 + /// + /// + /// + [Login] + [HttpGet] + public async Task GetContentAsync(long id) + { + if (!(id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["请选择消息"]); + } + + var output = await _msgUserRep.Select + .Where(a => a.UserId == User.Id) + .Where(a => a.Id == id) + .FirstAsync(a => new SiteMsgGetContentOutput + { + MsgId = a.MsgId, + Title = a.Msg.Title, + TypeName = a.Msg.Type.Name, + Content = a.Msg.Content, + ReceivedTime = a.CreatedTime, + IsRead = a.IsRead, + }); + + return output; + } + + /// + /// 查询分页 + /// + /// + /// + [Login] + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var title = input.Filter?.Title; + var isRead = input.Filter?.IsRead; + + var select = _msgUserRep.Select + .Where(a => a.UserId == User.Id) + .WhereIf(isRead.HasValue, a => a.IsRead == isRead.Value) + .WhereIf(title.NotNull(), a => a.Msg.Title.Contains(title)); + + var typeId = input.Filter?.TypeId; + if (typeId.HasValue) + { + var typeIdList = await _msgTypeService.GetChildIdListAsync(typeId.Value); + select = select.Where(a => typeIdList.Contains(a.Msg.TypeId)); + } + + var list = await select + .Count(out var total) + .OrderByDescending(true, a => a.Id) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(a => new SiteMsgGetPageOutput + { + Title = a.Msg.Title, + TypeId = a.Msg.TypeId, + TypeName = a.Msg.Type.Name, + IsRead = a.IsRead, + ReceivedTime = a.CreatedTime, + }); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 是否未读 + /// + /// + [Login] + [HttpGet] + public async Task IsUnreadAsync() + { + var hasUnread = await _msgUserRep.Select.Where(a => a.UserId == User.Id && a.IsRead == false).AnyAsync(); + + return hasUnread; + } + + /// + /// 全部标为已读 + /// + /// + [Login] + [HttpPost] + public async Task SetAllReadAsync() + { + await _msgUserRep.UpdateDiy.Set(a => new MsgUserEntity + { + IsRead = true, + ReadTime = DbHelper.ServerTime, + ModifiedUserId = User.Id, + ModifiedUserName = User.UserName, + ModifiedUserRealName = User.Name, + ModifiedTime = DbHelper.ServerTime, + }) + .Where(a => a.UserId == User.Id) + .Where(a => a.IsRead == false) + .ExecuteAffrowsAsync(); + } + + /// + /// 标为已读 + /// + /// + /// + [Login] + [HttpPost] + public async Task SetReadAsync(long id) + { + if (!(id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["请选择消息"]); + } + + await _msgUserRep.UpdateDiy.Set(a => new MsgUserEntity + { + IsRead = true, + ReadTime = DbHelper.ServerTime, + ModifiedUserId = User.Id, + ModifiedUserName = User.UserName, + ModifiedUserRealName = User.Name, + ModifiedTime = DbHelper.ServerTime, + }) + .Where(a => a.Id == id) + .Where(a => a.UserId == User.Id) + .Where(a => a.IsRead == false) + .ExecuteAffrowsAsync(); + } + + /// + /// 批量标为已读 + /// + /// + /// + [Login] + [HttpPost] + public async Task BatchSetReadAsync(long[] idList) + { + if (!(idList?.Length > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["请选择消息"]); + } + + await _msgUserRep.UpdateDiy.Set(a => new MsgUserEntity + { + IsRead = true, + ReadTime = DbHelper.ServerTime, + ModifiedUserId = User.Id, + ModifiedUserName = User.UserName, + ModifiedUserRealName = User.Name, + ModifiedTime = DbHelper.ServerTime, + }) + .Where(a => idList.Contains(a.Id)) + .Where(a => a.UserId == User.Id) + .Where(a => a.IsRead == false) + .ExecuteAffrowsAsync(); + } + + /// + /// 删除 + /// + /// + /// + [Login] + public virtual async Task SoftDeleteAsync(long id) + { + if (!(id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["请选择消息"]); + } + + await _msgUserRep.SoftDeleteAsync(id); + } + + /// + /// 批量删除 + /// + /// + [Login] + [HttpPost] + public async Task BatchSoftDeleteAsync(long[] ids) + { + if (!(ids?.Length > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["请选择消息"]); + } + + await _msgUserRep.SoftDeleteAsync(a => ids.Contains(a.Id) && a.UserId == User.Id); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/TaskScheduler/TaskLogService.cs b/src/modules/admin/ZhonTai.Admin/Services/TaskScheduler/TaskLogService.cs new file mode 100644 index 0000000..ee26763 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/TaskScheduler/TaskLogService.cs @@ -0,0 +1,68 @@ +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.Task.Dto; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Repositories; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using FreeScheduler; +using Mapster; + +namespace ZhonTai.Admin.Services.TaskScheduler; + +/// +/// 任务日志服务 +/// +[Order(71)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class TaskLogService : BaseService, ITaskLogService, IDynamicApi +{ + private readonly Scheduler _scheduler; + private readonly AdminLocalizer _adminLocalizer; + private readonly ITaskLogRepository _taskLogRep; + + public TaskLogService(Scheduler scheduler, + AdminLocalizer adminLocalizer, + TaskLogRepository taskLogRep) + { + _scheduler = scheduler; + _adminLocalizer = adminLocalizer; + _taskLogRep = taskLogRep; + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public PageOutput GetPage(PageInput input) + { + if (!(input.Filter != null && input.Filter.TaskId.NotNull())) + { + throw ResultOutput.Exception(_adminLocalizer["请选择任务"]); + } + + var result = Datafeed.GetLogs(_scheduler, input.Filter.TaskId, input.PageSize, input.CurrentPage); + + var data = new PageOutput() + { + List = result.Logs.Adapt>(), + Total = result.Total + }; + + return data; + } + + /// + /// 添加 + /// + /// + /// + [NonAction] + public void Add(TaskLog input) + { + _taskLogRep.InsertAsync(input); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/TaskScheduler/TaskService.cs b/src/modules/admin/ZhonTai.Admin/Services/TaskScheduler/TaskService.cs new file mode 100644 index 0000000..141d0fe --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/TaskScheduler/TaskService.cs @@ -0,0 +1,318 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.ModelBinding; +using Mapster; +using FreeScheduler; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Core.Validators; +using ZhonTai.Admin.Domain; +using ZhonTai.Admin.Domain.Task.Dto; +using ZhonTai.Admin.Services.TaskScheduler.Dto; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Resources; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; + +namespace ZhonTai.Admin.Services.TaskScheduler; + +/// +/// 任务服务 +/// +[Order(70)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class TaskService : BaseService, ITaskService, IDynamicApi +{ + private readonly Scheduler _scheduler; + private readonly ITaskRepository _taskRepository; + private readonly ITaskExtRepository _taskExtRepository; + private readonly AdminLocalizer _adminLocalizer; + + public TaskService(Scheduler scheduler, + ITaskRepository taskRepository, + ITaskExtRepository taskExtRepository, + AdminLocalizer adminLocalizer + ) + { + _scheduler = scheduler; + _taskRepository = taskRepository; + _taskExtRepository = taskExtRepository; + _adminLocalizer = adminLocalizer; + } + + /// + /// 查询报警邮件 + /// + /// + /// + public async Task GetAlerEmailAsync(string id) + { + return await _taskExtRepository.Where(a => a.TaskId == id).ToOneAsync(a => a.AlarmEmail); + } + + /// + /// 查询 + /// + /// + /// + public async Task GetAsync(string id) + { + var taskInfo = Datafeed.GetTask(_scheduler, id); + + if (taskInfo == null) + { + throw ResultOutput.Exception(_adminLocalizer["任务不存在"]); + } + + var taskGetOutput = taskInfo.Adapt(); + var taskExt = await _taskExtRepository.Where(a => a.TaskId == id).ToOneAsync(a => new + { + a.AlarmEmail, + a.FailRetryCount, + a.FailRetryInterval + }); + + if (taskExt != null) + { + taskGetOutput.AlarmEmail = taskExt.AlarmEmail; + taskGetOutput.FailRetryCount = taskExt.FailRetryCount; + taskGetOutput.FailRetryInterval = taskExt.FailRetryInterval; + } + + return taskGetOutput; + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public async Task> GetPage(PageInput input) + { + //var result = Datafeed.GetPage(_scheduler.Value, + // input.Filter.ClusterId, + // input.Filter.Topic, + // input.Filter.TaskStatus, + // input.Filter.StartAddTime, + // input.Filter.EndAddTime, + // input.PageSize, + // input.CurrentPage + //); + + //var data = new PageOutput() + //{ + // List = result.Tasks.Adapt>(), + // Total = result.Total + //}; + + var taskName = input.Filter?.TaskName; + var groupName = input.Filter?.GroupName; + var taskStatus = input.Filter?.TaskStatus; + var startAddTime = input.Filter?.StartAddTime; + var endAddTime = input.Filter?.EndAddTime; + + var list = await _taskRepository.Select + .WhereDynamicFilter(input.DynamicFilter) + .WhereIf(groupName.NotNull(), a => a.Topic.Contains(groupName)) + .WhereIf(taskName.NotNull(), a => a.Topic.Contains(taskName)) + .WhereIf(taskStatus.HasValue,a=> a.Status == taskStatus) + .WhereIf(startAddTime.HasValue && !endAddTime.HasValue, a => a.CreateTime >= startAddTime) + .WhereIf(endAddTime.HasValue && !startAddTime.HasValue, a => a.CreateTime < endAddTime.Value.AddDays(1)) + .WhereIf(startAddTime.HasValue && endAddTime.HasValue, a => a.CreateTime.BetweenEnd(startAddTime.Value, endAddTime.Value.AddDays(1))) + .Count(out var total) + .OrderByDescending(true, c => c.Id) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(); + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 新增 + /// + /// + /// + public async Task Add(TaskAddInput input) + { + if (input.IntervalArgument.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["请输入定时参数"]); + } + + var scheduler = _scheduler; + + var taskld = Datafeed.AddTask(scheduler, input.Topic, input.Body, input.Round, input.Interval, input.IntervalArgument); + + if (taskld.NotNull()) + { + Pause(taskld); + + await _taskExtRepository.InsertAsync(new TaskInfoExt + { + TaskId = taskld, + AlarmEmail = input.AlarmEmail, + FailRetryCount = input.FailRetryCount, + FailRetryInterval = input.FailRetryInterval, + }); + } + + return taskld; + } + + /// + /// 修改 + /// + /// + /// + public async Task UpdateAsync(TaskUpdateInput input) + { + var scheduler = _scheduler; + + var entity = await _taskRepository.GetAsync(a => a.Id == input.Id); + if (entity == null) + { + throw ResultOutput.Exception(_adminLocalizer["任务不存在"]); + } + + if (entity.Status == FreeScheduler.TaskStatus.Running) + { + Pause(entity.Id); + } + + Mapper.Map(input, entity); + + if (entity.Status == FreeScheduler.TaskStatus.Completed) + { + entity.Status = FreeScheduler.TaskStatus.Paused; + } + + await _taskRepository.UpdateAsync(entity); + + var taskExt = await _taskExtRepository.Select.WhereDynamic(entity.Id).ToOneAsync(); + if(taskExt != null) + { + taskExt.AlarmEmail = input.AlarmEmail; + taskExt.FailRetryCount = input.FailRetryCount; + taskExt.FailRetryInterval = input.FailRetryInterval; + await _taskExtRepository.UpdateAsync(taskExt); + } + else + { + await _taskExtRepository.InsertAsync(new TaskInfoExt + { + TaskId = entity.Id, + AlarmEmail = input.AlarmEmail, + FailRetryCount = input.FailRetryCount, + FailRetryInterval = input.FailRetryInterval, + }); + } + + if (entity.Status != FreeScheduler.TaskStatus.Paused) + { + Resume(entity.Id); + } + } + + /// + /// 暂停任务 + /// + /// + /// + public void Pause([BindRequired][ValidateRequired("请选择任务")]string id) + { + var scheduler = _scheduler; + scheduler.PauseTask(id); + } + + /// + /// 启动任务 + /// + /// + /// + public void Resume([BindRequired][ValidateRequired("请选择任务")] string id) + { + var scheduler = _scheduler; + scheduler.ResumeTask(id); + } + + /// + /// 执行任务 + /// + /// + /// + public void Run([BindRequired][ValidateRequired("请选择任务")] string id) + { + var scheduler = _scheduler; + scheduler.RunNowTask(id); + } + + /// + /// 删除任务 + /// + /// + /// + public async Task Delete([BindRequired][ValidateRequired("请选择任务")] string id) + { + var scheduler = _scheduler; + scheduler.RemoveTask(id); + + await _taskExtRepository.DeleteAsync(a => a.TaskId == id); + } + + /// + /// 批量执行任务 + /// + /// + public void BatchRun([BindRequired][ValidateRequired("请选择任务")] string[] ids) + { + foreach (var id in ids) + { + Run(id); + } + } + + /// + /// 批量暂停任务 + /// + /// + /// + public void BatchPause([BindRequired][ValidateRequired("请选择任务")] string[] ids) + { + foreach (var id in ids) + { + Pause(id); + } + } + + /// + /// 批量启动任务 + /// + /// + /// + public void BatchResume([BindRequired][ValidateRequired("请选择任务")] string[] ids) + { + foreach (var id in ids) + { + Resume(id); + } + } + + /// + /// 批量删除任务 + /// + /// + /// + public async Task BatchDelete([BindRequired][ValidateRequired("请选择任务")] string[] ids) + { + foreach (var id in ids) + { + await Delete(id); + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/TemplateCenter/TemplateCenterService.cs b/src/modules/admin/ZhonTai.Admin/Services/TemplateCenter/TemplateCenterService.cs new file mode 100644 index 0000000..193dbe2 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/TemplateCenter/TemplateCenterService.cs @@ -0,0 +1,815 @@ +using Mapster; +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Contracts.Domain.TemplateCenter; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Contracts.Services.TemplateCenter; +using ZhonTai.Admin.Contracts.Services.TemplateCenter.Dto; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Admin.Services.TemplateCenter; + +/// +/// 模板中心服务 +/// +[Order(220)] +[DynamicApi(Area = AdminConsts.AreaName)] +public partial class TemplateCenterService : BaseService, ITemplateCenterService, IDynamicApi +{ + private readonly AdminRepositoryBase _templateCenterRepository; + private readonly AdminLocalizer _adminLocalizer; + + public TemplateCenterService( + AdminRepositoryBase templateCenterRepository, + AdminLocalizer adminLocalizer + ) + { + _templateCenterRepository = templateCenterRepository; + _adminLocalizer = adminLocalizer; + } + + /// + /// 获取模板树形结构列表 + /// + public async Task> GetTreeAsync() + { + var allTemplates = await _templateCenterRepository.Select + .OrderBy(a => a.ParentId) + .OrderBy(a => a.Id) + .ToListAsync(); + + return BuildTree(allTemplates, 0); + } + + /// + /// 新增模板 + /// + public async Task AddAsync(TemplateCenterAddInput input) + { + // 检查父级是否存在 + if (input.ParentId > 0) + { + var parentExists = await _templateCenterRepository.Select.Where(a => a.Id == input.ParentId).AnyAsync(); + if (!parentExists) + { + throw ResultOutput.Exception(_adminLocalizer["父级模板不存在"]); + } + } + + var entity = input.Adapt(); + await _templateCenterRepository.InsertAsync(entity); + return entity.Id; + } + + /// + /// 修改模板 + /// + public async Task UpdateAsync(TemplateCenterUpdateInput input) + { + var entity = await _templateCenterRepository.Select.Where(a => a.Id == input.Id).ToOneAsync(); + if (entity == null) + { + throw ResultOutput.Exception(_adminLocalizer["模板不存在"]); + } + + // 检查父级是否存在 + if (input.ParentId > 0 && input.ParentId != entity.ParentId) + { + var parentExists = await _templateCenterRepository.Select.Where(a => a.Id == input.ParentId).AnyAsync(); + if (!parentExists) + { + throw ResultOutput.Exception(_adminLocalizer["父级模板不存在"]); + } + + // 检查是否形成循环引用 + if (await IsCircularReferenceAsync(input.Id, input.ParentId)) + { + throw ResultOutput.Exception(_adminLocalizer["不能选择自己或子级作为父级"]); + } + } + + input.Adapt(entity); + await _templateCenterRepository.UpdateAsync(entity); + } + + /// + /// 删除模板 + /// + public async Task DeleteAsync(long id) + { + // 检查是否有子级 + var hasChildren = await _templateCenterRepository.Select.Where(a => a.ParentId == id).AnyAsync(); + if (hasChildren) + { + throw ResultOutput.Exception(_adminLocalizer["存在子级模板,无法删除"]); + } + + await _templateCenterRepository.SoftDeleteAsync(a => a.Id == id); + } + + /// + /// 读取共享文件夹内容并添加到指定父级下(加载子集) + /// + /// 文件夹路径 + /// 父级模板ID + /// 是否包含子文件夹 + /// + public async Task> GetSharedFolderContentAsync(string folderPath, long parentId, bool includeSubfolders = true) + { + if (string.IsNullOrWhiteSpace(folderPath)) + { + throw ResultOutput.Exception(_adminLocalizer["文件夹路径不能为空"]); + } + + if (!Directory.Exists(folderPath)) + { + throw ResultOutput.Exception(_adminLocalizer["文件夹不存在"]); + } + + // 验证父级模板是否存在 + if (parentId > 0) + { + var parentExists = await _templateCenterRepository.Select.Where(a => a.Id == parentId).AnyAsync(); + if (!parentExists) + { + throw ResultOutput.Exception(_adminLocalizer["父级模板不存在"]); + } + } + + try + { + var result = new List(); + var rootInfo = new DirectoryInfo(folderPath); + + // 递归处理文件夹内容并保存到数据库 + var addedTemplates = await ProcessDirectoryAsync(rootInfo, parentId, includeSubfolders, folderPath); + result.AddRange(addedTemplates); + + return result; + } + catch (UnauthorizedAccessException) + { + throw ResultOutput.Exception(_adminLocalizer["没有访问该文件夹的权限"]); + } + catch (Exception ex) + { + throw ResultOutput.Exception($"{_adminLocalizer["读取文件夹失败"]}: {ex.Message}"); + } + } + + #region 私有辅助方法 + + /// + /// 检查是否形成循环引用 + /// + /// 当前节点ID + /// 父级ID + /// + private async Task IsCircularReferenceAsync(long currentId, long parentId) + { + if (parentId == currentId) + { + return true; + } + + var parent = await _templateCenterRepository.Select.Where(a => a.Id == parentId).ToOneAsync(); + if (parent?.ParentId > 0) + { + return await IsCircularReferenceAsync(currentId, parent.ParentId); + } + + return false; + } + + /// + /// 构建树形结构 + /// + /// 所有模板列表 + /// 父级ID + /// + private List BuildTree(List templates, long parentId) + { + var result = new List(); + + var children = templates.Where(x => x.ParentId == parentId).ToList(); + foreach (var child in children) + { + child.Children = BuildTree(templates, child.Id); + result.Add(child); + } + + return result; + } + + /// + /// 递归处理目录内容并保存到数据库 + /// + /// 目录信息 + /// 父级ID + /// 是否包含子文件夹 + /// 根路径 + /// + private async Task> ProcessDirectoryAsync(DirectoryInfo directoryInfo, long parentId, bool includeSubfolders, string rootPath) + { + var result = new List(); + + try + { + // 查询父级模板 + var parentTemplate = await _templateCenterRepository.Select.Where(a => a.Id == parentId).ToOneAsync(); + if (parentTemplate == null) + { + throw ResultOutput.Exception(_adminLocalizer["父级模板不存在"]); + } + + // 解析过滤规则 + var filterRules = ParseFilterRules(parentTemplate.FileKeword); + + // 查询当前父级下已存在的所有子项目 + var existingItems = await _templateCenterRepository.Select + .Where(a => a.ParentId == parentId) + .ToListAsync(); + + // 处理子目录(只有在包含子文件夹时才处理) + if (includeSubfolders) + { + var directories = directoryInfo.GetDirectories(); + var filteredDirectories = FilterDirectories(directories, filterRules); + var latestVersionDirectories = FilterLatestVersionDirectories(filteredDirectories); + + foreach (var dir in latestVersionDirectories) + { + // 检查是否已存在同基础名称的文件夹 + var dirVersionInfo = ParseFileVersion(dir.Name); + var existingFolder = existingItems.FirstOrDefault(x => + { + if (x.Type != 1) return false; // 必须是文件夹类型 + var existingVersionInfo = ParseFileVersion(x.Name); + return existingVersionInfo.BaseName == dirVersionInfo.BaseName; + }); + + if (existingFolder != null) + { + // 更新已存在的文件夹路径 + var updateInput = new TemplateCenterUpdateInput + { + Id = existingFolder.Id, + ParentId = parentId, + Name = dir.Name, + Type = 1, + FilePath = dir.FullName, + FunctionIntro = $"文件夹: {dir.Name}", + Keywords = $"文件夹,目录,{dir.Name}", + FileKeword = parentTemplate.FileKeword, + ContactPerson = existingFolder.ContactPerson, + Site = existingFolder.Site, + FileUrl = existingFolder.FileUrl + }; + + await UpdateAsync(updateInput); + + // 获取更新后的模板信息 + var updatedFolder = await _templateCenterRepository.Select.Where(a => a.Id == existingFolder.Id).ToOneAsync(); + if (updatedFolder != null) + { + var folderOutput = updatedFolder.Adapt(); + folderOutput.Children = new List(); + result.Add(folderOutput); + + // 递归处理子文件夹(includeSubfolders 已经是 true) + var subItems = await ProcessDirectoryAsync(dir, existingFolder.Id, includeSubfolders, rootPath); + folderOutput.Children.AddRange(subItems); + } + } + else + { + // 创建新的文件夹模板 + var folderTemplate = new TemplateCenterAddInput + { + ParentId = parentId, + Name = dir.Name, + Type = 1, // 文件夹类型 + FilePath = dir.FullName, + FunctionIntro = $"文件夹: {dir.Name}", + Keywords = $"文件夹,目录,{dir.Name}", + FileKeword = parentTemplate.FileKeword + }; + + // 保存文件夹模板 + var folderId = await AddAsync(folderTemplate); + + // 获取保存后的模板信息 + var savedFolder = await _templateCenterRepository.Select.Where(a => a.Id == folderId).ToOneAsync(); + if (savedFolder != null) + { + var folderOutput = savedFolder.Adapt(); + folderOutput.Children = new List(); + result.Add(folderOutput); + + // 递归处理子文件夹(includeSubfolders 已经是 true) + var subItems = await ProcessDirectoryAsync(dir, folderId, includeSubfolders, rootPath); + folderOutput.Children.AddRange(subItems); + } + } + } + } + + // 处理文件 + var files = directoryInfo.GetFiles(); + var filteredFiles = FilterFiles(files, filterRules); + var latestVersionFiles = FilterLatestVersionFiles(filteredFiles); + + foreach (var file in latestVersionFiles) + { + // 检查是否已存在同基础名称和扩展名的文件 + var fileVersionInfo = ParseFileVersion(Path.GetFileNameWithoutExtension(file.Name)); + var existingFile = existingItems.FirstOrDefault(x => + { + if (x.Type != 2) return false; // 必须是文件类型 + + var existingNameWithoutExt = Path.GetFileNameWithoutExtension(x.Name); + var existingExtension = Path.GetExtension(x.Name); + var currentExtension = file.Extension; + + if (existingExtension != currentExtension) return false; // 扩展名必须相同 + + var existingVersionInfo = ParseFileVersion(existingNameWithoutExt); + return existingVersionInfo.BaseName == fileVersionInfo.BaseName; + }); + + if (existingFile != null) + { + // 更新已存在的文件路径 + var updateInput = new TemplateCenterUpdateInput + { + Id = existingFile.Id, + ParentId = parentId, + Name = file.Name, + Type = 2, + FilePath = file.FullName, + FunctionIntro = $"文件: {file.Name} (大小: {FormatFileSize(file.Length)})", + Keywords = $"文件,{file.Extension},{Path.GetFileNameWithoutExtension(file.Name)}", + FileKeword = file.Extension.TrimStart('.'), + FileUrl = file.FullName, + ContactPerson = existingFile.ContactPerson, + Site = existingFile.Site + }; + + await UpdateAsync(updateInput); + + // 获取更新后的模板信息 + var updatedFile = await _templateCenterRepository.Select.Where(a => a.Id == existingFile.Id).ToOneAsync(); + if (updatedFile != null) + { + var fileOutput = updatedFile.Adapt(); + fileOutput.Children = new List(); + result.Add(fileOutput); + } + } + else + { + // 创建新的文件模板 + var fileTemplate = new TemplateCenterAddInput + { + ParentId = parentId, + Name = file.Name, + Type = 2, // 文件类型 + FilePath = file.FullName, + FunctionIntro = $"文件: {file.Name} (大小: {FormatFileSize(file.Length)})", + Keywords = $"文件,{file.Extension},{Path.GetFileNameWithoutExtension(file.Name)}", + FileKeword = file.Extension.TrimStart('.'), + FileUrl = file.FullName + }; + + // 保存文件模板 + var fileId = await AddAsync(fileTemplate); + + // 获取保存后的模板信息 + var savedFile = await _templateCenterRepository.Select.Where(a => a.Id == fileId).ToOneAsync(); + if (savedFile != null) + { + var fileOutput = savedFile.Adapt(); + fileOutput.Children = new List(); + result.Add(fileOutput); + } + } + } + } + catch (UnauthorizedAccessException) + { + // 忽略没有权限访问的文件夹 + } + + return result.OrderBy(x => x.Name).ToList(); + } + + /// + /// 解析过滤规则 + /// + /// 过滤字符串,格式:关键词,关键词&扩展名,扩展名|关键词&扩展名 + /// + private List ParseFilterRules(string filterString) + { + var rules = new List(); + + if (string.IsNullOrWhiteSpace(filterString)) + { + return rules; + } + + // 按 | 分割不同的规则组 + var ruleGroups = filterString.Split('|', StringSplitOptions.RemoveEmptyEntries); + + foreach (var ruleGroup in ruleGroups) + { + var rule = new FilterRule(); + + // 按 & 分割关键词和扩展名 + var parts = ruleGroup.Split('&', StringSplitOptions.RemoveEmptyEntries); + + if (parts.Length >= 1) + { + // 解析关键词部分 + var keywords = parts[0].Split(',', StringSplitOptions.RemoveEmptyEntries) + .Select(k => k.Trim()) + .Where(k => !string.IsNullOrEmpty(k)) + .ToList(); + rule.Keywords = keywords; + } + + if (parts.Length >= 2) + { + // 解析扩展名部分 + var extensions = parts[1].Split(',', StringSplitOptions.RemoveEmptyEntries) + .Select(e => e.Trim().TrimStart('.').ToLower()) + .Where(e => !string.IsNullOrEmpty(e)) + .ToList(); + rule.Extensions = extensions; + } + + if (rule.Keywords.Any() || rule.Extensions.Any()) + { + rules.Add(rule); + } + } + + return rules; + } + + /// + /// 过滤文件夹 + /// + /// 文件夹数组 + /// 过滤规则 + /// + private DirectoryInfo[] FilterDirectories(DirectoryInfo[] directories, List filterRules) + { + if (!filterRules.Any()) + { + return directories; + } + + return directories.Where(dir => + { + var dirName = dir.Name.ToLower(); + + // 只要有一个规则的关键词匹配就通过 + return filterRules.Any(rule => + rule.Keywords.Any(keyword => dirName.Contains(keyword.ToLower())) + ); + }).ToArray(); + } + + /// + /// 过滤文件 + /// + /// 文件数组 + /// 过滤规则 + /// + private FileInfo[] FilterFiles(FileInfo[] files, List filterRules) + { + if (!filterRules.Any()) + { + return files; + } + + return files.Where(file => + { + var fileName = file.Name.ToLower(); + var fileExtension = file.Extension.TrimStart('.').ToLower(); + + // 只要有一个规则完全匹配就通过(关键词和扩展名都要匹配) + return filterRules.Any(rule => + { + var keywordMatch = !rule.Keywords.Any() || rule.Keywords.Any(keyword => fileName.Contains(keyword.ToLower())); + var extensionMatch = !rule.Extensions.Any() || rule.Extensions.Any(ext => ext == fileExtension); + + return keywordMatch && extensionMatch; + }); + }).ToArray(); + } + + /// + /// 过滤规则类 + /// + private class FilterRule + { + public List Keywords { get; set; } = new List(); + public List Extensions { get; set; } = new List(); + } + + /// + /// 文件版本信息类 + /// + private class FileVersionInfo + { + public string BaseName { get; set; } + public string FullName { get; set; } + public DateTime? DateSuffix { get; set; } + public int? NumberSuffix { get; set; } + public string VersionSuffix { get; set; } + public int SortPriority { get; set; } + } + + /// + /// 解析文件名版本信息 + /// + /// 文件名(不含扩展名) + /// + private FileVersionInfo ParseFileVersion(string fileName) + { + var info = new FileVersionInfo + { + FullName = fileName, + BaseName = fileName, + SortPriority = 0 + }; + + // 尝试匹配日期格式:_20241201, _2024-12-01, _2024_12_01, 空格分隔等 + var datePatterns = new[] + { + @"^(.+?)_(\d{8})$", // 文件名_20241201 + @"^(.+?)_(\d{4}-\d{2}-\d{2})$", // 文件名_2024-12-01 + @"^(.+?)_(\d{4}_\d{2}_\d{2})$", // 文件名_2024_12_01 + @"^(.+?)_(\d{4}\d{2}\d{2})_v(\d+)$", // 文件名_20241201_v1 + @"^(.+?)\s+(\d{8})$", // 文件名 20241201 + @"^(.+?)\s+(\d{4}-\d{2}-\d{2})$", // 文件名 2024-12-01 + @"^(.+?)\s+(\d{4}_\d{2}_\d{2})$", // 文件名 2024_12_01 + @"^(.+?)\s+(\d{4}\.\d{2}\.\d{2})$", // 文件名 2024.12.01 + @"^(.+?)\s+(\d{4}/\d{2}/\d{2})$", // 文件名 2024/12/01 + @"^(.+?)\s+(\d{4}\d{2}\d{2})\s+v(\d+)$" // 文件名 20241201 v1 + }; + + foreach (var pattern in datePatterns) + { + var match = System.Text.RegularExpressions.Regex.Match(fileName, pattern); + if (match.Success) + { + info.BaseName = match.Groups[1].Value.Trim(); // 去除可能的空格 + var dateStr = match.Groups[2].Value.Replace("-", "").Replace("_", "").Replace(".", "").Replace("/", ""); + + if (DateTime.TryParseExact(dateStr, "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out var date)) + { + info.DateSuffix = date; + info.SortPriority = 3; // 日期优先级最高 + + // 如果还有版本号 + if (match.Groups.Count > 3 && int.TryParse(match.Groups[3].Value, out var version)) + { + info.NumberSuffix = version; + info.SortPriority = 4; // 日期+版本号优先级最高 + } + } + return info; + } + } + + // 尝试匹配版本号格式:_v1, _v2, _version1, 空格分隔等 + var versionPatterns = new[] + { + @"^(.+?)_v(\d+)$", // 文件名_v1 + @"^(.+?)_version(\d+)$", // 文件名_version1 + @"^(.+?)_Ver(\d+)$", // 文件名_Ver1 + @"^(.+?)\s+v(\d+)$", // 文件名 v1 + @"^(.+?)\s+version(\d+)$", // 文件名 version1 + @"^(.+?)\s+Ver(\d+)$" // 文件名 Ver1 + }; + + foreach (var pattern in versionPatterns) + { + var match = System.Text.RegularExpressions.Regex.Match(fileName, pattern); + if (match.Success) + { + info.BaseName = match.Groups[1].Value.Trim(); // 去除可能的空格 + if (int.TryParse(match.Groups[2].Value, out var version)) + { + info.NumberSuffix = version; + info.VersionSuffix = $"v{version}"; + info.SortPriority = 2; + } + return info; + } + } + + // 尝试匹配括号序号格式:(1), (2) + var bracketPattern = @"^(.+?)\((\d+)\)$"; + var bracketMatch = System.Text.RegularExpressions.Regex.Match(fileName, bracketPattern); + if (bracketMatch.Success) + { + info.BaseName = bracketMatch.Groups[1].Value.Trim(); // 去除可能的空格 + if (int.TryParse(bracketMatch.Groups[2].Value, out var number)) + { + info.NumberSuffix = number; + info.SortPriority = 1; + } + return info; + } + + return info; + } + + /// + /// 比较文件版本,返回较新的版本 + /// + /// 版本1 + /// 版本2 + /// 较新的版本 + private FileVersionInfo GetNewerVersion(FileVersionInfo version1, FileVersionInfo version2) + { + // 先比较优先级 + if (version1.SortPriority != version2.SortPriority) + { + return version1.SortPriority > version2.SortPriority ? version1 : version2; + } + + // 相同优先级,比较具体值 + switch (version1.SortPriority) + { + case 4: // 日期+版本号 + case 3: // 只有日期 + if (version1.DateSuffix != version2.DateSuffix) + { + return version1.DateSuffix > version2.DateSuffix ? version1 : version2; + } + // 日期相同,比较版本号 + if (version1.NumberSuffix.HasValue && version2.NumberSuffix.HasValue) + { + return version1.NumberSuffix > version2.NumberSuffix ? version1 : version2; + } + break; + + case 2: // 版本号 + case 1: // 括号序号 + if (version1.NumberSuffix.HasValue && version2.NumberSuffix.HasValue) + { + return version1.NumberSuffix > version2.NumberSuffix ? version1 : version2; + } + break; + } + + // 如果都无法比较,返回第一个 + return version1; + } + + /// + /// 过滤文件,只保留每个基础名称的最新版本 + /// + /// 文件数组 + /// + private FileInfo[] FilterLatestVersionFiles(FileInfo[] files) + { + var result = new List(); + + // 按基础名称分组 + var fileGroups = files.GroupBy(f => + { + var nameWithoutExt = Path.GetFileNameWithoutExtension(f.Name); + var versionInfo = ParseFileVersion(nameWithoutExt); + return versionInfo.BaseName + f.Extension; // 基础名称+扩展名作为分组键 + }); + + foreach (var group in fileGroups) + { + if (group.Count() == 1) + { + // 只有一个文件,直接添加 + result.Add(group.First()); + } + else + { + // 多个文件,找出最新版本 + FileInfo latestFile = null; + FileVersionInfo latestVersion = null; + + foreach (var file in group) + { + var nameWithoutExt = Path.GetFileNameWithoutExtension(file.Name); + var currentVersion = ParseFileVersion(nameWithoutExt); + currentVersion.FullName = file.Name; + + if (latestVersion == null) + { + latestVersion = currentVersion; + latestFile = file; + } + else + { + var newerVersion = GetNewerVersion(currentVersion, latestVersion); + if (newerVersion == currentVersion) + { + latestVersion = currentVersion; + latestFile = file; + } + } + } + + if (latestFile != null) + { + result.Add(latestFile); + } + } + } + + return result.ToArray(); + } + + /// + /// 过滤文件夹,只保留每个基础名称的最新版本 + /// + /// 文件夹数组 + /// + private DirectoryInfo[] FilterLatestVersionDirectories(DirectoryInfo[] directories) + { + var result = new List(); + + // 按基础名称分组 + var dirGroups = directories.GroupBy(d => + { + var versionInfo = ParseFileVersion(d.Name); + return versionInfo.BaseName; + }); + + foreach (var group in dirGroups) + { + if (group.Count() == 1) + { + // 只有一个文件夹,直接添加 + result.Add(group.First()); + } + else + { + // 多个文件夹,找出最新版本 + DirectoryInfo latestDir = null; + FileVersionInfo latestVersion = null; + + foreach (var dir in group) + { + var currentVersion = ParseFileVersion(dir.Name); + currentVersion.FullName = dir.Name; + + if (latestVersion == null) + { + latestVersion = currentVersion; + latestDir = dir; + } + else + { + var newerVersion = GetNewerVersion(currentVersion, latestVersion); + if (newerVersion == currentVersion) + { + latestVersion = currentVersion; + latestDir = dir; + } + } + } + + if (latestDir != null) + { + result.Add(latestDir); + } + } + } + + return result.ToArray(); + } + + /// + /// 格式化文件大小 + /// + /// 字节数 + /// + private string FormatFileSize(long bytes) + { + if (bytes < 1024) return $"{bytes} B"; + if (bytes < 1024 * 1024) return $"{bytes / 1024:F1} KB"; + if (bytes < 1024 * 1024 * 1024) return $"{bytes / (1024 * 1024):F1} MB"; + return $"{bytes / (1024 * 1024 * 1024):F1} GB"; + } + + #endregion +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Tenant/TenantService.cs b/src/modules/admin/ZhonTai.Admin/Services/Tenant/TenantService.cs new file mode 100644 index 0000000..bea1df3 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Tenant/TenantService.cs @@ -0,0 +1,804 @@ +using System.Linq.Expressions; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Identity; +using Microsoft.Extensions.Options; +using Mapster; +using Yitter.IdGenerator; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Core.Helpers; +using ZhonTai.Admin.Domain.Role; +using ZhonTai.Admin.Domain.RolePermission; +using ZhonTai.Admin.Domain.Tenant; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.UserRole; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Domain.UserStaff; +using ZhonTai.Admin.Domain.UserOrg; +using ZhonTai.Admin.Domain.Pkg; +using ZhonTai.Admin.Domain.TenantPkg; +using ZhonTai.Admin.Services.Tenant.Dto; +using ZhonTai.Admin.Services.Pkg; +using ZhonTai.Common.Helpers; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Core; +using ZhonTai.Admin.Services.Auth.Dto; +using ZhonTai.Admin.Services.Auth; +using ZhonTai.Admin.Core.Validators; +using ZhonTai.Admin.Core.Auth; + +namespace ZhonTai.Admin.Services.Tenant; + +/// +/// 租户服务 +/// +[Order(50)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class TenantService : BaseService, ITenantService, IDynamicApi +{ + private readonly ITenantRepository _tenantRep; + private readonly ITenantPkgRepository _tenantPkgRep; + private readonly IRoleRepository _roleRep; + private readonly IUserRepository _userRep; + private readonly IOrgRepository _orgRep; + private readonly AppConfig _appConfig; + private readonly Lazy _userRoleRep; + private readonly Lazy _rolePermissionRep; + private readonly Lazy _userStaffRep; + private readonly Lazy _userOrgRep; + private readonly Lazy> _passwordHasher; + private readonly Lazy _userHelper; + private readonly AdminLocalizer _adminLocalizer; + + public TenantService( + ITenantRepository tenantRep, + ITenantPkgRepository tenantPkgRep, + IRoleRepository roleRep, + IUserRepository userRep, + IOrgRepository orgRep, + IOptions appConfig, + Lazy userRoleRep, + Lazy rolePermissionRep, + Lazy userStaffRep, + Lazy userOrgRep, + Lazy> passwordHasher, + Lazy userHelper, + AdminLocalizer adminLocalizer + ) + { + _tenantRep = tenantRep; + _tenantPkgRep = tenantPkgRep; + _roleRep = roleRep; + _userRep = userRep; + _orgRep = orgRep; + _appConfig = appConfig.Value; + _userRoleRep = userRoleRep; + _rolePermissionRep = rolePermissionRep; + _userStaffRep = userStaffRep; + _userOrgRep = userOrgRep; + _passwordHasher = passwordHasher; + _userHelper = userHelper; + _adminLocalizer = adminLocalizer; + } + + /// + /// 查询 + /// + /// + /// + public async Task GetAsync(long id) + { + using (_tenantRep.DataFilter.Disable(FilterNames.Tenant)) + { + var tenant = await _tenantRep.Select + .WhereDynamic(id) + .IncludeMany(a => a.Pkgs.Select(b => new PkgEntity { Id = b.Id, Name = b.Name })) + .FirstAsync(a => new TenantGetOutput + { + Name = a.Org.Name, + Code = a.Org.Code, + Pkgs = a.Pkgs, + UserName = a.User.UserName, + RealName = a.User.Name, + Phone = a.User.Mobile, + Email = a.User.Email, + }); + return tenant; + } + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + using var _ = _tenantRep.DataFilter.Disable(FilterNames.Tenant); + + var key = input.Filter?.Name; + + var list = await _tenantRep.Select + .WhereDynamicFilter(input.DynamicFilter) + .WhereIf(key.NotNull(), a => a.Org.Name.Contains(key)) + .Count(out var total) + .OrderByDescending(true, a => a.Id) + .IncludeMany(a => a.Pkgs.Select(b => new PkgEntity { Name = b.Name })) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(a => new TenantGetPageOutput + { + Name = a.Org.Name, + Code = a.Org.Code, + UserName = a.User.UserName, + RealName = a.User.Name, + Phone = a.User.Mobile, + Email = a.User.Email, + Pkgs = a.Pkgs, + }); + + var data = new PageOutput() + { + List = Mapper.Map>(list), + Total = total + }; + + return data; + } + + /// + /// 新增 + /// + /// + /// + [AdminTransaction] + public virtual async Task AddAsync(TenantAddInput input) + { + if (input.Password.IsNull()) + { + input.Password = _appConfig.DefaultPassword; + } + _userHelper.Value.CheckPassword(input.Password); + + using var _t = _tenantRep.DataFilter.Disable(FilterNames.Tenant); + using var _o = _orgRep.DataFilter.Disable(FilterNames.Tenant); + using var _u = _userRep.DataFilter.Disable(FilterNames.Tenant); + + var existsOrg = await _orgRep.Select + .Where(a => a.Name == input.Name && a.ParentId == 0) + .WhereIf(input.Code.NotNull(), a => a.Code == input.Code) + .FirstAsync(a => new { a.Name, a.Code }); + + if (existsOrg != null) + { + if (existsOrg.Name == input.Name) + { + throw ResultOutput.Exception(_adminLocalizer["企业名称已存在"]); + } + + if (input.Code.NotNull() && existsOrg.Code == input.Code) + { + throw ResultOutput.Exception(_adminLocalizer["企业编码已存在"]); + } + } + + Expression> where = (a => a.UserName == input.UserName); + where = where.Or(input.Phone.NotNull(), a => a.Mobile == input.Phone) + .Or(input.Email.NotNull(), a => a.Email == input.Email); + + var existsUser = await _userRep.Select.Where(where) + .FirstAsync(a => new { a.UserName, a.Mobile, a.Email }); + + if (existsUser != null) + { + if (existsUser.UserName == input.UserName) + { + throw ResultOutput.Exception(_adminLocalizer["企业账号已存在"]); + } + + if (input.Phone.NotNull() && existsUser.Mobile == input.Phone) + { + throw ResultOutput.Exception(_adminLocalizer["企业手机号已存在"]); + } + + if (input.Email.NotNull() && existsUser.Email == input.Email) + { + throw ResultOutput.Exception(_adminLocalizer["企业邮箱已存在"]); + } + } + + //租户Id + long tenantId = input.Id > 0 ? input.Id : YitIdHelper.NextId(); + + //添加租户套餐 + if (input.PkgIds != null && input.PkgIds.Any()) + { + var pkgs = input.PkgIds.Select(pkgId => new TenantPkgEntity + { + TenantId = tenantId, + PkgId = pkgId + }).ToList(); + + await _tenantPkgRep.InsertAsync(pkgs); + } + + //添加部门 + var org = new OrgEntity + { + TenantId = tenantId, + Name = input.Name, + Code = input.Code, + ParentId = 0, + MemberCount = 1, + Sort = 1, + Enabled = true + }; + await _orgRep.InsertAsync(org); + + //添加用户 + var user = new UserEntity + { + TenantId = tenantId, + UserName = input.UserName, + Name = input.RealName, + Mobile = input.Phone, + Email = input.Email, + Type = UserType.TenantAdmin, + OrgId = org.Id, + Enabled = true + }; + if (_appConfig.PasswordHasher) + { + user.Password = _passwordHasher.Value.HashPassword(user, input.Password); + user.PasswordEncryptType = PasswordEncryptType.PasswordHasher; + } + else + { + user.Password = MD5Encrypt.Encrypt32(input.Password); + user.PasswordEncryptType = PasswordEncryptType.MD5Encrypt32; + } + await _userRep.InsertAsync(user); + + long userId = user.Id; + + //添加用户员工 + var emp = new UserStaffEntity + { + Id = userId, + TenantId = tenantId + }; + await _userStaffRep.Value.InsertAsync(emp); + + //添加用户部门 + var userOrg = new UserOrgEntity + { + UserId = userId, + OrgId = org.Id + }; + await _userOrgRep.Value.InsertAsync(userOrg); + + //添加角色分组和角色 + var roleId = YitIdHelper.NextId(); + var jobGroupId = YitIdHelper.NextId(); + var roles = new List + { + new() + { + Id= jobGroupId, + ParentId = 0, + TenantId = tenantId, + Type = RoleType.Group, + Name = "岗位", + Sort = 1 + }, + new() + { + Id = roleId, + TenantId = tenantId, + Type = RoleType.Role, + Name = "主管理员", + Code = "main-admin", + ParentId = jobGroupId, + DataScope = DataScope.All, + Sort = 1 + }, + new() + { + TenantId = tenantId, + Type = RoleType.Role, + Name = "普通员工", + Code = "emp", + ParentId = jobGroupId, + DataScope = DataScope.Self, + Sort = 1 + } + }; + await _roleRep.InsertAsync(roles); + + //添加用户角色 + var userRole = new UserRoleEntity() + { + UserId = userId, + RoleId = roleId + }; + await _userRoleRep.Value.InsertAsync(userRole); + + //添加租户 + var tenant = input.Adapt(); + tenant.Id = tenantId; + tenant.UserId = userId; + tenant.OrgId = org.Id; + await _tenantRep.InsertAsync(tenant); + + return tenant.Id; + } + + /// + /// 注册 + /// + /// + /// + [AdminTransaction] + [NonAction] + public virtual async Task RegAsync(TenantRegInput input) + { + if (input.Password.IsNull()) + { + input.Password = _appConfig.DefaultPassword; + } + _userHelper.Value.CheckPassword(input.Password); + + using var _t = _tenantRep.DataFilter.Disable(FilterNames.Tenant); + using var _o = _orgRep.DataFilter.Disable(FilterNames.Tenant); + using var _u = _userRep.DataFilter.Disable(FilterNames.Tenant); + + Expression> where = (a => a.UserName == input.UserName); + where = where.Or(input.Mobile.NotNull(), a => a.Mobile == input.Mobile) + .Or(input.Email.NotNull(), a => a.Email == input.Email); + + //检查用户 + var existsUser = await _userRep.Select.Where(where) + .FirstAsync(a => new { a.UserName, a.Mobile, a.Email }); + + if (existsUser != null) + { + if (existsUser.UserName == input.UserName) + { + throw ResultOutput.Exception(_adminLocalizer["企业账号已注册"]); + } + + if (input.Mobile.NotNull() && existsUser.Mobile == input.Mobile) + { + throw ResultOutput.Exception(_adminLocalizer["企业手机号已注册"]); + } + + if (input.Email.NotNull() && existsUser.Email == input.Email) + { + throw ResultOutput.Exception(_adminLocalizer["企业邮箱已注册"]); + } + } + + //检查部门 + var existsOrg = await _orgRep.Select + .Where(a => a.Name == input.Name && a.ParentId == 0) + .WhereIf(input.Code.NotNull(), a => a.Code == input.Code) + .FirstAsync(a => new { a.Id, a.TenantId }); + + var hasTenant = existsOrg?.TenantId > 0; + + //租户Id + long tenantId = hasTenant ? existsOrg.TenantId.Value : (input.Id > 0 ? input.Id : YitIdHelper.NextId()); + + //添加部门 + var orgId = existsOrg?.Id > 0 ? existsOrg.Id : YitIdHelper.NextId(); + if (existsOrg == null) + { + var org = new OrgEntity + { + Id = orgId, + TenantId = tenantId, + Name = input.Name, + Code = input.Code, + ParentId = 0, + MemberCount = 1, + Sort = 1, + Enabled = true + }; + await _orgRep.InsertAsync(org); + } + + //添加用户 + var user = new UserEntity + { + TenantId = tenantId, + UserName = input.UserName, + Name = input.RealName, + Mobile = input.Mobile, + Email = input.Email, + Type = hasTenant ? UserType.DefaultUser : UserType.TenantAdmin, + OrgId = orgId, + Enabled = true + }; + if (_appConfig.PasswordHasher) + { + user.Password = _passwordHasher.Value.HashPassword(user, input.Password); + user.PasswordEncryptType = PasswordEncryptType.PasswordHasher; + } + else + { + user.Password = MD5Encrypt.Encrypt32(input.Password); + user.PasswordEncryptType = PasswordEncryptType.MD5Encrypt32; + } + await _userRep.InsertAsync(user); + + long userId = user.Id; + + //添加用户员工 + var emp = new UserStaffEntity + { + Id = userId, + TenantId = tenantId, + }; + await _userStaffRep.Value.InsertAsync(emp); + + //添加用户部门 + var userOrg = new UserOrgEntity + { + UserId = userId, + OrgId = orgId + }; + await _userOrgRep.Value.InsertAsync(userOrg); + + //添加角色分组和角色 + if (!hasTenant) + { + var roleId = YitIdHelper.NextId(); + var jobGroupId = YitIdHelper.NextId(); + var roles = new List + { + new() + { + Id= jobGroupId, + ParentId = 0, + TenantId = tenantId, + Type = RoleType.Group, + Name = "岗位", + Sort = 1 + }, + new() + { + Id = roleId, + TenantId = tenantId, + Type = RoleType.Role, + Name = "主管理员", + Code = "main-admin", + ParentId = jobGroupId, + DataScope = DataScope.All, + Sort = 1 + }, + new() + { + TenantId = tenantId, + Type = RoleType.Role, + Name = "普通员工", + Code = "emp", + ParentId = jobGroupId, + DataScope = DataScope.Self, + Sort = 1 + } + }; + await _roleRep.InsertAsync(roles); + + //添加用户角色 + var userRole = new UserRoleEntity() + { + UserId = userId, + RoleId = roleId + }; + await _userRoleRep.Value.InsertAsync(userRole); + } + + //添加租户 + if(!hasTenant) + { + var tenant = input.Adapt(); + tenant.Id = tenantId; + tenant.UserId = userId; + tenant.OrgId = orgId; + await _tenantRep.InsertAsync(tenant); + + //添加租户套餐 + if (input.PkgIds != null && input.PkgIds.Length != 0) + { + var pkgs = input.PkgIds.Select(pkgId => new TenantPkgEntity + { + TenantId = tenantId, + PkgId = pkgId + }).ToList(); + + await _tenantPkgRep.InsertAsync(pkgs); + } + } + + return tenantId; + } + + /// + /// 修改 + /// + /// + /// + public async Task UpdateAsync(TenantUpdateInput input) + { + using var _t = _tenantRep.DataFilter.Disable(FilterNames.Tenant); + using var _o = _orgRep.DataFilter.Disable(FilterNames.Tenant); + using var _u = _userRep.DataFilter.Disable(FilterNames.Tenant); + + var tenant = await _tenantRep.GetAsync(input.Id); + if (!(tenant?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["租户不存在"]); + } + + var existsOrg = await _orgRep.Select + .Where(a => a.Id != tenant.OrgId && a.ParentId == 0 && (a.Name == input.Name || a.Code == input.Code)) + .FirstAsync(a => new { a.Name, a.Code }); + + if (existsOrg != null) + { + if (existsOrg.Name == input.Name) + { + throw ResultOutput.Exception(_adminLocalizer["企业名称已存在"]); + } + + if (existsOrg.Code == input.Code) + { + throw ResultOutput.Exception(_adminLocalizer["企业编码已存在"]); + } + } + + Expression> where = (a => a.UserName == input.UserName); + where = where.Or(input.Phone.NotNull(), a => a.Mobile == input.Phone) + .Or(input.Email.NotNull(), a => a.Email == input.Email); + + var existsUser = await _userRep.Select.Where(a => a.Id != tenant.UserId).Where(where) + .FirstAsync(a => new { a.Id, a.Name, a.UserName, a.Mobile, a.Email }); + + if (existsUser != null) + { + if (existsUser.UserName == input.UserName) + { + throw ResultOutput.Exception(_adminLocalizer["企业账号已存在"]); + } + + if (input.Phone.NotNull() && existsUser.Mobile == input.Phone) + { + throw ResultOutput.Exception(_adminLocalizer["企业手机号已存在"]); + } + + if (input.Email.NotNull() && existsUser.Email == input.Email) + { + throw ResultOutput.Exception(_adminLocalizer["企业邮箱已存在"]); + } + } + + //更新用户 + await _userRep.UpdateDiy.DisableGlobalFilter(FilterNames.Tenant).SetSource( + new UserEntity() + { + Id = tenant.UserId, + Name = input.RealName, + UserName = input.UserName, + Mobile = input.Phone, + Email = input.Email + }) + .UpdateColumns(a => new { a.Name, a.UserName, a.Mobile, a.Email, a.ModifiedTime }).ExecuteAffrowsAsync(); + + //更新部门 + await _orgRep.UpdateDiy.DisableGlobalFilter(FilterNames.Tenant).SetSource( + new OrgEntity() + { + Id = tenant.OrgId, + Name = input.Name, + Code = input.Code + }) + .UpdateColumns(a => new { a.Name, a.Code, a.ModifiedTime }).ExecuteAffrowsAsync(); + + //更新租户 + await _tenantRep.UpdateDiy.DisableGlobalFilter(FilterNames.Tenant).SetSource( + new TenantEntity() + { + Id = tenant.Id, + Domain = input.Domain, + Description = input.Description, + }) + .UpdateColumns(a => new { a.Description, a.Domain, a.ModifiedTime }).ExecuteAffrowsAsync(); + + //更新租户套餐 + await _tenantPkgRep.DeleteAsync(a => a.TenantId == tenant.Id); + if (input.PkgIds != null && input.PkgIds.Any()) + { + var pkgs = input.PkgIds.Select(pkgId => new TenantPkgEntity + { + TenantId = tenant.Id, + PkgId = pkgId + }).ToList(); + + await _tenantPkgRep.InsertAsync(pkgs); + + //清除租户下所有用户权限缓存 + await LazyGetRequiredService().ClearUserPermissionsAsync(new List { tenant.Id }); + } + } + + /// + /// 彻底删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task DeleteAsync(long id) + { + using (_tenantRep.DataFilter.Disable(FilterNames.Tenant)) + { + var tenantType = await _tenantRep.Select.WhereDynamic(id).ToOneAsync(a => a.TenantType); + if (tenantType == TenantType.Platform) + { + throw ResultOutput.Exception(_adminLocalizer["平台租户禁止删除"]); + } + + //删除角色权限 + await _rolePermissionRep.Value.Where(a => a.Role.TenantId == id).DisableGlobalFilter(FilterNames.Tenant).ToDelete().ExecuteAffrowsAsync(); + + //删除用户角色 + await _userRoleRep.Value.Where(a => a.User.TenantId == id).DisableGlobalFilter(FilterNames.Tenant).ToDelete().ExecuteAffrowsAsync(); + + //删除员工 + await _userStaffRep.Value.Where(a => a.TenantId == id).DisableGlobalFilter(FilterNames.Tenant).ToDelete().ExecuteAffrowsAsync(); + + //删除用户部门 + await _userOrgRep.Value.Where(a => a.User.TenantId == id).DisableGlobalFilter(FilterNames.Tenant).ToDelete().ExecuteAffrowsAsync(); + + //删除部门 + await _orgRep.Where(a => a.TenantId == id).DisableGlobalFilter(FilterNames.Tenant).ToDelete().ExecuteAffrowsAsync(); + + //删除用户 + await _userRep.Where(a => a.TenantId == id && a.Type != UserType.Member).DisableGlobalFilter(FilterNames.Tenant).ToDelete().ExecuteAffrowsAsync(); + + //删除角色 + await _roleRep.Where(a => a.TenantId == id).DisableGlobalFilter(FilterNames.Tenant).ToDelete().ExecuteAffrowsAsync(); + + //删除租户套餐 + await _tenantPkgRep.DeleteAsync(a => a.TenantId == id); + + //删除租户 + await _tenantRep.DeleteAsync(id); + + //清除租户下所有用户权限缓存 + await LazyGetRequiredService().ClearUserPermissionsAsync(new List { id }); + } + } + + /// + /// 删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task SoftDeleteAsync(long id) + { + using (_tenantRep.DataFilter.Disable(FilterNames.Tenant)) + { + var tenantType = await _tenantRep.Select.WhereDynamic(id).ToOneAsync(a => a.TenantType); + if (tenantType == TenantType.Platform) + { + throw ResultOutput.Exception(_adminLocalizer["平台租户禁止删除"]); + } + + //删除部门 + await _orgRep.SoftDeleteAsync(a => a.TenantId == id, FilterNames.Tenant); + + //删除用户 + await _userRep.SoftDeleteAsync(a => a.TenantId == id && a.Type != UserType.Member, FilterNames.Tenant); + + //删除角色 + await _roleRep.SoftDeleteAsync(a => a.TenantId == id, FilterNames.Tenant); + + //删除租户 + var result = await _tenantRep.SoftDeleteAsync(id); + + //清除租户下所有用户权限缓存 + await LazyGetRequiredService().ClearUserPermissionsAsync(new List { id }); + } + } + + /// + /// 批量删除 + /// + /// + /// + [AdminTransaction] + public virtual async Task BatchSoftDeleteAsync(long[] ids) + { + using (_tenantRep.DataFilter.Disable(FilterNames.Tenant)) + { + var tenantType = await _tenantRep.Select.WhereDynamic(ids).ToOneAsync(a => a.TenantType); + if (tenantType == TenantType.Platform) + { + throw ResultOutput.Exception(_adminLocalizer["平台租户禁止删除"]); + } + + //删除部门 + await _orgRep.SoftDeleteAsync(a => ids.Contains(a.TenantId.Value), FilterNames.Tenant); + + //删除用户 + await _userRep.SoftDeleteAsync(a => ids.Contains(a.TenantId.Value) && a.Type != UserType.Member, FilterNames.Tenant); + + //删除角色 + await _roleRep.SoftDeleteAsync(a => ids.Contains(a.TenantId.Value), FilterNames.Tenant); + + //删除租户 + var result = await _tenantRep.SoftDeleteAsync(ids); + + //清除租户下所有用户权限缓存 + await LazyGetRequiredService().ClearUserPermissionsAsync(ids.ToList()); + } + } + + /// + /// 设置启用 + /// + /// + /// + public async Task SetEnableAsync(TenantSetEnableInput input) + { + var entity = await _tenantRep.GetAsync(input.TenantId); + if (entity.TenantType == TenantType.Platform) + { + throw ResultOutput.Exception(_adminLocalizer["平台租户禁止禁用"]); + } + entity.Enabled = input.Enabled; + await _tenantRep.UpdateAsync(entity); + } + + /// + /// 一键登录 + /// + /// + [HttpPost] + public async Task OneClickLoginAsync([ValidateRequired] long tenantId) + { + if (!(tenantId > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["请选择租户"]); + } + + var userRep = _userRep; + using var _ = userRep.DataFilter.DisableAll(); + + var authLoginOutput = await userRep.Select + .Where(a => a.Tenant.Id == tenantId && a.Tenant.UserId == a.Id) + .ToOneAsync(a=> new AuthLoginOutput + { + Tenant = new AuthLoginTenantModel + { + DbKey = a.Tenant.DbKey, + Enabled = a.Tenant.Enabled, + TenantType = a.Tenant.TenantType, + } + }); + + if (authLoginOutput == null) + { + throw ResultOutput.Exception(_adminLocalizer["超级管理员不存在"]); + } + + var tokenInfo = AppInfo.GetRequiredService().GetTokenInfo(authLoginOutput); + + return tokenInfo; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/Tenant/_MapConfig.cs b/src/modules/admin/ZhonTai.Admin/Services/Tenant/_MapConfig.cs new file mode 100644 index 0000000..a41ebbf --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/Tenant/_MapConfig.cs @@ -0,0 +1,17 @@ +using Mapster; +using ZhonTai.Admin.Services.Tenant.Dto; + +namespace ZhonTai.Admin.Services.Tenant; + +/// +/// 映射配置 +/// +public class MapConfig : IRegister +{ + public void Register(TypeAdapterConfig config) + { + config + .NewConfig() + .Map(dest => dest.PkgNames, src => src.Pkgs.Select(a => a.Name)); + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/User/UserService.cs b/src/modules/admin/ZhonTai.Admin/Services/User/UserService.cs new file mode 100644 index 0000000..c64edb9 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/User/UserService.cs @@ -0,0 +1,1144 @@ +using System.ComponentModel.DataAnnotations; +using System.Data; +using System.Linq.Expressions; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Identity; +using Newtonsoft.Json; +using ZhonTai.Admin.Core; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Core.Helpers; +using ZhonTai.Admin.Domain.Api; +using ZhonTai.Admin.Domain.PermissionApi; +using ZhonTai.Admin.Domain.Role; +using ZhonTai.Admin.Domain.RolePermission; +using ZhonTai.Admin.Domain.Tenant; +using ZhonTai.Admin.Domain.User; +using ZhonTai.Admin.Domain.UserRole; +using ZhonTai.Admin.Domain.UserStaff; +using ZhonTai.Admin.Domain.Org; +using ZhonTai.Admin.Services.Auth; +using ZhonTai.Admin.Services.Auth.Dto; +using ZhonTai.Admin.Services.User.Dto; +using ZhonTai.Common.Helpers; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Admin.Domain.User.Dto; +using ZhonTai.Admin.Domain.RoleOrg; +using ZhonTai.Admin.Domain.UserOrg; +using ZhonTai.Admin.Domain.PkgPermission; +using ZhonTai.Admin.Domain.TenantPkg; +using FreeSql; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Domain.Permission; +using Microsoft.Extensions.Options; +using ZhonTai.Admin.Core.Db; +using DotNetCore.CAP; +using ZhonTai.Admin.Services.User.Events; +using Mapster; +using ZhonTai.Admin.Services.Org; +using ZhonTai.Admin.Core.Auth; + +namespace ZhonTai.Admin.Services.User; + +/// +/// 用户服务 +/// +[Order(10)] +[DynamicApi(Area = AdminConsts.AreaName)] +public partial class UserService : BaseService, IUserService, IDynamicApi +{ + private readonly AppConfig _appConfig; + private readonly ImConfig _imConfig; + private readonly UserHelper _userHelper; + private readonly AdminLocalizer _adminLocalizer; + private readonly IUserRepository _userRep; + private readonly IUserOrgRepository _userOrgRep; + private readonly IUserRoleRepository _userRoleRep; + private readonly IUserStaffRepository _userStaffRep; + private readonly Lazy> _passwordHasher; + private readonly Lazy _roleRep; + private readonly Lazy _rolePermissionRep; + private readonly Lazy _fileService; + private readonly Lazy _roleOrgRep; + private readonly Lazy _apiRep; + private readonly Lazy _tenantRep; + private readonly Lazy _orgRep; + private readonly Lazy _permissionRep; + private readonly OrgService _orgService; + + public UserService( + IOptions appConfig, + IOptions imConfig, + UserHelper userHelper, + AdminLocalizer adminLocalizer, + IUserRepository userRep, + IUserOrgRepository userOrgRep, + IUserRoleRepository userRoleRep, + IUserStaffRepository userStaffRep, + Lazy> passwordHasher, + Lazy roleRep, + Lazy rolePermissionRep, + Lazy fileService, + Lazy roleOrgRep, + Lazy apiRep, + Lazy tenantRep, + Lazy orgRep, + Lazy permissionRep, + OrgService orgService + ) + { + _appConfig = appConfig.Value; + _imConfig = imConfig.Value; + _userHelper = userHelper; + _adminLocalizer = adminLocalizer; + _userRep = userRep; + _userOrgRep = userOrgRep; + _userRoleRep = userRoleRep; + _userStaffRep = userStaffRep; + _passwordHasher = passwordHasher; + _roleRep = roleRep; + _rolePermissionRep = rolePermissionRep; + _fileService = fileService; + _roleOrgRep = roleOrgRep; + _apiRep = apiRep; + _tenantRep = tenantRep; + _orgRep = orgRep; + _permissionRep = permissionRep; + _orgService = orgService; + } + + /// + /// 查询用户 + /// + /// + /// + public async Task GetAsync(long id) + { + var userEntity = await _userRep.Select + .WhereDynamic(id) + .IncludeMany(a => a.Roles.Select(b => new RoleEntity { Id = b.Id, Name = b.Name })) + .ToOneAsync(a => new + { + a.Id, + a.UserName, + a.Name, + a.Mobile, + a.Email, + a.Roles, + a.ManagerUserId, + ManagerUserName = a.ManagerUser.Name, + Staff = new + { + a.Staff.JobNumber, + a.Staff.Sex, + a.Staff.Position, + a.Staff.Introduce + } + }); + + var output = Mapper.Map(userEntity); + + return output; + } + + /// + /// 查询分页 + /// + /// + /// + [HttpPost] + public async Task> GetPageAsync(PageInput input) + { + var dataPermission = User.DataPermission; + + var orgId = input.Filter?.OrgId; + var list = await _userRep.Select + .WhereIf(dataPermission != null && dataPermission.OrgIds.Count > 0, a => _userOrgRep.Where(b => b.UserId == a.Id && dataPermission.OrgIds.Contains(b.OrgId)).Any()) + .WhereIf(dataPermission != null && dataPermission.DataScope == DataScope.Self, a => a.CreatedUserId == User.Id) + .WhereIf(orgId.HasValue && orgId > 0, a => _userOrgRep.Where(b => b.UserId == a.Id && b.OrgId == orgId).Any()) + .Where(a => a.Type != UserType.Member) + .WhereDynamicFilter(input.DynamicFilter) + .Count(out var total) + .OrderByDescending(true, a => a.Id) + .IncludeMany(a => a.Roles.Select(b => new RoleEntity { Name = b.Name })) + .IncludeMany(a => a.Orgs.Select(b => new OrgEntity { Id = b.Id })) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(a => new UserGetPageOutput + { + Roles = a.Roles, + Orgs = a.Orgs, + Sex = a.Staff.Sex + }); + + //设置部门 + var orgs = await _orgService.GetSimpleListWithPathAsync(); + + var orgDict = orgs.ToDictionary(a => a.Id, a => a.Path); + foreach (var user in list) + { + if (user.OrgId > 0 && orgDict.TryGetValue(user.OrgId, out var path)) + { + user.OrgPath = path; + } + + if(user.OrgIds.Length > 0) + { + var orgPathList = user.OrgIds.Select(a => orgDict.GetValueOrDefault(a)).Where(a => a != null).ToList(); + user.OrgPaths = string.Join(" ; ", orgPathList); + } + } + + //设置主管 + if (orgId.HasValue && orgId > 0) + { + var managerUserIds = await _userOrgRep.Select + .Where(a => a.OrgId == orgId && a.IsManager == true).ToListAsync(a => a.UserId); + + if (managerUserIds.Count != 0) + { + var managerUsers = list.Where(a => managerUserIds.Contains(a.Id)); + foreach (var user in managerUsers) + { + user.IsManager = true; + } + } + } + + //设置用户在线 + if (_imConfig.Enable) + { + var clientIdList = ImHelper.GetClientListByOnline(); + if (clientIdList.Any()) + { + var onlineUsers = list.Where(a => clientIdList.Contains(a.Id)); + foreach (var user in onlineUsers) + { + user.Online = true; + } + } + } + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 查询已删除分页列表 + /// + /// + /// + [HttpPost] + public async Task> GetDeletedPageAsync(PageInput input) + { + var dataPermission = User.DataPermission; + + var list = await _userRep.Select.DisableGlobalFilter(FilterNames.Delete) + .Where(a => a.IsDeleted == true) + .WhereIf(dataPermission != null && dataPermission.OrgIds.Count > 0, a => _userOrgRep.Where(b => b.UserId == a.Id && dataPermission.OrgIds.Contains(b.OrgId)).Any()) + .WhereIf(dataPermission != null && dataPermission.DataScope == DataScope.Self, a => a.CreatedUserId == User.Id) + .Where(a => a.Type != UserType.Member) + .WhereDynamicFilter(input.DynamicFilter) + .Count(out var total) + .OrderByDescending(true, a => a.Id) + .IncludeMany(a => a.Roles.Select(b => new RoleEntity { Name = b.Name })) + .IncludeMany(a => a.Orgs.Select(b => new OrgEntity { Id = b.Id })) + .Page(input.CurrentPage, input.PageSize) + .ToListAsync(a => new UserGetDeletedUserPageOutput + { + Roles = a.Roles, + Orgs = a.Orgs, + Sex = a.Staff.Sex + }); + + //设置部门 + var orgs = await _orgService.GetSimpleListWithPathAsync(); + + var orgDict = orgs.ToDictionary(a => a.Id, a => a.Path); + foreach (var user in list) + { + if (user.OrgId > 0 && orgDict.TryGetValue(user.OrgId, out var path)) + { + user.OrgPath = path; + } + + if (user.OrgIds.Length > 0) + { + var orgPathList = user.OrgIds.Select(a => orgDict.GetValueOrDefault(a)).Where(a => a != null).ToList(); + user.OrgPaths = string.Join(" ; ", orgPathList); + } + } + + var data = new PageOutput() + { + List = list, + Total = total + }; + + return data; + } + + /// + /// 查询登录用户信息 + /// + /// + /// + [NonAction] + public async Task GetLoginUserAsync(long id) + { + var output = await _userRep.Select + .DisableGlobalFilter(FilterNames.Tenant) + .WhereDynamic(id) + .ToOneAsync(); + + if (_appConfig.Tenant && output?.TenantId.Value > 0) + { + var tenant = await _tenantRep.Value.Select + .DisableGlobalFilter(FilterNames.Tenant) + .WhereDynamic(output.TenantId) + .ToOneAsync(); + + output.Tenant = tenant; + } + return output; + } + + /// + /// 获得数据权限 + /// + /// + /// + [NonAction] + public async Task GetDataPermissionAsync(string? apiPath) + { + if (!(User?.Id > 0)) + { + return null; + } + + return await Cache.GetOrSetAsync(CacheKeys.GetDataPermissionKey(User.Id, apiPath), async () => + { + using var _ = _userRep.DataFilter.Disable(FilterNames.Self, FilterNames.Data); + + var user = await _userRep.Select + .WhereDynamic(User.Id) + .ToOneAsync(a => new { a.OrgId }); + + if (user == null) + return null; + + var orgId = user.OrgId; + + //查询角色 + var roleRepository = _roleRep.Value; + var rolePermissionRepository = _rolePermissionRep.Value; + var roles = await roleRepository.Select + .InnerJoin((a, b) => a.Id == b.RoleId && b.UserId == User.Id) + .WhereIf(apiPath.NotNull(), r => rolePermissionRepository.Select + .From((s, b, c) => + s.InnerJoin(a => a.PermissionId == b.PermissionId) + .InnerJoin(a => b.ApiId == c.Id && c.Path == apiPath) + ).ToList((a, b, c) => a.RoleId).Contains(r.Id)) + .ToListAsync(a => new { a.Id, a.DataScope }); + + //数据范围 + DataScope dataScope = DataScope.Self; + var customRoleIds = new List(); + roles?.ToList().ForEach(role => + { + if (role.DataScope == DataScope.Custom) + { + customRoleIds.Add(role.Id); + } + else if (role.DataScope <= dataScope) + { + dataScope = role.DataScope; + } + }); + + //部门列表 + var orgIds = new List(); + if (dataScope != DataScope.All) + { + //本部门 + if (dataScope == DataScope.Dept) + { + orgIds.Add(orgId); + } + //本部门和下级部门 + else if (dataScope == DataScope.DeptWithChild) + { + orgIds = await _orgRep.Value + .Where(a => a.Id == orgId) + .AsTreeCte() + .ToListAsync(a => a.Id); + } + + //指定部门 + if (customRoleIds.Count > 0) + { + if (dataScope == DataScope.Self) + { + dataScope = DataScope.Custom; + } + + var customRoleOrgIds = await _roleOrgRep.Value.Select + .Where(a => customRoleIds.Contains(a.RoleId)) + .ToListAsync(a => a.OrgId); + + orgIds = orgIds.Concat(customRoleOrgIds).ToList(); + } + } + var orgName = await _orgRep.Value + .Where(a => a.Id == orgId) + .ToOneAsync(a => a.Name); + + return new DataPermissionOutput + { + OrgName = orgName, + OrgId = orgId, + OrgIds = orgIds.Distinct().ToList(), + DataScope = (User.PlatformAdmin || User.TenantAdmin) ? DataScope.All : dataScope + }; + }); + } + + /// + /// 查询用户基本信息 + /// + /// + [Login] + public async Task GetBasicAsync() + { + if (!(User?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["未登录"]); + } + + var user = await _userRep.GetAsync(User.Id); + + if (user == null) + { + throw ResultOutput.Exception(_adminLocalizer["用户不存在"]); + } + + user.Mobile = DataMaskHelper.PhoneMask(user.Mobile); + user.Email = DataMaskHelper.EmailMask(user.Email); + + return user; + } + + /// + /// 查询用户权限信息 + /// + /// + public async Task GetPermissionAsync() + { + var result = await Cache.GetOrSetAsync(CacheKeys.GetUserPermissionKey(User.Id), async () => + { + var output = new UserGetPermissionOutput(); + if (User.TenantAdmin) + { + var cloud = LazyGetRequiredService(); + var db = cloud.Use(DbKeys.AppDb); + + //套餐接口 + var pkgApis = await db.Select() + .Where(a => db.Select() + .InnerJoin((b, c, d) => b.PkgId == c.PkgId && c.PermissionId == d.PermissionId && b.TenantId == User.TenantId) + .Where((b, c, d) => d.ApiId == a.Id).Any()) + .ToListAsync(); + + //套餐权限点编码 + var pkgCodes = await db.Select() + .Where(p => db.Select() + .InnerJoin((tp, pp) => tp.PkgId == pp.PkgId && pp.PermissionId == p.Id && tp.TenantId == User.TenantId).Any() + && p.Type == PermissionType.Dot && p.Code != null && p.Code != "") + .ToListAsync(p => p.Code); + + output.Apis = pkgApis.Distinct().ToList(); + + output.Codes = pkgCodes.Distinct().ToList(); + + return output; + } + + //角色接口 + output.Apis = await _apiRep.Value + .Where(a => _apiRep.Value.Orm.Select() + .InnerJoin((b, c, d) => b.RoleId == c.RoleId && b.UserId == User.Id) + .InnerJoin((b, c, d) => c.PermissionId == d.PermissionId) + .Where((b, c, d) => d.ApiId == a.Id).Any()) + .ToListAsync(); + + //角色权限点编码 + output.Codes = await _permissionRep.Value.Where(p => _permissionRep.Value.Orm.Select() + .InnerJoin((ur, rp) => ur.RoleId == rp.RoleId && ur.UserId == User.Id + && rp.PermissionId == p.Id && p.Type == PermissionType.Dot && p.Code != null && p.Code != "").Any() + ).ToListAsync(p => p.Code); + output.Codes = output.Codes.Distinct().ToList(); + + return output; + }); + return result; + } + + /// + /// 新增用户 + /// + /// + /// + [AdminTransaction] + public virtual async Task AddAsync(UserAddInput input) + { + //检查密码 + if (input.Password.IsNull()) + { + input.Password = _appConfig.DefaultPassword; + } + _userHelper.CheckPassword(input.Password); + + using var _ = _userRep.DataFilter.DisableAll(); + + Expression> where = (a => a.UserName == input.UserName); + where = where.Or(input.Mobile.NotNull(), a => a.Mobile == input.Mobile) + .Or(input.Email.NotNull(), a => a.Email == input.Email); + + var existsUser = await _userRep.Select.Where(where) + .FirstAsync(a => new { a.UserName, a.Mobile, a.Email }); + + if (existsUser != null) + { + if (existsUser.UserName == input.UserName) + { + throw ResultOutput.Exception(_adminLocalizer["账号已存在"]); + } + + if (input.Mobile.NotNull() && existsUser.Mobile == input.Mobile) + { + throw ResultOutput.Exception(_adminLocalizer["手机号已存在"]); + } + + if (input.Email.NotNull() && existsUser.Email == input.Email) + { + throw ResultOutput.Exception(_adminLocalizer["邮箱已存在"]); + } + } + + // 用户信息 + var entity = Mapper.Map(input); + entity.Type = UserType.DefaultUser; + if (_appConfig.PasswordHasher) + { + entity.Password = _passwordHasher.Value.HashPassword(entity, input.Password); + entity.PasswordEncryptType = PasswordEncryptType.PasswordHasher; + } + else + { + entity.Password = MD5Encrypt.Encrypt32(input.Password); + entity.PasswordEncryptType = PasswordEncryptType.MD5Encrypt32; + } + var user = await _userRep.InsertAsync(entity); + var userId = user.Id; + + //用户角色 + if (input.RoleIds != null && input.RoleIds.Any()) + { + var roles = input.RoleIds.Select(roleId => new UserRoleEntity + { + UserId = userId, + RoleId = roleId + }).ToList(); + await _userRoleRep.InsertAsync(roles); + } + + // 员工信息 + var staff = input.Staff == null ? new UserStaffEntity() : Mapper.Map(input.Staff); + staff.Id = userId; + await _userStaffRep.InsertAsync(staff); + + //所属部门 + if (input.OrgIds != null && input.OrgIds.Any()) + { + var orgs = input.OrgIds.Select(orgId => new UserOrgEntity + { + UserId = userId, + OrgId = orgId + }).ToList(); + await _userOrgRep.InsertAsync(orgs); + } + + return userId; + } + + /// + /// 修改用户 + /// + /// + /// + [AdminTransaction] + public virtual async Task UpdateAsync(UserUpdateInput input) + { + if (input.Id == input.ManagerUserId) + { + throw ResultOutput.Exception(_adminLocalizer["直属主管不能是自己"]); + } + + using var _ = _userRep.DataFilter.DisableAll(); + + Expression> where = (a => a.UserName == input.UserName); + where = where.Or(input.Mobile.NotNull(), a => a.Mobile == input.Mobile) + .Or(input.Email.NotNull(), a => a.Email == input.Email); + + var existsUser = await _userRep.Select.Where(a => a.Id != input.Id).Where(where) + .FirstAsync(a => new { a.UserName, a.Mobile, a.Email }); + + if (existsUser != null) + { + if (existsUser.UserName == input.UserName) + { + throw ResultOutput.Exception(_adminLocalizer["账号已存在"]); + } + + if (input.Mobile.NotNull() && existsUser.Mobile == input.Mobile) + { + throw ResultOutput.Exception(_adminLocalizer["手机号已存在"]); + } + + if (input.Email.NotNull() && existsUser.Email == input.Email) + { + throw ResultOutput.Exception(_adminLocalizer["邮箱已存在"]); + } + } + + var user = await _userRep.GetAsync(input.Id); + if (!(user?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["用户不存在"]); + } + + Mapper.Map(input, user); + await _userRep.UpdateAsync(user); + + var userId = user.Id; + + // 用户角色 + await _userRoleRep.DeleteAsync(a => a.UserId == userId); + if (input.RoleIds != null && input.RoleIds.Any()) + { + var roles = input.RoleIds.Select(roleId => new UserRoleEntity + { + UserId = userId, + RoleId = roleId + }).ToList(); + await _userRoleRep.InsertAsync(roles); + } + + // 员工信息 + var staff = await _userStaffRep.GetAsync(userId); + var existsStaff = staff != null; + staff ??= new UserStaffEntity(); + Mapper.Map(input.Staff, staff); + staff.Id = userId; + if (existsStaff) + { + await _userStaffRep.UpdateAsync(staff); + } + else + { + await _userStaffRep.InsertAsync(staff); + } + + await Cache.DelByPatternAsync(CacheKeys.GetDataPermissionPattern(userId)); + } + + /// + /// 新增会员 + /// + /// + /// + public virtual async Task AddMemberAsync(UserAddMemberInput input) + { + if (input.Password.IsNull()) + { + input.Password = _appConfig.DefaultPassword; + } + _userHelper.CheckPassword(input.Password); + + using var _ = _userRep.DataFilter.DisableAll(); + + Expression> where = (a => a.UserName == input.UserName); + where = where.Or(input.Mobile.NotNull(), a => a.Mobile == input.Mobile) + .Or(input.Email.NotNull(), a => a.Email == input.Email); + + var existsUser = await _userRep.Select.Where(where) + .FirstAsync(a => new { a.UserName, a.Mobile, a.Email }); + + if (existsUser != null) + { + if (existsUser.UserName == input.UserName) + { + throw ResultOutput.Exception(_adminLocalizer["账号已存在"]); + } + + if (input.Mobile.NotNull() && existsUser.Mobile == input.Mobile) + { + throw ResultOutput.Exception(_adminLocalizer["手机号已存在"]); + } + + if (input.Email.NotNull() && existsUser.Email == input.Email) + { + throw ResultOutput.Exception(_adminLocalizer["邮箱已存在"]); + } + } + + // 用户信息 + var entity = Mapper.Map(input); + entity.Type = UserType.Member; + if (_appConfig.PasswordHasher) + { + entity.Password = _passwordHasher.Value.HashPassword(entity, input.Password); + entity.PasswordEncryptType = PasswordEncryptType.PasswordHasher; + } + else + { + entity.Password = MD5Encrypt.Encrypt32(input.Password); + entity.PasswordEncryptType = PasswordEncryptType.MD5Encrypt32; + } + var user = await _userRep.InsertAsync(entity); + + return user.Id; + } + + /// + /// 修改会员 + /// + /// + /// + [AdminTransaction] + public virtual async Task UpdateMemberAsync(UserUpdateMemberInput input) + { + using var _ = _userRep.DataFilter.DisableAll(); + + Expression> where = (a => a.UserName == input.UserName); + where = where.Or(input.Mobile.NotNull(), a => a.Mobile == input.Mobile) + .Or(input.Email.NotNull(), a => a.Email == input.Email); + + var existsUser = await _userRep.Select.Where(a => a.Id != input.Id).Where(where) + .FirstAsync(a => new { a.UserName, a.Mobile, a.Email }); + + if (existsUser != null) + { + if (existsUser.UserName == input.UserName) + { + throw ResultOutput.Exception(_adminLocalizer["账号已存在"]); + } + + if (input.Mobile.NotNull() && existsUser.Mobile == input.Mobile) + { + throw ResultOutput.Exception(_adminLocalizer["手机号已存在"]); + } + + if (input.Email.NotNull() && existsUser.Email == input.Email) + { + throw ResultOutput.Exception(_adminLocalizer["邮箱已存在"]); + } + } + + var user = await _userRep.GetAsync(input.Id); + if (!(user?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["用户不存在"]); + } + + Mapper.Map(input, user); + await _userRep.UpdateAsync(user); + } + + /// + /// 更新用户基本信息 + /// + /// + /// + [Login] + public async Task UpdateBasicAsync(UserUpdateBasicInput input) + { + var entity = await _userRep.GetAsync(User.Id); + entity = Mapper.Map(input, entity); + await _userRep.UpdateAsync(entity); + } + + /// + /// 修改用户密码 + /// + /// + /// + [Login] + public async Task ChangePasswordAsync(UserChangePasswordInput input) + { + if (input.ConfirmPassword != input.NewPassword) + { + throw ResultOutput.Exception(_adminLocalizer["新密码和确认密码不一致"]); + } + + _userHelper.CheckPassword(input.NewPassword); + + var entity = await _userRep.GetAsync(User.Id); + var oldPassword = MD5Encrypt.Encrypt32(input.OldPassword); + if (oldPassword != entity.Password) + { + throw ResultOutput.Exception(_adminLocalizer["旧密码不正确"]); + } + + if (entity.PasswordEncryptType == PasswordEncryptType.PasswordHasher) + { + entity.Password = _passwordHasher.Value.HashPassword(entity, input.NewPassword); + } + else + { + entity.Password = MD5Encrypt.Encrypt32(input.NewPassword); + } + + await _userRep.UpdateAsync(entity); + } + + /// + /// 重置密码 + /// + /// + /// + public async Task ResetPasswordAsync(UserResetPasswordInput input) + { + var password = input.Password; + if (password.IsNull()) + { + password = _appConfig.DefaultPassword; + } + else + { + _userHelper.CheckPassword(password); + } + if (password.IsNull()) + { + password = "123asd"; + } + + var entity = await _userRep.GetAsync(input.Id); + if (entity.PasswordEncryptType == PasswordEncryptType.PasswordHasher) + { + entity.Password = _passwordHasher.Value.HashPassword(entity, password); + } + else + { + entity.Password = MD5Encrypt.Encrypt32(password); + } + await _userRep.UpdateAsync(entity); + return password; + } + + /// + /// 设置主管 + /// + /// + /// + public async Task SetManagerAsync(UserSetManagerInput input) + { + var entity = await _userOrgRep.Where(a => a.UserId == input.UserId && a.OrgId == input.OrgId).FirstAsync(); + entity.IsManager = input.IsManager; + await _userOrgRep.UpdateAsync(entity); + } + + /// + /// 设置启用 + /// + /// + /// + public async Task SetEnableAsync(UserSetEnableInput input) + { + var entity = await _userRep.GetAsync(input.UserId); + if (entity.Type == UserType.PlatformAdmin) + { + throw ResultOutput.Exception(_adminLocalizer["平台管理员禁止禁用"]); + } + if (entity.Type == UserType.TenantAdmin) + { + throw ResultOutput.Exception(_adminLocalizer["企业管理员禁止禁用"]); + } + entity.Enabled = input.Enabled; + await _userRep.UpdateAsync(entity); + } + + /// + /// 恢复 + /// + /// + /// + public async Task RestoreAsync(UserRestoreInput input) + { + await _userRep.UpdateDiy.DisableGlobalFilter(FilterNames.Delete).Set(a => new UserEntity + { + IsDeleted = false, + ModifiedUserId = User.Id, + ModifiedUserName = User.UserName, + ModifiedUserRealName = User.Name, + ModifiedTime = DbHelper.ServerTime + }) + .WhereDynamic(input.UserIds) + .ExecuteAffrowsAsync(); + } + + /// + /// 批量设置部门 + /// + /// + [AdminTransaction] + public virtual async Task BatchSetOrgAsync(UserBatchSetOrgInput input) + { + //主属部门 + await _userRep.UpdateDiy.Set(a => new UserEntity + { + OrgId = input.OrgId, + ModifiedUserId = User.Id, + ModifiedUserName = User.UserName, + ModifiedUserRealName = User.Name, + ModifiedTime = DbHelper.ServerTime, + }) + .Where(a => a.Id.In(input.UserIds)) + .ExecuteAffrowsAsync(); + + //所属部门 + var orgIds = await _userOrgRep.Select.Where(a => a.UserId.In(input.UserIds)).ToListAsync(a => a.OrgId); + var insertOrgIds = input.OrgIds.Except(orgIds); + + var deleteOrgIds = orgIds.Except(input.OrgIds).ToArray(); + if (deleteOrgIds != null && deleteOrgIds.Any()) + { + await _userOrgRep.DeleteAsync(a => a.UserId.In(input.UserIds) && a.OrgId.In(deleteOrgIds)); + } + + if (insertOrgIds != null && insertOrgIds.Any()) + { + var orgs = new List(); + foreach (var userId in input.UserIds) + { + orgs.AddRange(insertOrgIds.Select(orgId => new UserOrgEntity + { + UserId = userId, + OrgId = orgId + }).ToList()); + } + + await _userOrgRep.InsertAsync(orgs); + } + + var capPublisher= AppInfo.GetRequiredService(); + //发送部门转移 + var userOrgChangeEvent = input.Adapt(); + await capPublisher.PublishAsync(SubscribeNames.UserOrgChange, userOrgChangeEvent); + } + + /// + /// 彻底删除用户 + /// + /// + /// + [AdminTransaction] + public virtual async Task DeleteAsync(long id) + { + var user = await _userRep.Select.WhereDynamic(id).ToOneAsync(a => new { a.Type }); + if (user == null) + { + throw ResultOutput.Exception(_adminLocalizer["用户不存在"]); + } + + if (user.Type == UserType.PlatformAdmin) + { + throw ResultOutput.Exception(_adminLocalizer["平台管理员禁止删除"]); + } + + if (user.Type == UserType.TenantAdmin) + { + throw ResultOutput.Exception(_adminLocalizer["企业管理员禁止删除"]); + } + + //删除用户角色 + await _userRoleRep.DeleteAsync(a => a.UserId == id); + //删除用户所属部门 + await _userOrgRep.DeleteAsync(a => a.UserId == id); + //删除员工 + await _userStaffRep.DeleteAsync(a => a.Id == id); + //删除用户 + await _userRep.DeleteAsync(a => a.Id == id); + + //删除用户数据权限缓存 + await Cache.DelByPatternAsync(CacheKeys.GetDataPermissionPattern(id)); + } + + /// + /// 批量彻底删除用户 + /// + /// + /// + [AdminTransaction] + public virtual async Task BatchDeleteAsync(long[] ids) + { + var admin = await _userRep.Select.Where(a => ids.Contains(a.Id) && + (a.Type == UserType.PlatformAdmin || a.Type == UserType.TenantAdmin)).AnyAsync(); + + if (admin) + { + throw ResultOutput.Exception(_adminLocalizer["平台管理员禁止删除"]); + } + + //删除用户角色 + await _userRoleRep.DeleteAsync(a => ids.Contains(a.UserId)); + //删除用户所属部门 + await _userOrgRep.DeleteAsync(a => ids.Contains(a.UserId)); + //删除员工 + await _userStaffRep.DeleteAsync(a => ids.Contains(a.Id)); + //删除用户 + await _userRep.DeleteAsync(a => ids.Contains(a.Id)); + + foreach (var userId in ids) + { + await Cache.DelByPatternAsync(CacheKeys.GetDataPermissionPattern(userId)); + } + } + + /// + /// 删除用户 + /// + /// + /// + [AdminTransaction] + public virtual async Task SoftDeleteAsync(long id) + { + var user = await _userRep.Select.WhereDynamic(id).ToOneAsync(a => new { a.Type }); + if (user == null) + { + throw ResultOutput.Exception(_adminLocalizer["用户不存在"]); + } + + if (user.Type == UserType.PlatformAdmin || user.Type == UserType.TenantAdmin) + { + throw ResultOutput.Exception(_adminLocalizer["平台管理员禁止删除"]); + } + + await _userRep.SoftDeleteAsync(id); + + await Cache.DelByPatternAsync(CacheKeys.GetDataPermissionPattern(id)); + } + + /// + /// 批量删除用户 + /// + /// + /// + [AdminTransaction] + public virtual async Task BatchSoftDeleteAsync(long[] ids) + { + var admin = await _userRep.Select.Where(a => ids.Contains(a.Id) && + (a.Type == UserType.PlatformAdmin || a.Type == UserType.TenantAdmin)).AnyAsync(); + + if (admin) + { + throw ResultOutput.Exception(_adminLocalizer["平台管理员禁止删除"]); + } + + await _userRep.SoftDeleteAsync(ids); + + foreach (var userId in ids) + { + await Cache.DelByPatternAsync(CacheKeys.GetDataPermissionPattern(userId)); + } + } + + /// + /// 上传头像 + /// + /// + /// + /// + [HttpPost] + [Login] + public async Task AvatarUpload(IFormFile file, bool autoUpdate = false) + { + var fileInfo = await _fileService.Value.UploadFileAsync(file); + if (autoUpdate) + { + var entity = await _userRep.GetAsync(User.Id); + entity.Avatar = fileInfo.LinkUrl; + await _userRep.UpdateAsync(entity); + } + return fileInfo.LinkUrl; + } + + /// + /// 一键登录用户 + /// + /// + [HttpGet] + public async Task OneClickLoginAsync([Required] string userName) + { + if (userName.IsNull()) + { + throw ResultOutput.Exception(_adminLocalizer["请选择用户"]); + } + + var userRep = _userRep; + using var _ = userRep.DataFilter.DisableAll(); + using var __ = userRep.DataFilter.Enable(FilterNames.Tenant); + + var authLoginOutput = await userRep.Select.Where(a => a.UserName == userName).ToOneAsync(); + + if (authLoginOutput == null) + { + throw ResultOutput.Exception(_adminLocalizer["用户不存在"]); + } + + if (_appConfig.Tenant) + { + var tenant = await _tenantRep.Value.Select.WhereDynamic(authLoginOutput.TenantId).ToOneAsync(); + authLoginOutput.Tenant = tenant; + } + + var tokenInfo = AppInfo.GetRequiredService().GetTokenInfo(authLoginOutput); + + return tokenInfo; + } + + /// + /// 强制用户下线 + /// + /// + /// + public void ForceOfflineAsync(long id) + { + if (_imConfig.Enable) + { + //推送消息 + ImHelper.SendMessage(0, [id], new + { + evts = new[] + { + new { name = "forceOffline", data = new { } } + } + }); + + //强制下线 + ImHelper.ForceOffline(id); + } + else + { + throw ResultOutput.Exception(_adminLocalizer["请开启im即时通讯"]); + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/UserClickService/UserClickService.cs b/src/modules/admin/ZhonTai.Admin/Services/UserClickService/UserClickService.cs new file mode 100644 index 0000000..28eb9b1 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/UserClickService/UserClickService.cs @@ -0,0 +1,151 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using FreeSql; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Db; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.UserClickStats; +using ZhonTai.Admin.Services.UserClickStats.Dto; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Services.UserClickStats; +using ZhonTai.Admin.Domain.OnlineApp; +using Microsoft.AspNetCore.Mvc; + +namespace ZhonTai.Admin.Services.UserClickService; + +/// +/// 用户点击服务 +/// +[Order(50)] +[DynamicApi(Area = AdminConsts.AreaName)] +public partial class UserClickService : BaseService, IUserClickService, IDynamicApi +{ + private readonly AdminRepositoryBase _userClickStatsRepository; + private readonly AdminRepositoryBase _onlineAppRepository; + + public UserClickService(AdminRepositoryBase userClickStatsRepository, AdminRepositoryBase onlineAppRepository) + { + _userClickStatsRepository = userClickStatsRepository; + _onlineAppRepository = onlineAppRepository; + } + + /// + /// 记录用户点击 + /// + /// 点击记录输入参数 + /// + public async Task RecordClickAsync(RecordUserClickInput input) + { + input.UserId = User.Id; + + var entity = await _userClickStatsRepository.Select + .Where(a => a.WebType == input.WebType && a.WebId == input.WebId && a.UserId == input.UserId) + .FirstAsync(); + + if (entity == null) + { + // 如果不存在记录,创建新记录 + entity = new UserClickStatsEntity + { + WebType = input.WebType, + WebId = input.WebId, + UserId = input.UserId, + PageClicks = 1, + LastClickTime = DateTime.Now + }; + await _userClickStatsRepository.InsertAsync(entity); + } + else + { + // 如果存在记录,更新点击次数和最后点击时间 + entity.PageClicks += 1; + entity.LastClickTime = DateTime.Now; + await _userClickStatsRepository.UpdateAsync(entity); + } + } + + /// + /// 获取点击率最高的网站列表 + /// + /// 查询条件 + /// 热门网站列表 + [HttpPost] + public async Task> GetTopClickedWebsitesAsync() + { + // 先获取基础数据 + var query = _userClickStatsRepository.Select.Where(a => a.UserId == User.Id); + + // 获取分组数据 + var groupData = await query + .ToListAsync(); + + var stats = groupData + .GroupBy(a => new { a.WebType, a.WebId }) + .Select(g => new + { + WebType = g.Key.WebType, + WebId = g.Key.WebId, + PageClicks = g.Sum(a=> a.PageClicks), + }) + .OrderByDescending(x => x.PageClicks).Take(12); + + var result = new List(); + foreach (var item in stats) + { + if (item.WebType == 1) + { + var webInfo = await _onlineAppRepository.Select.Where(x => x.Id == item.WebId).FirstAsync(); + result.Add(new TopClickedWebsiteOutput + { + WebType = item.WebType, + WebId = webInfo.Id, + WebName = webInfo.WebsiteName, + ContactPerson = webInfo.ContactPerson, + TutorialUrl = webInfo.TutorialUrl, + TagName = webInfo.PrimaryTitle, + WebsiteUrl = webInfo.WebsiteUrl, + PageClicks = item.PageClicks + }); + } + else if (item.WebType == 3) + { + + } + else if (item.WebType == 5) + { + + } + + } + + if(result.Count < 12) + { + var takeCount = ( 12 - result.Count) / 3; + + var existingWebIds = result.Select(r => r.WebId).ToList(); + var webList = await _onlineAppRepository.Select + .WhereIf(existingWebIds.Any(), a => !existingWebIds.Contains(a.Id)) + .Where(x => x.IsDeleted == false) + .Take(takeCount) + .ToListAsync(); + + foreach(var web in webList) + { + result.Add(new TopClickedWebsiteOutput { + WebType = 1, + WebId = web.Id, + WebName = web.WebsiteName, + ContactPerson = web.ContactPerson, + TutorialUrl = web.TutorialUrl, + TagName = web.PrimaryTitle, + WebsiteUrl = web.WebsiteUrl, + PageClicks = 0 + }); + } + } + return result; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/UserCustomNavigation/UserCustomNavigationService.cs b/src/modules/admin/ZhonTai.Admin/Services/UserCustomNavigation/UserCustomNavigationService.cs new file mode 100644 index 0000000..355f9dd --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/UserCustomNavigation/UserCustomNavigationService.cs @@ -0,0 +1,65 @@ +using ZhonTai.Admin.Contracts.Domain.CustomNavigation; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Repositories; +using ZhonTai.Admin.Services.UserCustomNavigation.Dto; +using ZhonTai.DynamicApi.Attributes; + +using ZhonTai.DynamicApi; + + +namespace ZhonTai.Admin.Services.UserCustomNavigation; + +/// +/// 用户自定义导航服务 +/// +[Order(100)] +[DynamicApi(Area = AdminConsts.AreaName)] +public partial class UserCustomNavigationService : BaseService, IUserCustomNavigationService, IDynamicApi +{ + private readonly AdminRepositoryBase _repo; + + public UserCustomNavigationService(AdminRepositoryBase repo) + { + _repo = repo; + } + + /// + /// 保存自定义导航 + /// + /// 导航JSON + /// 是否成功 + public async Task SaveAsync(SaveUserCustomNavigationInput input) + { + var userId = User.Id; + var entity = await _repo.Select.Where(x => x.UserId == userId).FirstAsync(); + if (entity == null) + { + entity = new CustomNavigationEntity { UserId = userId, CustomNavigationJson = input.Json }; + await _repo.InsertAsync(entity); + } + else + { + entity.CustomNavigationJson = input.Json; + await _repo.UpdateAsync(entity); + } + } + + /// + /// 加载自定义导航 + /// + /// 导航JSON + public async Task GetAsync() + { + var userId = User.Id; + var entity = await _repo.Select.Where(x => x.UserId == userId).FirstAsync(); + + if (entity == null) + { + // 加载初始化 用户json + entity = new CustomNavigationEntity { UserId = userId, CustomNavigationJson = "" }; + await _repo.InsertAsync(entity); + } + + return entity?.CustomNavigationJson ?? ""; + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/View/ViewService.cs b/src/modules/admin/ZhonTai.Admin/Services/View/ViewService.cs new file mode 100644 index 0000000..97c4477 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/View/ViewService.cs @@ -0,0 +1,251 @@ +using Microsoft.AspNetCore.Mvc; +using System.Linq.Expressions; +using ZhonTai.Admin.Core.Attributes; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Dto; +using ZhonTai.Admin.Domain.View; +using ZhonTai.Admin.Resources; +using ZhonTai.Admin.Services.View.Dto; +using ZhonTai.DynamicApi; +using ZhonTai.DynamicApi.Attributes; + +namespace ZhonTai.Admin.Services.View; + +/// +/// 视图服务 +/// +[Order(100)] +[DynamicApi(Area = AdminConsts.AreaName)] +public class ViewService : BaseService, IViewService, IDynamicApi +{ + private readonly IViewRepository _viewRep; + private readonly AdminLocalizer _adminLocalizer; + + public ViewService(IViewRepository viewRep, AdminLocalizer adminLocalizer) + { + _viewRep = viewRep; + _adminLocalizer = adminLocalizer; + } + + /// + /// 查询 + /// + /// + /// + public async Task GetAsync(long id) + { + var result = await _viewRep.GetAsync(id); + return result; + } + + /// + /// 查询列表 + /// + /// + /// + [HttpPost] + public async Task> GetListAsync(ViewGetListInput input) + { + var platform = input?.Platform?.Trim(); + var name = input?.Name?.Trim(); + var label = input?.Label?.Trim(); + var path = input?.Path?.Trim(); + + var select = _viewRep.Select; + if (platform.NotNull()) + { + Expression> where = null; + where = where.And(a => a.Platform == platform); + if(platform.ToLower() == AdminConsts.WebName) + { + where = where.Or(a => string.IsNullOrEmpty(a.Platform)); + } + select = select.Where(where); + } + else + { + select = select.Where(a => string.IsNullOrEmpty(a.Platform)); + } + + var data = await select + .WhereIf(name.NotNull(), a => a.Name.Contains(name)) + .WhereIf(label.NotNull(), a => a.Label.Contains(label)) + .WhereIf(path.NotNull(), a => a.Path.Contains(path)) + .OrderBy(a => a.ParentId) + .OrderBy(a => a.Sort) + .ToListAsync(); + + return data; + } + + /// + /// 新增 + /// + /// + /// + public async Task AddAsync(ViewAddInput input) + { + if (await _viewRep.Select.AnyAsync(a => a.Platform == input.Platform && a.ParentId == input.ParentId && a.Label == input.Label)) + { + throw ResultOutput.Exception(_adminLocalizer["此视图已存在"]); + } + + var entity = Mapper.Map(input); + if (entity.Sort == 0) + { + var sort = await _viewRep.Select.Where(a => a.ParentId == input.ParentId).MaxAsync(a => a.Sort); + entity.Sort = sort + 1; + } + await _viewRep.InsertAsync(entity); + + return entity.Id; + } + + /// + /// 修改 + /// + /// + /// + public async Task UpdateAsync(ViewUpdateInput input) + { + var entity = await _viewRep.GetAsync(input.Id); + if (!(entity?.Id > 0)) + { + throw ResultOutput.Exception(_adminLocalizer["视图不存在"]); + } + + if (input.Id == input.ParentId) + { + throw ResultOutput.Exception(_adminLocalizer["上级视图不能是本视图"]); + } + + if (await _viewRep.Select.AnyAsync(a => a.Platform == input.Platform && a.ParentId == input.ParentId && a.Id != input.Id && a.Label == input.Label)) + { + throw ResultOutput.Exception(_adminLocalizer["此视图已存在"]); + } + + Mapper.Map(input, entity); + await _viewRep.UpdateAsync(entity); + } + + /// + /// 彻底删除 + /// + /// + /// + public async Task DeleteAsync(long id) + { + await _viewRep.DeleteAsync(m => m.Id == id); + } + + /// + /// 批量彻底删除 + /// + /// + /// + public async Task BatchDeleteAsync(long[] ids) + { + await _viewRep.DeleteAsync(a => ids.Contains(a.Id)); + } + + /// + /// 删除 + /// + /// + /// + public async Task SoftDeleteAsync(long id) + { + await _viewRep.SoftDeleteAsync(id); + } + + /// + /// 批量删除 + /// + /// + /// + + public async Task BatchSoftDeleteAsync(long[] ids) + { + await _viewRep.SoftDeleteAsync(ids); + } + + /// + /// 同步 + /// + /// + /// + [AdminTransaction] + public virtual async Task SyncAsync(ViewSyncInput input) + { + //查询所有视图 + var views = await _viewRep.Select.ToListAsync(); + var names = views.Select(a => a.Name).ToList(); + var paths = views.Select(a => a.Path).ToList(); + + //path处理 + foreach (var view in input.Views) + { + view.Path = view.Path?.Trim(); + } + + //批量插入 + { + var inputViews = (from a in input.Views where !(paths.Contains(a.Path) || names.Contains(a.Name)) select a).ToList(); + if (inputViews.Count > 0) + { + var insertViews = Mapper.Map>(inputViews); + foreach (var insertView in insertViews) + { + if (insertView.Label.IsNull()) + { + insertView.Label = insertView.Name; + } + } + insertViews = await _viewRep.InsertAsync(insertViews); + views.AddRange(insertViews); + } + } + + //批量更新 + { + var inputPaths = input.Views.Select(a => a.Path).ToList(); + var inputNames = input.Views.Select(a => a.Name).ToList(); + + //修改 + var updateViews = (from a in views where inputPaths.Contains(a.Path) || inputNames.Contains(a.Name) select a).ToList(); + if (updateViews.Count > 0) + { + foreach (var view in updateViews) + { + var inputView = input.Views.Where(a => a.Name == view.Name || a.Path == view.Path).FirstOrDefault(); + if (view.Label.IsNull()) + { + view.Label = inputView.Label ?? inputView.Name; + } + if (view.Description.IsNull()) + { + view.Description = inputView.Description; + } + view.Name = inputView.Name; + view.Path = inputView.Path; + view.Enabled = true; + } + } + + //禁用 + var disabledViews = (from a in views where (a.Path.NotNull() || a.Name.NotNull()) && (!inputPaths.Contains(a.Path) || !inputNames.Contains(a.Name)) select a).ToList(); + if (disabledViews.Count > 0) + { + foreach (var view in disabledViews) + { + view.Enabled = false; + } + } + + updateViews.AddRange(disabledViews); + await _viewRep.UpdateDiy.SetSource(updateViews) + .UpdateColumns(a => new { a.Label, a.Name, a.Path, a.Enabled, a.Description }) + .ExecuteAffrowsAsync(); + } + } +} \ No newline at end of file diff --git a/src/modules/admin/ZhonTai.Admin/Services/WebSocket/WebSocketService.cs b/src/modules/admin/ZhonTai.Admin/Services/WebSocket/WebSocketService.cs new file mode 100644 index 0000000..44bc91b --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/Services/WebSocket/WebSocketService.cs @@ -0,0 +1,68 @@ +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.DynamicApi; +using Microsoft.AspNetCore.Mvc; +using ZhonTai.Admin.Core; +using ZhonTai.Common.Helpers; +using Yitter.IdGenerator; +using Microsoft.Extensions.Options; +using ZhonTai.Admin.Core.Consts; +using ZhonTai.Admin.Core.Configs; +using ZhonTai.Admin.Services.WebSocket.Dto; +using Microsoft.AspNetCore.Authorization; +using ZhonTai.Admin.Core.Attributes; + +namespace ZhonTai.Admin.Services; + +/// +/// WebSocket +/// +[DynamicApi(Area = AdminConsts.AreaName)] +public class WebSocketService : IDynamicApi +{ + private readonly IOptions _imConfig; + + public WebSocketService(IOptions imConfig) + { + _imConfig = imConfig; + } + + /// + /// 获取websocket分区 + /// + [Login] + [HttpPost] + public object PreConnect(WebSocketPreConnectInput input) + { + var websocketId = input.WebsocketId ?? AppInfo.User?.Id; + if (websocketId == null) websocketId = YitIdHelper.NextId(); + var wsServer = ImHelper.PrevConnectServer(websocketId.Value, IPHelper.GetIP(AppInfo.HttpContext.Request)); + + var bizServer = _imConfig.Value.Server; + if (bizServer.NotNull()) + { + var servers = _imConfig.Value.Servers; + foreach (var server in servers) + { + wsServer = wsServer.Replace($"ws://{server}", bizServer); + } + } + + return new + { + server = wsServer, + websocketId + }; + } + + /// + /// 是否使用im + /// + /// + [HttpGet] + [AllowAnonymous] + [NoOperationLog] + public bool IsUseIm() + { + return _imConfig.Value.Enable; + } +} diff --git a/src/modules/admin/ZhonTai.Admin/ZhonTai.Admin.csproj b/src/modules/admin/ZhonTai.Admin/ZhonTai.Admin.csproj new file mode 100644 index 0000000..977bae7 --- /dev/null +++ b/src/modules/admin/ZhonTai.Admin/ZhonTai.Admin.csproj @@ -0,0 +1,30 @@ + + + + 中台Admin权限管理接口库 + false + + + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/admin/ZhonTai.Admin/key.snk b/src/modules/admin/ZhonTai.Admin/key.snk new file mode 100644 index 0000000..ec947d1 Binary files /dev/null and b/src/modules/admin/ZhonTai.Admin/key.snk differ diff --git a/src/modules/im/ZhonTai.IMServer/Program.cs b/src/modules/im/ZhonTai.IMServer/Program.cs new file mode 100644 index 0000000..da1743e --- /dev/null +++ b/src/modules/im/ZhonTai.IMServer/Program.cs @@ -0,0 +1,22 @@ +using System.Text; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. + +var app = builder.Build(); +var configuration = app.Configuration; + +// Configure the HTTP request pipeline. +Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); +Console.OutputEncoding = Encoding.GetEncoding("GB2312"); +Console.InputEncoding = Encoding.GetEncoding("GB2312"); + +app.UseFreeImServer(new ImServerOptions +{ + Redis = new FreeRedis.RedisClient(configuration["ImServerOptions:RedisClient"]), + Servers = configuration["ImServerOptions:Servers"]?.Split(";"), + Server = configuration["ImServerOptions:Server"], +}); + +app.Run(); diff --git a/src/modules/im/ZhonTai.IMServer/Properties/launchSettings.json b/src/modules/im/ZhonTai.IMServer/Properties/launchSettings.json new file mode 100644 index 0000000..a86b1ad --- /dev/null +++ b/src/modules/im/ZhonTai.IMServer/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:17010", + "sslPort": 0 + } + }, + "profiles": { + "ImServer": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "", + "applicationUrl": "http://localhost:17010", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/modules/im/ZhonTai.IMServer/ZhonTai.IMServer.csproj b/src/modules/im/ZhonTai.IMServer/ZhonTai.IMServer.csproj new file mode 100644 index 0000000..ed3fe06 --- /dev/null +++ b/src/modules/im/ZhonTai.IMServer/ZhonTai.IMServer.csproj @@ -0,0 +1,15 @@ + + + net9.0 + enable + enable + + + + 1701;1702;1591;8632;CS8002;NU1902;NU1903;NU1904; + + + + + + diff --git a/src/modules/im/ZhonTai.IMServer/appsettings.Development.json b/src/modules/im/ZhonTai.IMServer/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/src/modules/im/ZhonTai.IMServer/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/src/modules/im/ZhonTai.IMServer/appsettings.json b/src/modules/im/ZhonTai.IMServer/appsettings.json new file mode 100644 index 0000000..6fd79fd --- /dev/null +++ b/src/modules/im/ZhonTai.IMServer/appsettings.json @@ -0,0 +1,15 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "Urls": "http://*:17010", + "ImServerOptions": { + "RedisClient": "127.0.0.1:6379,password=,poolsize=10,defaultDatabase=6", + "Servers": "127.0.0.1:17010", + "Server": "127.0.0.1:17010" + } +} diff --git a/src/platform/Directory.Build.props b/src/platform/Directory.Build.props new file mode 100644 index 0000000..bc07937 --- /dev/null +++ b/src/platform/Directory.Build.props @@ -0,0 +1,26 @@ + + + 9.1.2 + net9.0 + enable + false + true + latest + $(MSBuildProjectName).xml + true + xiaoxue + zhontai + true + snupkg + MIT + https://admin.zhontai.net + https://github.com/zhontai/Admin.Core + git + ZhonTai AdminApi;WebApi;HttpApi; + logo.png + 1701;1702;1591;8632;SYSLIB0020;CS8002;NU1902;NU1903;NU1904; + true + false + key.snk + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/ApiUIBuilderExtensions.cs b/src/platform/ZhonTai.ApiUI/ApiUIBuilderExtensions.cs new file mode 100644 index 0000000..fde4524 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/ApiUIBuilderExtensions.cs @@ -0,0 +1,46 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Microsoft.AspNetCore.Hosting; + +#if NETSTANDARD2_0 +using IWebHostEnvironment = Microsoft.AspNetCore.Hosting.IHostingEnvironment; +#endif + +namespace ZhonTai.ApiUI +{ + public static class ApiUIBuilderExtensions + { + /// + /// Register the ApiUI middleware with provided options + /// + public static IApplicationBuilder UseApiUI(this IApplicationBuilder app, ApiUIOptions options) + { + return app.UseMiddleware(options); + } + + /// + /// Register the ApiUI middleware with optional setup action for DI-injected options + /// + public static IApplicationBuilder UseApiUI( + this IApplicationBuilder app, + Action setupAction = null) + { + ApiUIOptions options; + using (var scope = app.ApplicationServices.CreateScope()) + { + options = scope.ServiceProvider.GetRequiredService>().Value; + setupAction?.Invoke(options); + } + + // To simplify the common case, use a default that will work with the SwaggerMiddleware defaults + if (options.ConfigObject.Urls == null) + { + var hostingEnv = app.ApplicationServices.GetRequiredService(); + options.ConfigObject.Urls = new[] { new UrlDescriptor { Name = $"{hostingEnv.ApplicationName} v1", Url = "v1/swagger.json" } }; + } + + return app.UseApiUI(options); + } + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/ApiUIJsonSerializerContext.cs b/src/platform/ZhonTai.ApiUI/ApiUIJsonSerializerContext.cs new file mode 100644 index 0000000..160d420 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/ApiUIJsonSerializerContext.cs @@ -0,0 +1,45 @@ +#if NET6_0_OR_GREATER +using System.Text.Json; +using System.Text.Json.Nodes; +using System.Text.Json.Serialization; + +namespace ZhonTai.ApiUI; + +[JsonSerializable(typeof(ConfigObject))] +[JsonSerializable(typeof(InterceptorFunctions))] +[JsonSerializable(typeof(OAuthConfigObject))] +// These primitive types are declared for common types that may be used with ConfigObject.AdditionalItems. See https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/2884. +[JsonSerializable(typeof(bool))] +[JsonSerializable(typeof(byte))] +[JsonSerializable(typeof(sbyte))] +[JsonSerializable(typeof(short))] +[JsonSerializable(typeof(ushort))] +[JsonSerializable(typeof(int))] +[JsonSerializable(typeof(uint))] +[JsonSerializable(typeof(long))] +[JsonSerializable(typeof(ulong))] +[JsonSerializable(typeof(float))] +[JsonSerializable(typeof(double))] +[JsonSerializable(typeof(decimal))] +[JsonSerializable(typeof(char))] +[JsonSerializable(typeof(string))] +[JsonSerializable(typeof(DateTime))] +[JsonSerializable(typeof(DateTimeOffset))] +[JsonSerializable(typeof(TimeSpan))] +[JsonSerializable(typeof(JsonArray))] +[JsonSerializable(typeof(JsonObject))] +[JsonSerializable(typeof(JsonDocument))] +#if NET7_0_OR_GREATER +[JsonSerializable(typeof(DateOnly))] +[JsonSerializable(typeof(TimeOnly))] +#endif +#if NET8_0_OR_GREATER +[JsonSerializable(typeof(Half))] +[JsonSerializable(typeof(Int128))] +[JsonSerializable(typeof(UInt128))] +#endif +[JsonSourceGenerationOptions( + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase)] +internal sealed partial class ApiUIOptionsJsonContext : JsonSerializerContext; +#endif diff --git a/src/platform/ZhonTai.ApiUI/ApiUIMiddleware.cs b/src/platform/ZhonTai.ApiUI/ApiUIMiddleware.cs new file mode 100644 index 0000000..27fd7d3 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/ApiUIMiddleware.cs @@ -0,0 +1,180 @@ +using System.Reflection; +using System.Text.RegularExpressions; +using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Microsoft.Extensions.FileProviders; +using Microsoft.AspNetCore.StaticFiles; +using System.Diagnostics.CodeAnalysis; + +#if NETSTANDARD2_0 +using IWebHostEnvironment = Microsoft.AspNetCore.Hosting.IHostingEnvironment; +#endif + +namespace ZhonTai.ApiUI +{ + public class ApiUIMiddleware + { + private const string EmbeddedFileNamespace = "ZhonTai.ApiUI.src.dist"; + + private readonly ApiUIOptions _options; + private readonly StaticFileMiddleware _staticFileMiddleware; + private readonly JsonSerializerOptions _jsonSerializerOptions; + + public ApiUIMiddleware( + RequestDelegate next, + IWebHostEnvironment hostingEnv, + ILoggerFactory loggerFactory, + ApiUIOptions options) + { + _options = options ?? new ApiUIOptions(); + + _staticFileMiddleware = CreateStaticFileMiddleware(next, hostingEnv, loggerFactory, options); + + if (options.JsonSerializerOptions != null) + { + _jsonSerializerOptions = options.JsonSerializerOptions; + } + else + { + _jsonSerializerOptions = new JsonSerializerOptions() + { +#if NET5_0_OR_GREATER + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, +#else + IgnoreNullValues = true, +#endif + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase, false) } + }; + } + } + + public async Task Invoke(HttpContext httpContext) + { + var httpMethod = httpContext.Request.Method; + var path = httpContext.Request.Path.Value; + + var isGet = HttpMethods.IsGet(httpMethod); + + // If the RoutePrefix is requested (with or without trailing slash), redirect to index URL + if (isGet && Regex.IsMatch(path, $"^/?{Regex.Escape(_options.RoutePrefix)}/?$", RegexOptions.IgnoreCase)) + { + // Use relative redirect to support proxy environments + var relativeIndexUrl = string.IsNullOrEmpty(path) || path.EndsWith("/") + ? "index.html" + : $"{path.Split('/').Last()}/index.html"; + + RespondWithRedirect(httpContext.Response, relativeIndexUrl); + return; + } + + if (isGet && Regex.IsMatch(path, $"^/{Regex.Escape(_options.RoutePrefix)}/?index.html$", RegexOptions.IgnoreCase)) + { + await RespondWithIndexHtml(httpContext.Response); + return; + } + + if (isGet && Regex.IsMatch(path, $"^/{Regex.Escape(_options.RoutePrefix)}/?swagger-resources$", RegexOptions.IgnoreCase)) + { + await RespondWithConfig(httpContext.Response); + return; + } + + await _staticFileMiddleware.Invoke(httpContext); + } + + private async Task RespondWithConfig(HttpResponse response) + { + await response.WriteAsync(JsonSerializer.Serialize(_options.ConfigObject.Urls, _jsonSerializerOptions)); + } + + private static StaticFileMiddleware CreateStaticFileMiddleware( + RequestDelegate next, + IWebHostEnvironment hostingEnv, + ILoggerFactory loggerFactory, + ApiUIOptions options) + { + var staticFileOptions = new StaticFileOptions + { + RequestPath = string.IsNullOrEmpty(options.RoutePrefix) ? string.Empty : $"/{options.RoutePrefix}", + FileProvider = new EmbeddedFileProvider(typeof(ApiUIMiddleware).GetTypeInfo().Assembly, EmbeddedFileNamespace), + }; + + return new StaticFileMiddleware(next, hostingEnv, Options.Create(staticFileOptions), loggerFactory); + } + + private static void RespondWithRedirect(HttpResponse response, string location) + { + response.StatusCode = 301; + response.Headers["Location"] = location; + } + + private async Task RespondWithIndexHtml(HttpResponse response) + { + response.StatusCode = 200; + response.ContentType = "text/html;charset=utf-8"; + + using (var stream = _options.IndexStream()) + { + using var reader = new StreamReader(stream); + + // Inject arguments before writing to response + var htmlBuilder = new StringBuilder(await reader.ReadToEndAsync()); + foreach (var entry in GetIndexArguments()) + { + htmlBuilder.Replace(entry.Key, entry.Value); + } + + await response.WriteAsync(htmlBuilder.ToString(), Encoding.UTF8); + } + } + +#if NET5_0_OR_GREATER + [UnconditionalSuppressMessage( + "AOT", + "IL2026:RequiresUnreferencedCode", + Justification = "Method is only called if the user provides their own custom JsonSerializerOptions.")] + [UnconditionalSuppressMessage( + "AOT", + "IL3050:RequiresDynamicCode", + Justification = "Method is only called if the user provides their own custom JsonSerializerOptions.")] +#endif + private Dictionary GetIndexArguments() + { + string configObject = null; + string oauthConfigObject = null; + string interceptors = null; + +#if NET6_0_OR_GREATER + if (_jsonSerializerOptions is null) + { + configObject = JsonSerializer.Serialize(_options.ConfigObject, ApiUIOptionsJsonContext.Default.ConfigObject); + oauthConfigObject = JsonSerializer.Serialize(_options.OAuthConfigObject, ApiUIOptionsJsonContext.Default.OAuthConfigObject); + interceptors = JsonSerializer.Serialize(_options.Interceptors, ApiUIOptionsJsonContext.Default.InterceptorFunctions); + } +#endif + + configObject ??= JsonSerializer.Serialize(_options.ConfigObject, _jsonSerializerOptions); + oauthConfigObject ??= JsonSerializer.Serialize(_options.OAuthConfigObject, _jsonSerializerOptions); + interceptors ??= JsonSerializer.Serialize(_options.Interceptors, _jsonSerializerOptions); + + return new Dictionary() + { + { "%(DocumentTitle)", _options.DocumentTitle }, + { "%(HeadContent)", _options.HeadContent }, + { "%(StylesPath)", _options.StylesPath }, + { "%(ScriptBundlePath)", _options.ScriptBundlePath }, + { "%(ScriptPresetsPath)", _options.ScriptPresetsPath }, + { "%(ConfigObject)", configObject }, + { "%(OAuthConfigObject)", oauthConfigObject }, + { "%(Interceptors)", interceptors }, + }; + } + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/ApiUIOptions.cs b/src/platform/ZhonTai.ApiUI/ApiUIOptions.cs new file mode 100644 index 0000000..d448224 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/ApiUIOptions.cs @@ -0,0 +1,288 @@ +using System.Reflection; +using System.Text.Json.Serialization; +using System.Text.Json; + +namespace ZhonTai.ApiUI +{ + public class ApiUIOptions + { + /// + /// Gets or sets a route prefix for accessing the swagger-ui + /// + public string RoutePrefix { get; set; } = "swagger"; + + /// + /// Gets or sets a Stream function for retrieving the swagger-ui page + /// + public Func IndexStream { get; set; } = () => typeof(ApiUIOptions).GetTypeInfo().Assembly + .GetManifestResourceStream("ZhonTai.ApiUI.src.dist.index.html"); + + /// + /// Gets or sets a title for the swagger-ui page + /// + public string DocumentTitle { get; set; } = "Api UI"; + + /// + /// Gets or sets additional content to place in the head of the swagger-ui page + /// + public string HeadContent { get; set; } = ""; + + /// + /// Gets the JavaScript config object, represented as JSON, that will be passed to the SwaggerUI + /// + public ConfigObject ConfigObject { get; set; } = new ConfigObject(); + + /// + /// Gets the JavaScript config object, represented as JSON, that will be passed to the initOAuth method + /// + public OAuthConfigObject OAuthConfigObject { get; set; } = new OAuthConfigObject(); + + /// + /// Gets the interceptor functions that define client-side request/response interceptors + /// + public InterceptorFunctions Interceptors { get; set; } = new InterceptorFunctions(); + + /// + /// Gets or sets the optional JSON serialization options to use to serialize options to the HTML document. + /// + public JsonSerializerOptions JsonSerializerOptions { get; set; } + + /// + /// Gets or sets the path or URL to the Swagger UI JavaScript bundle file. + /// + public string ScriptBundlePath { get; set; } = "./swagger-ui-bundle.js"; + + /// + /// Gets or sets the path or URL to the Swagger UI JavaScript standalone presets file. + /// + public string ScriptPresetsPath { get; set; } = "./swagger-ui-standalone-preset.js"; + + /// + /// Gets or sets the path or URL to the Swagger UI CSS file. + /// + public string StylesPath { get; set; } = "./swagger-ui.css"; + } + + public class ConfigObject + { + /// + /// One or more Swagger JSON endpoints (url and name) to power the UI + /// + public IEnumerable Urls { get; set; } = null; + + /// + /// If set to true, enables deep linking for tags and operations + /// + public bool DeepLinking { get; set; } = false; + /// + /// If set to true, it persists authorization data and it would not be lost on browser close/refresh + /// + public bool PersistAuthorization { get; set; } = false; + + /// + /// Controls the display of operationId in operations list + /// + public bool DisplayOperationId { get; set; } = false; + + /// + /// The default expansion depth for models (set to -1 completely hide the models) + /// + public int DefaultModelsExpandDepth { get; set; } = 1; + + /// + /// The default expansion depth for the model on the model-example section + /// + public int DefaultModelExpandDepth { get; set; } = 1; + + /// + /// Controls how the model is shown when the API is first rendered. + /// (The user can always switch the rendering for a given model by clicking the 'Model' and 'Example Value' links) + /// +#if NET6_0_OR_GREATER + [JsonConverter(typeof(JavascriptStringEnumConverter))] +#endif + public ModelRendering DefaultModelRendering { get; set; } = ModelRendering.Example; + + /// + /// Controls the display of the request duration (in milliseconds) for Try-It-Out requests + /// + public bool DisplayRequestDuration { get; set; } = false; + + /// + /// Controls the default expansion setting for the operations and tags. + /// It can be 'list' (expands only the tags), 'full' (expands the tags and operations) or 'none' (expands nothing) + /// +#if NET6_0_OR_GREATER + [JsonConverter(typeof(JavascriptStringEnumConverter))] +#endif + public DocExpansion DocExpansion { get; set; } = DocExpansion.List; + + /// + /// If set, enables filtering. The top bar will show an edit box that you can use to filter the tagged operations + /// that are shown. Can be an empty string or specific value, in which case filtering will be enabled using that + /// value as the filter expression. Filtering is case sensitive matching the filter expression anywhere inside the tag + /// + public string Filter { get; set; } = null; + + /// + /// If set, limits the number of tagged operations displayed to at most this many. The default is to show all operations + /// + public int? MaxDisplayedTags { get; set; } = null; + + /// + /// Controls the display of vendor extension (x-) fields and values for Operations, Parameters, and Schema + /// + public bool ShowExtensions { get; set; } = false; + + /// + /// Controls the display of extensions (pattern, maxLength, minLength, maximum, minimum) fields and values for Parameters + /// + public bool ShowCommonExtensions { get; set; } = false; + + /// + /// OAuth redirect URL + /// + [JsonPropertyName("oauth2RedirectUrl")] + public string OAuth2RedirectUrl { get; set; } = null; + + /// + /// List of HTTP methods that have the Try it out feature enabled. + /// An empty array disables Try it out for all operations. This does not filter the operations from the display + /// +#if NET6_0_OR_GREATER + [JsonConverter(typeof(JavascriptStringEnumEnumerableConverter))] +#endif + public IEnumerable SupportedSubmitMethods { get; set; } = +#if NET5_0_OR_GREATER + Enum.GetValues(); +#else + Enum.GetValues(typeof(SubmitMethod)).Cast(); +#endif + + /// + /// Controls whether the "Try it out" section should be enabled by default. + /// + [JsonPropertyName("tryItOutEnabled")] + public bool TryItOutEnabled { get; set; } + + /// + /// By default, Swagger-UI attempts to validate specs against swagger.io's online validator. + /// You can use this parameter to set a different validator URL, for example for locally deployed validators (Validator Badge). + /// Setting it to null will disable validation + /// + public string ValidatorUrl { get; set; } = null; + + [JsonExtensionData] + public Dictionary AdditionalItems { get; set; } = []; + } + + public class UrlDescriptor + { + public string Url { get; set; } + + public string Name { get; set; } + } + + public enum ModelRendering + { + Example, + Model + } + + public enum DocExpansion + { + List, + Full, + None + } + + public enum SubmitMethod + { + Get, + Put, + Post, + Delete, + Options, + Head, + Patch, + Trace + } + + public class OAuthConfigObject + { + /// + /// Default username for OAuth2 password flow. + /// + public string Username { get; set; } = null; + + /// + /// Default clientId + /// + public string ClientId { get; set; } = null; + + /// + /// Default clientSecret + /// + /// Setting this exposes the client secrets in inline javascript in the swagger-ui generated html. + public string ClientSecret { get; set; } = null; + + /// + /// Realm query parameter (for oauth1) added to authorizationUrl and tokenUrl + /// + public string Realm { get; set; } = null; + + /// + /// Application name, displayed in authorization popup + /// + public string AppName { get; set; } = null; + + /// + /// Scope separator for passing scopes, encoded before calling, default value is a space (encoded value %20) + /// + public string ScopeSeparator { get; set; } = " "; + + /// + /// String array of initially selected oauth scopes, default is empty array + /// + public IEnumerable Scopes { get; set; } = []; + + /// + /// Additional query parameters added to authorizationUrl and tokenUrl + /// + public Dictionary AdditionalQueryStringParams { get; set; } = null; + + /// + /// Only activated for the accessCode flow. During the authorization_code request to the tokenUrl, + /// pass the Client Password using the HTTP Basic Authentication scheme + /// (Authorization header with Basic base64encode(client_id + client_secret)) + /// + public bool UseBasicAuthenticationWithAccessCodeGrant { get; set; } = false; + + /// + /// Only applies to authorizatonCode flows. Proof Key for Code Exchange brings enhanced security for OAuth public clients. + /// The default is false + /// + public bool UsePkceWithAuthorizationCodeGrant { get; set; } = false; + } + + public class InterceptorFunctions + { + /// + /// MUST be a valid Javascript function. + /// Function to intercept remote definition, "Try it out", and OAuth 2.0 requests. + /// Accepts one argument requestInterceptor(request) and must return the modified request, or a Promise that resolves to the modified request. + /// Ex: "function (req) { req.headers['MyCustomHeader'] = 'CustomValue'; return req; }" + /// + [JsonPropertyName("RequestInterceptorFunction")] + public string RequestInterceptorFunction { get; set; } + + /// + /// MUST be a valid Javascript function. + /// Function to intercept remote definition, "Try it out", and OAuth 2.0 responses. + /// Accepts one argument responseInterceptor(response) and must return the modified response, or a Promise that resolves to the modified response. + /// Ex: "function (res) { console.log(res); return res; }" + /// + [JsonPropertyName("ResponseInterceptorFunction")] + public string ResponseInterceptorFunction { get; set; } + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/ApiUIOptionsExtensions.cs b/src/platform/ZhonTai.ApiUI/ApiUIOptionsExtensions.cs new file mode 100644 index 0000000..2822972 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/ApiUIOptionsExtensions.cs @@ -0,0 +1,326 @@ +using System.Text; + +namespace ZhonTai.ApiUI +{ + public static class ApiUIOptionsExtensions + { + /// + /// Injects additional CSS stylesheets into the index.html page + /// + /// + /// A path to the stylesheet - i.e. the link "href" attribute + /// The target media - i.e. the link "media" attribute + public static void InjectStylesheet(this ApiUIOptions options, string path, string media = "screen") + { + var builder = new StringBuilder(options.HeadContent); + builder.AppendLine($""); + options.HeadContent = builder.ToString(); + } + + /// + /// Injects additional Javascript files into the index.html page + /// + /// + /// A path to the javascript - i.e. the script "src" attribute + /// The script type - i.e. the script "type" attribute + public static void InjectJavascript(this ApiUIOptions options, string path, string type = "text/javascript") + { + var builder = new StringBuilder(options.HeadContent); + builder.AppendLine($""); + options.HeadContent = builder.ToString(); + } + + /// + /// Adds Swagger JSON endpoints. Can be fully-qualified or relative to the UI page + /// + /// + /// Can be fully qualified or relative to the current host + /// The description that appears in the document selector drop-down + public static void SwaggerEndpoint(this ApiUIOptions options, string url, string name) + { + var urls = new List(options.ConfigObject.Urls ?? Enumerable.Empty()); + urls.Add(new UrlDescriptor { Url = url, Name = name }); + options.ConfigObject.Urls = urls; + } + + /// + /// Enables deep linking for tags and operations + /// + /// + public static void EnableDeepLinking(this ApiUIOptions options) + { + options.ConfigObject.DeepLinking = true; + } + /// + /// Enables persist authorization data + /// + /// + public static void EnablePersistAuthorization(this ApiUIOptions options) + { + options.ConfigObject.PersistAuthorization = true; + } + + /// + /// Controls the display of operationId in operations list + /// + /// + public static void DisplayOperationId(this ApiUIOptions options) + { + options.ConfigObject.DisplayOperationId = true; + } + + /// + /// The default expansion depth for models (set to -1 completely hide the models) + /// + /// + /// + public static void DefaultModelsExpandDepth(this ApiUIOptions options, int depth) + { + options.ConfigObject.DefaultModelsExpandDepth = depth; + } + + /// + /// The default expansion depth for the model on the model-example section + /// + /// + /// + public static void DefaultModelExpandDepth(this ApiUIOptions options, int depth) + { + options.ConfigObject.DefaultModelExpandDepth = depth; + } + + /// + /// Controls how the model is shown when the API is first rendered. + /// (The user can always switch the rendering for a given model by clicking the 'Model' and 'Example Value' links.) + /// + /// + /// + public static void DefaultModelRendering(this ApiUIOptions options, ModelRendering modelRendering) + { + options.ConfigObject.DefaultModelRendering = modelRendering; + } + + /// + /// Controls the display of the request duration (in milliseconds) for Try-It-Out requests + /// + /// + public static void DisplayRequestDuration(this ApiUIOptions options) + { + options.ConfigObject.DisplayRequestDuration = true; + } + + /// + /// Controls the default expansion setting for the operations and tags. + /// It can be 'List' (expands only the tags), 'Full' (expands the tags and operations) or 'None' (expands nothing) + /// + /// + /// + public static void DocExpansion(this ApiUIOptions options, DocExpansion docExpansion) + { + options.ConfigObject.DocExpansion = docExpansion; + } + + /// + /// Enables filtering. The top bar will show an edit box that you can use to filter the tagged operations that are shown. + /// If an expression is provided it will be used and applied initially. + /// Filtering is case sensitive matching the filter expression anywhere inside the tag + /// + /// + /// + public static void EnableFilter(this ApiUIOptions options, string expression = null) + { + options.ConfigObject.Filter = expression ?? ""; + } + + /// + /// Enables the "Try it out" section by default. + /// + /// + public static void EnableTryItOutByDefault(this ApiUIOptions options) + { + options.ConfigObject.TryItOutEnabled = true; + } + + /// + /// Limits the number of tagged operations displayed to at most this many. The default is to show all operations + /// + /// + /// + public static void MaxDisplayedTags(this ApiUIOptions options, int count) + { + options.ConfigObject.MaxDisplayedTags = count; + } + + /// + /// Controls the display of vendor extension (x-) fields and values for Operations, Parameters, and Schema + /// + /// + public static void ShowExtensions(this ApiUIOptions options) + { + options.ConfigObject.ShowExtensions = true; + } + + /// + /// Controls the display of extensions (pattern, maxLength, minLength, maximum, minimum) fields and values for Parameters + /// + /// + public static void ShowCommonExtensions(this ApiUIOptions options) + { + options.ConfigObject.ShowCommonExtensions = true; + } + + /// + /// List of HTTP methods that have the Try it out feature enabled. An empty array disables Try it out for all operations. + /// This does not filter the operations from the display + /// + /// + /// + public static void SupportedSubmitMethods(this ApiUIOptions options, params SubmitMethod[] submitMethods) + { + options.ConfigObject.SupportedSubmitMethods = submitMethods; + } + + /// + /// OAuth redirect URL + /// + /// + /// + public static void OAuth2RedirectUrl(this ApiUIOptions options, string url) + { + options.ConfigObject.OAuth2RedirectUrl = url; + } + + /// + /// You can use this parameter to enable the swagger-ui's built-in validator (badge) functionality + /// Setting it to null will disable validation + /// + /// + /// + public static void EnableValidator(this ApiUIOptions options, string url = "https://online.swagger.io/validator") + { + options.ConfigObject.ValidatorUrl = url; + } + + /// + /// Default clientId + /// + /// + /// + public static void OAuthClientId(this ApiUIOptions options, string value) + { + options.OAuthConfigObject.ClientId = value; + } + + /// + /// Default userName + /// + /// + /// + public static void OAuthUsername(this ApiUIOptions options, string value) + { + options.OAuthConfigObject.Username = value; + } + + /// + /// Default clientSecret + /// + /// + /// + /// Setting this exposes the client secrets in inline javascript in the swagger-ui generated html. + public static void OAuthClientSecret(this ApiUIOptions options, string value) + { + options.OAuthConfigObject.ClientSecret = value; + } + + /// + /// realm query parameter (for oauth1) added to authorizationUrl and tokenUrl + /// + /// + /// + public static void OAuthRealm(this ApiUIOptions options, string value) + { + options.OAuthConfigObject.Realm = value; + } + + /// + /// Application name, displayed in authorization popup + /// + /// + /// + public static void OAuthAppName(this ApiUIOptions options, string value) + { + options.OAuthConfigObject.AppName = value; + } + + /// + /// Scope separator for passing scopes, encoded before calling, default value is a space (encoded value %20) + /// + /// + /// + public static void OAuthScopeSeparator(this ApiUIOptions options, string value) + { + options.OAuthConfigObject.ScopeSeparator = value; + } + + /// + /// String array of initially selected oauth scopes, default is empty array + /// + public static void OAuthScopes(this ApiUIOptions options, params string[] scopes) + { + options.OAuthConfigObject.Scopes = scopes; + } + + /// + /// Additional query parameters added to authorizationUrl and tokenUrl + /// + /// + /// + public static void OAuthAdditionalQueryStringParams( + this ApiUIOptions options, + Dictionary value) + { + options.OAuthConfigObject.AdditionalQueryStringParams = value; + } + + /// + /// Only activated for the accessCode flow. During the authorization_code request to the tokenUrl, + /// pass the Client Password using the HTTP Basic Authentication scheme (Authorization header with + /// Basic base64encoded[client_id:client_secret]). The default is false + /// + /// + public static void OAuthUseBasicAuthenticationWithAccessCodeGrant(this ApiUIOptions options) + { + options.OAuthConfigObject.UseBasicAuthenticationWithAccessCodeGrant = true; + } + + /// + /// Only applies to authorizatonCode flows. Proof Key for Code Exchange brings enhanced security for OAuth public clients. + /// The default is false + /// + /// + public static void OAuthUsePkce(this ApiUIOptions options) + { + options.OAuthConfigObject.UsePkceWithAuthorizationCodeGrant = true; + } + + /// + /// Function to intercept remote definition, "Try it out", and OAuth 2.0 requests. + /// + /// + /// MUST be a valid Javascript function: (request: SwaggerRequest) => SwaggerRequest + public static void UseRequestInterceptor(this ApiUIOptions options, string value) + { + options.Interceptors.RequestInterceptorFunction = value; + } + + /// + /// Function to intercept remote definition, "Try it out", and OAuth 2.0 responses. + /// + /// + /// MUST be a valid Javascript function: (response: SwaggerResponse ) => SwaggerResponse + public static void UseResponseInterceptor(this ApiUIOptions options, string value) + { + options.Interceptors.ResponseInterceptorFunction = value; + } + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/JavascriptStringEnumConverter.cs b/src/platform/ZhonTai.ApiUI/JavascriptStringEnumConverter.cs new file mode 100644 index 0000000..6033cce --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/JavascriptStringEnumConverter.cs @@ -0,0 +1,17 @@ +#if NET6_0_OR_GREATER +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace ZhonTai.ApiUI; + +internal sealed class JavascriptStringEnumConverter<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] TEnum>() : +#if NET8_0_OR_GREATER + JsonStringEnumConverter(JsonNamingPolicy.CamelCase, false) +#else + JsonStringEnumConverter(JsonNamingPolicy.CamelCase, false) +#endif + where TEnum : struct, Enum +{ +} +#endif diff --git a/src/platform/ZhonTai.ApiUI/JavascriptStringEnumEnumerableConverter.cs b/src/platform/ZhonTai.ApiUI/JavascriptStringEnumEnumerableConverter.cs new file mode 100644 index 0000000..b51ed97 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/JavascriptStringEnumEnumerableConverter.cs @@ -0,0 +1,65 @@ +#if NET6_0_OR_GREATER +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace ZhonTai.ApiUI; + +internal sealed class JavascriptStringEnumEnumerableConverter<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] TEnum>() : + JsonConverterFactory + where TEnum : struct, Enum +{ + private readonly JavascriptStringEnumConverter _enumConverter = new(); + + public override bool CanConvert(Type typeToConvert) + => typeToConvert.IsAssignableFrom(typeof(IEnumerable)); + + public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) + { + if (!typeToConvert.IsAssignableFrom(typeof(IEnumerable))) + { + throw new NotSupportedException($"The type {typeToConvert} is not supported."); + } + + var valueConverter = (JsonConverter)_enumConverter.CreateConverter(typeof(TEnum), options); + return new EnumEnumerableConverter(valueConverter); + } + + private sealed class EnumEnumerableConverter(JsonConverter inner) : JsonConverter> + { + public override IEnumerable Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType != JsonTokenType.StartArray) + { + throw new JsonException("Expected start of a JSON array."); + } + + var result = new List(); + + while (reader.Read()) + { + if (reader.TokenType == JsonTokenType.EndArray) + { + return result; + } + + result.Add(inner.Read(ref reader, typeof(TEnum), options)); + } + + throw new JsonException("JSON array is malformed."); + } + + public override void Write(Utf8JsonWriter writer, IEnumerable value, JsonSerializerOptions options) + { + writer.WriteStartArray(); + + foreach (var item in value) + { + inner.Write(writer, item, options); + } + + writer.WriteEndArray(); + } + } +} +#endif diff --git a/src/platform/ZhonTai.ApiUI/ZhonTai.ApiUI.csproj b/src/platform/ZhonTai.ApiUI/ZhonTai.ApiUI.csproj new file mode 100644 index 0000000..7f89fb8 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/ZhonTai.ApiUI.csproj @@ -0,0 +1,34 @@ + + + net9.0; + + + + 中台接口文档库 + Api UI;Swagger UI; + + + + true + true + + + + + + + + + + + + + + + + + + + + + diff --git a/src/platform/ZhonTai.ApiUI/index.html b/src/platform/ZhonTai.ApiUI/index.html new file mode 100644 index 0000000..c5d1355 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/index.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/key.snk b/src/platform/ZhonTai.ApiUI/key.snk new file mode 100644 index 0000000..9f39008 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/key.snk differ diff --git a/src/platform/ZhonTai.ApiUI/src/dist/favicon.ico b/src/platform/ZhonTai.ApiUI/src/dist/favicon.ico new file mode 100644 index 0000000..fc24385 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/dist/favicon.ico differ diff --git a/src/platform/ZhonTai.ApiUI/src/dist/index.html b/src/platform/ZhonTai.ApiUI/src/dist/index.html new file mode 100644 index 0000000..8fd33b7 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/dist/index.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/app.723af817.css b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/app.723af817.css new file mode 100644 index 0000000..3238e8b --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/app.723af817.css @@ -0,0 +1,15 @@ +@charset "UTF-8";body,html{width:100%;height:100%}input::-ms-clear,input::-ms-reveal{display:none}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;color:rgba(0,0,0,.65);font-size:14px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-variant:tabular-nums;line-height:1.5;background-color:#fff;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}[tabindex="-1"]:focus{outline:none!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5em;color:rgba(0,0,0,.85);font-weight:500}p{margin-top:0;margin-bottom:1em}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;border-bottom:0;cursor:help}address{margin-bottom:1em;font-style:normal;line-height:inherit}input[type=number],input[type=password],input[type=text],textarea{-webkit-appearance:none}dl,ol,ul{margin-top:0;margin-bottom:1em}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5em;margin-left:0}blockquote{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#1890ff;text-decoration:none;background-color:transparent;outline:none;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;-webkit-text-decoration-skip:objects}a:hover{color:#40a9ff}a:active{color:#096dd9}a:active,a:hover{text-decoration:none;outline:0}a[disabled]{color:rgba(0,0,0,.25);cursor:not-allowed;pointer-events:none}code,kbd,pre,samp{font-size:1em;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}pre{margin-top:0;margin-bottom:1em;overflow:auto}figure{margin:0 0 1em}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75em;padding-bottom:.3em;color:rgba(0,0,0,.45);text-align:left;caption-side:bottom}th{text-align:inherit}button,input,optgroup,select,textarea{margin:0;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;margin:0;padding:0;border:0}legend{display:block;width:100%;max-width:100%;margin-bottom:.5em;padding:0;color:inherit;font-size:1.5em;line-height:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}mark{padding:.2em;background-color:#feffe6}::-moz-selection{color:#fff;background:#1890ff}::selection{color:#fff;background:#1890ff}.clearfix{zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}.anticon{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.anticon>*{line-height:1}.anticon svg{display:inline-block}.anticon:before{display:none}.anticon .anticon-icon{display:block}.anticon[tabindex]{cursor:pointer}.anticon-spin,.anticon-spin:before{display:inline-block;-webkit-animation:loadingCircle 1s linear infinite;animation:loadingCircle 1s linear infinite}.fade-appear,.fade-enter,.fade-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.fade-appear.fade-appear-active,.fade-enter.fade-enter-active{-webkit-animation-name:antFadeIn;animation-name:antFadeIn;-webkit-animation-play-state:running;animation-play-state:running}.fade-leave.fade-leave-active{-webkit-animation-name:antFadeOut;animation-name:antFadeOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.fade-appear,.fade-enter{opacity:0}.fade-appear,.fade-enter,.fade-leave{-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@-webkit-keyframes antFadeOut{0%{opacity:1}to{opacity:0}}@keyframes antFadeOut{0%{opacity:1}to{opacity:0}}.move-up-appear,.move-up-enter,.move-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-up-appear.move-up-appear-active,.move-up-enter.move-up-enter-active{-webkit-animation-name:antMoveUpIn;animation-name:antMoveUpIn;-webkit-animation-play-state:running;animation-play-state:running}.move-up-leave.move-up-leave-active{-webkit-animation-name:antMoveUpOut;animation-name:antMoveUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-up-appear,.move-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-up-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-down-appear,.move-down-enter,.move-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-down-appear.move-down-appear-active,.move-down-enter.move-down-enter-active{-webkit-animation-name:antMoveDownIn;animation-name:antMoveDownIn;-webkit-animation-play-state:running;animation-play-state:running}.move-down-leave.move-down-leave-active{-webkit-animation-name:antMoveDownOut;animation-name:antMoveDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-down-appear,.move-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-down-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-left-appear,.move-left-enter,.move-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-left-appear.move-left-appear-active,.move-left-enter.move-left-enter-active{-webkit-animation-name:antMoveLeftIn;animation-name:antMoveLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.move-left-leave.move-left-leave-active{-webkit-animation-name:antMoveLeftOut;animation-name:antMoveLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-left-appear,.move-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-left-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-right-appear,.move-right-enter,.move-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-right-appear.move-right-appear-active,.move-right-enter.move-right-enter-active{-webkit-animation-name:antMoveRightIn;animation-name:antMoveRightIn;-webkit-animation-play-state:running;animation-play-state:running}.move-right-leave.move-right-leave-active{-webkit-animation-name:antMoveRightOut;animation-name:antMoveRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-right-appear,.move-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-right-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}@-webkit-keyframes antMoveDownIn{0%{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveDownIn{0%{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveDownOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveDownOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveLeftIn{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveLeftIn{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveLeftOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveLeftOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveRightIn{0%{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveRightIn{0%{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveRightOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveRightOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveUpIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveUpIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveUpOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveUpOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes loadingCircle{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loadingCircle{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}[ant-click-animating-without-extra-node=true],[ant-click-animating=true]{position:relative}html{--antd-wave-shadow-color:#1890ff}.ant-click-animating-node,[ant-click-animating-without-extra-node=true]:after{position:absolute;top:0;right:0;bottom:0;left:0;display:block;border-radius:inherit;-webkit-box-shadow:0 0 0 0 #1890ff;box-shadow:0 0 0 0 #1890ff;-webkit-box-shadow:0 0 0 0 var(--antd-wave-shadow-color);box-shadow:0 0 0 0 var(--antd-wave-shadow-color);opacity:.2;-webkit-animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;content:"";pointer-events:none}@-webkit-keyframes waveEffect{to{-webkit-box-shadow:0 0 0 #1890ff;box-shadow:0 0 0 #1890ff;-webkit-box-shadow:0 0 0 6px var(--antd-wave-shadow-color);box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@keyframes waveEffect{to{-webkit-box-shadow:0 0 0 #1890ff;box-shadow:0 0 0 #1890ff;-webkit-box-shadow:0 0 0 6px var(--antd-wave-shadow-color);box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@-webkit-keyframes fadeEffect{to{opacity:0}}@keyframes fadeEffect{to{opacity:0}}.slide-up-appear,.slide-up-enter,.slide-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-up-appear.slide-up-appear-active,.slide-up-enter.slide-up-enter-active{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-up-leave.slide-up-leave-active{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-up-appear,.slide-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-up-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-down-appear,.slide-down-enter,.slide-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-down-appear.slide-down-appear-active,.slide-down-enter.slide-down-enter-active{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-down-leave.slide-down-leave-active{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-down-appear,.slide-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-down-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-left-appear,.slide-left-enter,.slide-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-left-appear.slide-left-appear-active,.slide-left-enter.slide-left-enter-active{-webkit-animation-name:antSlideLeftIn;animation-name:antSlideLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-left-leave.slide-left-leave-active{-webkit-animation-name:antSlideLeftOut;animation-name:antSlideLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-left-appear,.slide-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-left-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-right-appear,.slide-right-enter,.slide-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-right-appear.slide-right-appear-active,.slide-right-enter.slide-right-enter-active{-webkit-animation-name:antSlideRightIn;animation-name:antSlideRightIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-right-leave.slide-right-leave-active{-webkit-animation-name:antSlideRightOut;animation-name:antSlideRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-right-appear,.slide-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-right-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@-webkit-keyframes antSlideUpIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antSlideUpIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antSlideDownIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}}@keyframes antSlideDownIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}}@-webkit-keyframes antSlideDownOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}}@keyframes antSlideDownOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}}@-webkit-keyframes antSlideLeftIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antSlideLeftIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antSlideLeftOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antSlideLeftOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antSlideRightIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}}@keyframes antSlideRightIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}}@-webkit-keyframes antSlideRightOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}}@keyframes antSlideRightOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}}.swing-appear,.swing-enter{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.swing-appear.swing-appear-active,.swing-enter.swing-enter-active{-webkit-animation-name:antSwingIn;animation-name:antSwingIn;-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes antSwingIn{0%,to{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%{-webkit-transform:translateX(10px);transform:translateX(10px)}60%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}80%{-webkit-transform:translateX(5px);transform:translateX(5px)}}@keyframes antSwingIn{0%,to{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%{-webkit-transform:translateX(10px);transform:translateX(10px)}60%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}80%{-webkit-transform:translateX(5px);transform:translateX(5px)}}.zoom-appear,.zoom-enter,.zoom-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-appear.zoom-appear-active,.zoom-enter.zoom-enter-active{-webkit-animation-name:antZoomIn;animation-name:antZoomIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-leave.zoom-leave-active{-webkit-animation-name:antZoomOut;animation-name:antZoomOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-appear,.zoom-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-appear,.zoom-big-enter,.zoom-big-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-big-appear.zoom-big-appear-active,.zoom-big-enter.zoom-big-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-big-leave.zoom-big-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-big-appear,.zoom-big-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-fast-appear,.zoom-big-fast-enter,.zoom-big-fast-leave{-webkit-animation-duration:.1s;animation-duration:.1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-big-fast-appear.zoom-big-fast-appear-active,.zoom-big-fast-enter.zoom-big-fast-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-big-fast-leave.zoom-big-fast-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-big-fast-appear,.zoom-big-fast-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-fast-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-up-appear,.zoom-up-enter,.zoom-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-up-appear.zoom-up-appear-active,.zoom-up-enter.zoom-up-enter-active{-webkit-animation-name:antZoomUpIn;animation-name:antZoomUpIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-up-leave.zoom-up-leave-active{-webkit-animation-name:antZoomUpOut;animation-name:antZoomUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-up-appear,.zoom-up-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-up-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-down-appear,.zoom-down-enter,.zoom-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-down-appear.zoom-down-appear-active,.zoom-down-enter.zoom-down-enter-active{-webkit-animation-name:antZoomDownIn;animation-name:antZoomDownIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-down-leave.zoom-down-leave-active{-webkit-animation-name:antZoomDownOut;animation-name:antZoomDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-down-appear,.zoom-down-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-down-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-left-appear,.zoom-left-enter,.zoom-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-left-appear.zoom-left-appear-active,.zoom-left-enter.zoom-left-enter-active{-webkit-animation-name:antZoomLeftIn;animation-name:antZoomLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-left-leave.zoom-left-leave-active{-webkit-animation-name:antZoomLeftOut;animation-name:antZoomLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-left-appear,.zoom-left-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-left-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-right-appear,.zoom-right-enter,.zoom-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-right-appear.zoom-right-appear-active,.zoom-right-enter.zoom-right-enter-active{-webkit-animation-name:antZoomRightIn;animation-name:antZoomRightIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-right-leave.zoom-right-leave-active{-webkit-animation-name:antZoomRightOut;animation-name:antZoomRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-right-appear,.zoom-right-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-right-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}@-webkit-keyframes antZoomIn{0%{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes antZoomIn{0%{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes antZoomOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}}@keyframes antZoomOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}}@-webkit-keyframes antZoomBigIn{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes antZoomBigIn{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes antZoomBigOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}}@keyframes antZoomBigOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}}@-webkit-keyframes antZoomUpIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}}@keyframes antZoomUpIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}}@-webkit-keyframes antZoomUpOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}}@keyframes antZoomUpOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}}@-webkit-keyframes antZoomLeftIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}}@keyframes antZoomLeftIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}}@-webkit-keyframes antZoomLeftOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}}@keyframes antZoomLeftOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}}@-webkit-keyframes antZoomRightIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}}@keyframes antZoomRightIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}}@-webkit-keyframes antZoomRightOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}}@keyframes antZoomRightOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}}@-webkit-keyframes antZoomDownIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}}@keyframes antZoomDownIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}}@-webkit-keyframes antZoomDownOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}}@keyframes antZoomDownOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}}.ant-motion-collapse-legacy{overflow:hidden}.ant-motion-collapse,.ant-motion-collapse-legacy-active{-webkit-transition:height .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)!important;transition:height .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)!important}.ant-motion-collapse{overflow:hidden}.ant-affix{position:fixed;z-index:10}.ant-alert{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;padding:8px 15px 8px 37px;word-wrap:break-word;border-radius:4px}.ant-alert.ant-alert-no-icon{padding:8px 15px}.ant-alert.ant-alert-closable{padding-right:30px}.ant-alert-icon{position:absolute;top:11.5px;left:16px}.ant-alert-description{display:none;font-size:14px;line-height:22px}.ant-alert-success{background-color:#f6ffed;border:1px solid #b7eb8f}.ant-alert-success .ant-alert-icon{color:#52c41a}.ant-alert-info{background-color:#e6f7ff;border:1px solid #91d5ff}.ant-alert-info .ant-alert-icon{color:#1890ff}.ant-alert-warning{background-color:#fffbe6;border:1px solid #ffe58f}.ant-alert-warning .ant-alert-icon{color:#faad14}.ant-alert-error{background-color:#fff1f0;border:1px solid #ffa39e}.ant-alert-error .ant-alert-icon{color:#f5222d}.ant-alert-close-icon{position:absolute;top:8px;right:16px;padding:0;overflow:hidden;font-size:12px;line-height:22px;background-color:transparent;border:none;outline:none;cursor:pointer}.ant-alert-close-icon .anticon-close{color:rgba(0,0,0,.45);-webkit-transition:color .3s;transition:color .3s}.ant-alert-close-icon .anticon-close:hover{color:rgba(0,0,0,.75)}.ant-alert-close-text{color:rgba(0,0,0,.45);-webkit-transition:color .3s;transition:color .3s}.ant-alert-close-text:hover{color:rgba(0,0,0,.75)}.ant-alert-with-description{position:relative;padding:15px 15px 15px 64px;color:rgba(0,0,0,.65);line-height:1.5;border-radius:4px}.ant-alert-with-description.ant-alert-no-icon{padding:15px}.ant-alert-with-description .ant-alert-icon{position:absolute;top:16px;left:24px;font-size:24px}.ant-alert-with-description .ant-alert-close-icon{position:absolute;top:16px;right:16px;font-size:14px;cursor:pointer}.ant-alert-with-description .ant-alert-message{display:block;margin-bottom:4px;color:rgba(0,0,0,.85);font-size:16px}.ant-alert-message{color:rgba(0,0,0,.85)}.ant-alert-with-description .ant-alert-description{display:block}.ant-alert.ant-alert-closing{height:0!important;margin:0;padding-top:0;padding-bottom:0;-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transition:all .3s cubic-bezier(.78,.14,.15,.86);transition:all .3s cubic-bezier(.78,.14,.15,.86)}.ant-alert-slide-up-leave{-webkit-animation:antAlertSlideUpOut .3s cubic-bezier(.78,.14,.15,.86);animation:antAlertSlideUpOut .3s cubic-bezier(.78,.14,.15,.86);-webkit-animation-fill-mode:both;animation-fill-mode:both}.ant-alert-banner{margin-bottom:0;border:0;border-radius:0}@-webkit-keyframes antAlertSlideUpIn{0%{-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antAlertSlideUpIn{0%{-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antAlertSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antAlertSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}.ant-anchor{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;padding-left:2px}.ant-anchor-wrapper{margin-left:-4px;padding-left:4px;overflow:auto;background-color:#fff}.ant-anchor-ink{position:absolute;top:0;left:0;height:100%}.ant-anchor-ink:before{position:relative;display:block;width:2px;height:100%;margin:0 auto;background-color:#e8e8e8;content:" "}.ant-anchor-ink-ball{position:absolute;left:50%;display:none;width:8px;height:8px;background-color:#fff;border:2px solid #1890ff;border-radius:8px;-webkit-transform:translateX(-50%);transform:translateX(-50%);-webkit-transition:top .3s ease-in-out;transition:top .3s ease-in-out}.ant-anchor-ink-ball.visible{display:inline-block}.ant-anchor.fixed .ant-anchor-ink .ant-anchor-ink-ball{display:none}.ant-anchor-link{padding:7px 0 7px 16px;line-height:1.143}.ant-anchor-link-title{position:relative;display:block;margin-bottom:6px;overflow:hidden;color:rgba(0,0,0,.65);white-space:nowrap;text-overflow:ellipsis;-webkit-transition:all .3s;transition:all .3s}.ant-anchor-link-title:only-child{margin-bottom:0}.ant-anchor-link-active>.ant-anchor-link-title{color:#1890ff}.ant-anchor-link .ant-anchor-link{padding-top:5px;padding-bottom:5px}.ant-select-auto-complete{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.ant-select-auto-complete.ant-select .ant-select-selection{border:0;-webkit-box-shadow:none;box-shadow:none}.ant-select-auto-complete.ant-select .ant-select-selection__rendered{height:100%;margin-right:0;margin-left:0;line-height:32px}.ant-select-auto-complete.ant-select .ant-select-selection__placeholder{margin-right:12px;margin-left:12px}.ant-select-auto-complete.ant-select .ant-select-selection--single{height:auto}.ant-select-auto-complete.ant-select .ant-select-search--inline{position:static;float:left}.ant-select-auto-complete.ant-select-allow-clear .ant-select-selection:hover .ant-select-selection__rendered{margin-right:0!important}.ant-select-auto-complete.ant-select .ant-input{height:32px;line-height:1.5;background:transparent;border-width:1px}.ant-select-auto-complete.ant-select .ant-input:focus,.ant-select-auto-complete.ant-select .ant-input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-select-auto-complete.ant-select .ant-input[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-select-auto-complete.ant-select .ant-input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-select-auto-complete.ant-select-lg .ant-select-selection__rendered{line-height:40px}.ant-select-auto-complete.ant-select-lg .ant-input{height:40px;padding-top:6px;padding-bottom:6px}.ant-select-auto-complete.ant-select-sm .ant-select-selection__rendered{line-height:24px}.ant-select-auto-complete.ant-select-sm .ant-input{height:24px;padding-top:1px;padding-bottom:1px}.ant-input-group>.ant-select-auto-complete .ant-select-search__field.ant-input-affix-wrapper{display:inline;float:none}.ant-avatar{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;overflow:hidden;color:#fff;white-space:nowrap;text-align:center;vertical-align:middle;background:#ccc;width:32px;height:32px;line-height:32px;border-radius:50%}.ant-avatar-image{background:transparent}.ant-avatar-string{position:absolute;left:50%;-webkit-transform-origin:0 center;transform-origin:0 center}.ant-avatar.ant-avatar-icon{font-size:18px}.ant-avatar-lg{width:40px;height:40px;line-height:40px;border-radius:50%}.ant-avatar-lg-string{position:absolute;left:50%;-webkit-transform-origin:0 center;transform-origin:0 center}.ant-avatar-lg.ant-avatar-icon{font-size:24px}.ant-avatar-sm{width:24px;height:24px;line-height:24px;border-radius:50%}.ant-avatar-sm-string{position:absolute;left:50%;-webkit-transform-origin:0 center;transform-origin:0 center}.ant-avatar-sm.ant-avatar-icon{font-size:14px}.ant-avatar-square{border-radius:4px}.ant-avatar>img{display:block;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.ant-back-top{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:fixed;right:100px;bottom:50px;z-index:10;width:40px;height:40px;cursor:pointer}.ant-back-top-content{width:40px;height:40px;overflow:hidden;color:#fff;text-align:center;background-color:rgba(0,0,0,.45);border-radius:20px}.ant-back-top-content,.ant-back-top-content:hover{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-back-top-content:hover{background-color:rgba(0,0,0,.65)}.ant-back-top-icon{width:14px;height:16px;margin:12px auto;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAoCAYAAACWwljjAAAABGdBTUEAALGPC/xhBQAAAbtJREFUWAntmMtKw0AUhhMvS5cuxILgQlRUpIggIoKIIoigG1eC+AA+jo+i6FIXBfeuXIgoeKVeitVWJX5HWhhDksnUpp3FDPyZk3Nm5nycmZKkXhAEOXSA3lG7muTeRzmfy6HneUvIhnYkQK+Q9NhAA0Opg0vBEhjBKHiyb8iGMyQMOYuK41BcBSypAL+MYXSKjtFAW7EAGEO3qN4uMQbbAkXiSfRQJ1H6a+yhlkKRcAoVFYiweYNjtCVQJJpBz2GCiPt7fBOZQpFgDpUikse5HgnkM4Fi4QX0Fpc5wf9EbLqpUCy4jMoJSXWhFwbMNgWKhVbRhy5jirhs9fy/oFhgHVVTJEs7RLZ8sSEoJm6iz7SZDMbJ+/OKERQTttCXQRLToRUmrKWCYuA2+jbN0MB4OQobYShfdTCgn/sL1K36M7TLrN3n+758aPy2rrpR6+/od5E8tf/A1uLS9aId5T7J3CNYihkQ4D9PiMdMC7mp4rjB9kjFjZp8BlnVHJBuO1yFXIV0FdDF3RlyFdJVQBdv5AxVdIsq8apiZ2PyYO1EVykesGfZEESsCkweyR8MUW+V8uJ1gkYipmpdP1pm2aJVPEGzAAAAAElFTkSuQmCC) 100%/100% no-repeat}@media screen and (max-width:768px){.ant-back-top{right:60px}}@media screen and (max-width:480px){.ant-back-top{right:20px}}.ant-badge{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;color:unset;line-height:1}.ant-badge-count{min-width:20px;height:20px;padding:0 6px;color:#fff;font-weight:400;font-size:12px;line-height:20px;white-space:nowrap;text-align:center;background:#f5222d;border-radius:10px;-webkit-box-shadow:0 0 0 1px #fff;box-shadow:0 0 0 1px #fff}.ant-badge-count a,.ant-badge-count a:hover{color:#fff}.ant-badge-multiple-words{padding:0 8px}.ant-badge-dot{width:6px;height:6px;background:#f5222d;border-radius:100%;-webkit-box-shadow:0 0 0 1px #fff;box-shadow:0 0 0 1px #fff}.ant-badge-count,.ant-badge-dot,.ant-badge .ant-scroll-number-custom-component{position:absolute;top:0;right:0;z-index:1;-webkit-transform:translate(50%,-50%);transform:translate(50%,-50%);-webkit-transform-origin:100% 0;transform-origin:100% 0}.ant-badge-status{line-height:inherit;vertical-align:baseline}.ant-badge-status-dot{position:relative;top:-1px;display:inline-block;width:6px;height:6px;vertical-align:middle;border-radius:50%}.ant-badge-status-success{background-color:#52c41a}.ant-badge-status-processing{position:relative;background-color:#1890ff}.ant-badge-status-processing:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:50%;-webkit-animation:antStatusProcessing 1.2s ease-in-out infinite;animation:antStatusProcessing 1.2s ease-in-out infinite;content:""}.ant-badge-status-default{background-color:#d9d9d9}.ant-badge-status-error{background-color:#f5222d}.ant-badge-status-warning{background-color:#faad14}.ant-badge-status-magenta,.ant-badge-status-pink{background:#eb2f96}.ant-badge-status-red{background:#f5222d}.ant-badge-status-volcano{background:#fa541c}.ant-badge-status-orange{background:#fa8c16}.ant-badge-status-yellow{background:#fadb14}.ant-badge-status-gold{background:#faad14}.ant-badge-status-cyan{background:#13c2c2}.ant-badge-status-lime{background:#a0d911}.ant-badge-status-green{background:#52c41a}.ant-badge-status-blue{background:#1890ff}.ant-badge-status-geekblue{background:#2f54eb}.ant-badge-status-purple{background:#722ed1}.ant-badge-status-text{margin-left:8px;color:rgba(0,0,0,.65);font-size:14px}.ant-badge-zoom-appear,.ant-badge-zoom-enter{-webkit-animation:antZoomBadgeIn .3s cubic-bezier(.12,.4,.29,1.46);animation:antZoomBadgeIn .3s cubic-bezier(.12,.4,.29,1.46);-webkit-animation-fill-mode:both;animation-fill-mode:both}.ant-badge-zoom-leave{-webkit-animation:antZoomBadgeOut .3s cubic-bezier(.71,-.46,.88,.6);animation:antZoomBadgeOut .3s cubic-bezier(.71,-.46,.88,.6);-webkit-animation-fill-mode:both;animation-fill-mode:both}.ant-badge-not-a-wrapper:not(.ant-badge-status){vertical-align:middle}.ant-badge-not-a-wrapper .ant-scroll-number{position:relative;top:auto;display:block}.ant-badge-not-a-wrapper .ant-badge-count{-webkit-transform:none;transform:none}@-webkit-keyframes antStatusProcessing{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:.5}to{-webkit-transform:scale(2.4);transform:scale(2.4);opacity:0}}@keyframes antStatusProcessing{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:.5}to{-webkit-transform:scale(2.4);transform:scale(2.4);opacity:0}}.ant-scroll-number{overflow:hidden}.ant-scroll-number-only{display:inline-block;height:20px;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-scroll-number-only>p.ant-scroll-number-only-unit{height:20px;margin:0}.ant-scroll-number-symbol{vertical-align:top}@-webkit-keyframes antZoomBadgeIn{0%{-webkit-transform:scale(0) translate(50%,-50%);transform:scale(0) translate(50%,-50%);opacity:0}to{-webkit-transform:scale(1) translate(50%,-50%);transform:scale(1) translate(50%,-50%)}}@keyframes antZoomBadgeIn{0%{-webkit-transform:scale(0) translate(50%,-50%);transform:scale(0) translate(50%,-50%);opacity:0}to{-webkit-transform:scale(1) translate(50%,-50%);transform:scale(1) translate(50%,-50%)}}@-webkit-keyframes antZoomBadgeOut{0%{-webkit-transform:scale(1) translate(50%,-50%);transform:scale(1) translate(50%,-50%)}to{-webkit-transform:scale(0) translate(50%,-50%);transform:scale(0) translate(50%,-50%);opacity:0}}@keyframes antZoomBadgeOut{0%{-webkit-transform:scale(1) translate(50%,-50%);transform:scale(1) translate(50%,-50%)}to{-webkit-transform:scale(0) translate(50%,-50%);transform:scale(0) translate(50%,-50%);opacity:0}}.ant-breadcrumb{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";color:rgba(0,0,0,.45);font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:rgba(0,0,0,.45);-webkit-transition:color .3s;transition:color .3s}.ant-breadcrumb a:hover{color:#40a9ff}.ant-breadcrumb>span:last-child,.ant-breadcrumb>span:last-child a{color:rgba(0,0,0,.65)}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:rgba(0,0,0,.45)}.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.ant-btn{line-height:1.499;position:relative;display:inline-block;font-weight:400;white-space:nowrap;text-align:center;background-image:none;border:1px solid transparent;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.015);box-shadow:0 2px 0 rgba(0,0,0,.015);cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:manipulation;touch-action:manipulation;height:32px;padding:0 15px;font-size:14px;border-radius:4px;color:rgba(0,0,0,.65);background-color:#fff;border-color:#d9d9d9}.ant-btn>.anticon{line-height:1}.ant-btn,.ant-btn:active,.ant-btn:focus{outline:0}.ant-btn:not([disabled]):hover{text-decoration:none}.ant-btn:not([disabled]):active{outline:0;-webkit-box-shadow:none;box-shadow:none}.ant-btn.disabled,.ant-btn[disabled]{cursor:not-allowed}.ant-btn.disabled>*,.ant-btn[disabled]>*{pointer-events:none}.ant-btn-lg{height:40px;padding:0 15px;font-size:16px;border-radius:4px}.ant-btn-sm{height:24px;padding:0 7px;font-size:14px;border-radius:4px}.ant-btn>a:only-child{color:currentColor}.ant-btn>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:focus,.ant-btn:hover{color:#40a9ff;background-color:#fff;border-color:#40a9ff}.ant-btn:focus>a:only-child,.ant-btn:hover>a:only-child{color:currentColor}.ant-btn:focus>a:only-child:after,.ant-btn:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn.active,.ant-btn:active{color:#096dd9;background-color:#fff;border-color:#096dd9}.ant-btn.active>a:only-child,.ant-btn:active>a:only-child{color:currentColor}.ant-btn.active>a:only-child:after,.ant-btn:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-disabled,.ant-btn-disabled.active,.ant-btn-disabled:active,.ant-btn-disabled:focus,.ant-btn-disabled:hover,.ant-btn.disabled,.ant-btn.disabled.active,.ant-btn.disabled:active,.ant-btn.disabled:focus,.ant-btn.disabled:hover,.ant-btn[disabled],.ant-btn[disabled].active,.ant-btn[disabled]:active,.ant-btn[disabled]:focus,.ant-btn[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-disabled.active>a:only-child,.ant-btn-disabled:active>a:only-child,.ant-btn-disabled:focus>a:only-child,.ant-btn-disabled:hover>a:only-child,.ant-btn-disabled>a:only-child,.ant-btn.disabled.active>a:only-child,.ant-btn.disabled:active>a:only-child,.ant-btn.disabled:focus>a:only-child,.ant-btn.disabled:hover>a:only-child,.ant-btn.disabled>a:only-child,.ant-btn[disabled].active>a:only-child,.ant-btn[disabled]:active>a:only-child,.ant-btn[disabled]:focus>a:only-child,.ant-btn[disabled]:hover>a:only-child,.ant-btn[disabled]>a:only-child{color:currentColor}.ant-btn-disabled.active>a:only-child:after,.ant-btn-disabled:active>a:only-child:after,.ant-btn-disabled:focus>a:only-child:after,.ant-btn-disabled:hover>a:only-child:after,.ant-btn-disabled>a:only-child:after,.ant-btn.disabled.active>a:only-child:after,.ant-btn.disabled:active>a:only-child:after,.ant-btn.disabled:focus>a:only-child:after,.ant-btn.disabled:hover>a:only-child:after,.ant-btn.disabled>a:only-child:after,.ant-btn[disabled].active>a:only-child:after,.ant-btn[disabled]:active>a:only-child:after,.ant-btn[disabled]:focus>a:only-child:after,.ant-btn[disabled]:hover>a:only-child:after,.ant-btn[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn.active,.ant-btn:active,.ant-btn:focus,.ant-btn:hover{text-decoration:none;background:#fff}.ant-btn>i,.ant-btn>span{display:inline-block;-webkit-transition:margin-left .3s cubic-bezier(.645,.045,.355,1);transition:margin-left .3s cubic-bezier(.645,.045,.355,1);pointer-events:none}.ant-btn-primary{color:#fff;background-color:#1890ff;border-color:#1890ff;text-shadow:0 -1px 0 rgba(0,0,0,.12);-webkit-box-shadow:0 2px 0 rgba(0,0,0,.045);box-shadow:0 2px 0 rgba(0,0,0,.045)}.ant-btn-primary>a:only-child{color:currentColor}.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary:focus,.ant-btn-primary:hover{color:#fff;background-color:#40a9ff;border-color:#40a9ff}.ant-btn-primary:focus>a:only-child,.ant-btn-primary:hover>a:only-child{color:currentColor}.ant-btn-primary:focus>a:only-child:after,.ant-btn-primary:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary.active,.ant-btn-primary:active{color:#fff;background-color:#096dd9;border-color:#096dd9}.ant-btn-primary.active>a:only-child,.ant-btn-primary:active>a:only-child{color:currentColor}.ant-btn-primary.active>a:only-child:after,.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary-disabled,.ant-btn-primary-disabled.active,.ant-btn-primary-disabled:active,.ant-btn-primary-disabled:focus,.ant-btn-primary-disabled:hover,.ant-btn-primary.disabled,.ant-btn-primary.disabled.active,.ant-btn-primary.disabled:active,.ant-btn-primary.disabled:focus,.ant-btn-primary.disabled:hover,.ant-btn-primary[disabled],.ant-btn-primary[disabled].active,.ant-btn-primary[disabled]:active,.ant-btn-primary[disabled]:focus,.ant-btn-primary[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-primary-disabled.active>a:only-child,.ant-btn-primary-disabled:active>a:only-child,.ant-btn-primary-disabled:focus>a:only-child,.ant-btn-primary-disabled:hover>a:only-child,.ant-btn-primary-disabled>a:only-child,.ant-btn-primary.disabled.active>a:only-child,.ant-btn-primary.disabled:active>a:only-child,.ant-btn-primary.disabled:focus>a:only-child,.ant-btn-primary.disabled:hover>a:only-child,.ant-btn-primary.disabled>a:only-child,.ant-btn-primary[disabled].active>a:only-child,.ant-btn-primary[disabled]:active>a:only-child,.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-primary[disabled]>a:only-child{color:currentColor}.ant-btn-primary-disabled.active>a:only-child:after,.ant-btn-primary-disabled:active>a:only-child:after,.ant-btn-primary-disabled:focus>a:only-child:after,.ant-btn-primary-disabled:hover>a:only-child:after,.ant-btn-primary-disabled>a:only-child:after,.ant-btn-primary.disabled.active>a:only-child:after,.ant-btn-primary.disabled:active>a:only-child:after,.ant-btn-primary.disabled:focus>a:only-child:after,.ant-btn-primary.disabled:hover>a:only-child:after,.ant-btn-primary.disabled>a:only-child:after,.ant-btn-primary[disabled].active>a:only-child:after,.ant-btn-primary[disabled]:active>a:only-child:after,.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-primary[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child){border-right-color:#40a9ff;border-left-color:#40a9ff}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled{border-color:#d9d9d9}.ant-btn-group .ant-btn-primary:first-child:not(:last-child){border-right-color:#40a9ff}.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled]{border-right-color:#d9d9d9}.ant-btn-group .ant-btn-primary+.ant-btn-primary,.ant-btn-group .ant-btn-primary:last-child:not(:first-child){border-left-color:#40a9ff}.ant-btn-group .ant-btn-primary+.ant-btn-primary[disabled],.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled]{border-left-color:#d9d9d9}.ant-btn-ghost{color:rgba(0,0,0,.65);background-color:transparent;border-color:#d9d9d9}.ant-btn-ghost>a:only-child{color:currentColor}.ant-btn-ghost>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost:focus,.ant-btn-ghost:hover{color:#40a9ff;background-color:transparent;border-color:#40a9ff}.ant-btn-ghost:focus>a:only-child,.ant-btn-ghost:hover>a:only-child{color:currentColor}.ant-btn-ghost:focus>a:only-child:after,.ant-btn-ghost:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost.active,.ant-btn-ghost:active{color:#096dd9;background-color:transparent;border-color:#096dd9}.ant-btn-ghost.active>a:only-child,.ant-btn-ghost:active>a:only-child{color:currentColor}.ant-btn-ghost.active>a:only-child:after,.ant-btn-ghost:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost-disabled,.ant-btn-ghost-disabled.active,.ant-btn-ghost-disabled:active,.ant-btn-ghost-disabled:focus,.ant-btn-ghost-disabled:hover,.ant-btn-ghost.disabled,.ant-btn-ghost.disabled.active,.ant-btn-ghost.disabled:active,.ant-btn-ghost.disabled:focus,.ant-btn-ghost.disabled:hover,.ant-btn-ghost[disabled],.ant-btn-ghost[disabled].active,.ant-btn-ghost[disabled]:active,.ant-btn-ghost[disabled]:focus,.ant-btn-ghost[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-ghost-disabled.active>a:only-child,.ant-btn-ghost-disabled:active>a:only-child,.ant-btn-ghost-disabled:focus>a:only-child,.ant-btn-ghost-disabled:hover>a:only-child,.ant-btn-ghost-disabled>a:only-child,.ant-btn-ghost.disabled.active>a:only-child,.ant-btn-ghost.disabled:active>a:only-child,.ant-btn-ghost.disabled:focus>a:only-child,.ant-btn-ghost.disabled:hover>a:only-child,.ant-btn-ghost.disabled>a:only-child,.ant-btn-ghost[disabled].active>a:only-child,.ant-btn-ghost[disabled]:active>a:only-child,.ant-btn-ghost[disabled]:focus>a:only-child,.ant-btn-ghost[disabled]:hover>a:only-child,.ant-btn-ghost[disabled]>a:only-child{color:currentColor}.ant-btn-ghost-disabled.active>a:only-child:after,.ant-btn-ghost-disabled:active>a:only-child:after,.ant-btn-ghost-disabled:focus>a:only-child:after,.ant-btn-ghost-disabled:hover>a:only-child:after,.ant-btn-ghost-disabled>a:only-child:after,.ant-btn-ghost.disabled.active>a:only-child:after,.ant-btn-ghost.disabled:active>a:only-child:after,.ant-btn-ghost.disabled:focus>a:only-child:after,.ant-btn-ghost.disabled:hover>a:only-child:after,.ant-btn-ghost.disabled>a:only-child:after,.ant-btn-ghost[disabled].active>a:only-child:after,.ant-btn-ghost[disabled]:active>a:only-child:after,.ant-btn-ghost[disabled]:focus>a:only-child:after,.ant-btn-ghost[disabled]:hover>a:only-child:after,.ant-btn-ghost[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed{color:rgba(0,0,0,.65);background-color:#fff;border-color:#d9d9d9;border-style:dashed}.ant-btn-dashed>a:only-child{color:currentColor}.ant-btn-dashed>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed:focus,.ant-btn-dashed:hover{color:#40a9ff;background-color:#fff;border-color:#40a9ff}.ant-btn-dashed:focus>a:only-child,.ant-btn-dashed:hover>a:only-child{color:currentColor}.ant-btn-dashed:focus>a:only-child:after,.ant-btn-dashed:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed.active,.ant-btn-dashed:active{color:#096dd9;background-color:#fff;border-color:#096dd9}.ant-btn-dashed.active>a:only-child,.ant-btn-dashed:active>a:only-child{color:currentColor}.ant-btn-dashed.active>a:only-child:after,.ant-btn-dashed:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed-disabled,.ant-btn-dashed-disabled.active,.ant-btn-dashed-disabled:active,.ant-btn-dashed-disabled:focus,.ant-btn-dashed-disabled:hover,.ant-btn-dashed.disabled,.ant-btn-dashed.disabled.active,.ant-btn-dashed.disabled:active,.ant-btn-dashed.disabled:focus,.ant-btn-dashed.disabled:hover,.ant-btn-dashed[disabled],.ant-btn-dashed[disabled].active,.ant-btn-dashed[disabled]:active,.ant-btn-dashed[disabled]:focus,.ant-btn-dashed[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-dashed-disabled.active>a:only-child,.ant-btn-dashed-disabled:active>a:only-child,.ant-btn-dashed-disabled:focus>a:only-child,.ant-btn-dashed-disabled:hover>a:only-child,.ant-btn-dashed-disabled>a:only-child,.ant-btn-dashed.disabled.active>a:only-child,.ant-btn-dashed.disabled:active>a:only-child,.ant-btn-dashed.disabled:focus>a:only-child,.ant-btn-dashed.disabled:hover>a:only-child,.ant-btn-dashed.disabled>a:only-child,.ant-btn-dashed[disabled].active>a:only-child,.ant-btn-dashed[disabled]:active>a:only-child,.ant-btn-dashed[disabled]:focus>a:only-child,.ant-btn-dashed[disabled]:hover>a:only-child,.ant-btn-dashed[disabled]>a:only-child{color:currentColor}.ant-btn-dashed-disabled.active>a:only-child:after,.ant-btn-dashed-disabled:active>a:only-child:after,.ant-btn-dashed-disabled:focus>a:only-child:after,.ant-btn-dashed-disabled:hover>a:only-child:after,.ant-btn-dashed-disabled>a:only-child:after,.ant-btn-dashed.disabled.active>a:only-child:after,.ant-btn-dashed.disabled:active>a:only-child:after,.ant-btn-dashed.disabled:focus>a:only-child:after,.ant-btn-dashed.disabled:hover>a:only-child:after,.ant-btn-dashed.disabled>a:only-child:after,.ant-btn-dashed[disabled].active>a:only-child:after,.ant-btn-dashed[disabled]:active>a:only-child:after,.ant-btn-dashed[disabled]:focus>a:only-child:after,.ant-btn-dashed[disabled]:hover>a:only-child:after,.ant-btn-dashed[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger{color:#fff;background-color:#ff4d4f;border-color:#ff4d4f;text-shadow:0 -1px 0 rgba(0,0,0,.12);-webkit-box-shadow:0 2px 0 rgba(0,0,0,.045);box-shadow:0 2px 0 rgba(0,0,0,.045)}.ant-btn-danger>a:only-child{color:currentColor}.ant-btn-danger>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger:focus,.ant-btn-danger:hover{color:#fff;background-color:#ff7875;border-color:#ff7875}.ant-btn-danger:focus>a:only-child,.ant-btn-danger:hover>a:only-child{color:currentColor}.ant-btn-danger:focus>a:only-child:after,.ant-btn-danger:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger.active,.ant-btn-danger:active{color:#fff;background-color:#d9363e;border-color:#d9363e}.ant-btn-danger.active>a:only-child,.ant-btn-danger:active>a:only-child{color:currentColor}.ant-btn-danger.active>a:only-child:after,.ant-btn-danger:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger-disabled,.ant-btn-danger-disabled.active,.ant-btn-danger-disabled:active,.ant-btn-danger-disabled:focus,.ant-btn-danger-disabled:hover,.ant-btn-danger.disabled,.ant-btn-danger.disabled.active,.ant-btn-danger.disabled:active,.ant-btn-danger.disabled:focus,.ant-btn-danger.disabled:hover,.ant-btn-danger[disabled],.ant-btn-danger[disabled].active,.ant-btn-danger[disabled]:active,.ant-btn-danger[disabled]:focus,.ant-btn-danger[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-danger-disabled.active>a:only-child,.ant-btn-danger-disabled:active>a:only-child,.ant-btn-danger-disabled:focus>a:only-child,.ant-btn-danger-disabled:hover>a:only-child,.ant-btn-danger-disabled>a:only-child,.ant-btn-danger.disabled.active>a:only-child,.ant-btn-danger.disabled:active>a:only-child,.ant-btn-danger.disabled:focus>a:only-child,.ant-btn-danger.disabled:hover>a:only-child,.ant-btn-danger.disabled>a:only-child,.ant-btn-danger[disabled].active>a:only-child,.ant-btn-danger[disabled]:active>a:only-child,.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-danger[disabled]>a:only-child{color:currentColor}.ant-btn-danger-disabled.active>a:only-child:after,.ant-btn-danger-disabled:active>a:only-child:after,.ant-btn-danger-disabled:focus>a:only-child:after,.ant-btn-danger-disabled:hover>a:only-child:after,.ant-btn-danger-disabled>a:only-child:after,.ant-btn-danger.disabled.active>a:only-child:after,.ant-btn-danger.disabled:active>a:only-child:after,.ant-btn-danger.disabled:focus>a:only-child:after,.ant-btn-danger.disabled:hover>a:only-child:after,.ant-btn-danger.disabled>a:only-child:after,.ant-btn-danger[disabled].active>a:only-child:after,.ant-btn-danger[disabled]:active>a:only-child:after,.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-danger[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link{color:#1890ff;background-color:transparent;border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.ant-btn-link>a:only-child{color:currentColor}.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link:focus,.ant-btn-link:hover{color:#40a9ff;background-color:transparent;border-color:#40a9ff}.ant-btn-link:focus>a:only-child,.ant-btn-link:hover>a:only-child{color:currentColor}.ant-btn-link:focus>a:only-child:after,.ant-btn-link:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link.active,.ant-btn-link:active{color:#096dd9;background-color:transparent;border-color:#096dd9}.ant-btn-link.active>a:only-child,.ant-btn-link:active>a:only-child{color:currentColor}.ant-btn-link.active>a:only-child:after,.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link-disabled,.ant-btn-link-disabled.active,.ant-btn-link-disabled:active,.ant-btn-link-disabled:focus,.ant-btn-link-disabled:hover,.ant-btn-link.disabled,.ant-btn-link.disabled.active,.ant-btn-link.disabled:active,.ant-btn-link.disabled:focus,.ant-btn-link.disabled:hover,.ant-btn-link[disabled],.ant-btn-link[disabled].active,.ant-btn-link[disabled]:active,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:hover{background-color:#f5f5f5;border-color:#d9d9d9}.ant-btn-link:active,.ant-btn-link:focus,.ant-btn-link:hover{border-color:transparent}.ant-btn-link-disabled,.ant-btn-link-disabled.active,.ant-btn-link-disabled:active,.ant-btn-link-disabled:focus,.ant-btn-link-disabled:hover,.ant-btn-link.disabled,.ant-btn-link.disabled.active,.ant-btn-link.disabled:active,.ant-btn-link.disabled:focus,.ant-btn-link.disabled:hover,.ant-btn-link[disabled],.ant-btn-link[disabled].active,.ant-btn-link[disabled]:active,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:hover{color:rgba(0,0,0,.25);background-color:transparent;border-color:transparent;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-link-disabled.active>a:only-child,.ant-btn-link-disabled:active>a:only-child,.ant-btn-link-disabled:focus>a:only-child,.ant-btn-link-disabled:hover>a:only-child,.ant-btn-link-disabled>a:only-child,.ant-btn-link.disabled.active>a:only-child,.ant-btn-link.disabled:active>a:only-child,.ant-btn-link.disabled:focus>a:only-child,.ant-btn-link.disabled:hover>a:only-child,.ant-btn-link.disabled>a:only-child,.ant-btn-link[disabled].active>a:only-child,.ant-btn-link[disabled]:active>a:only-child,.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-link[disabled]>a:only-child{color:currentColor}.ant-btn-link-disabled.active>a:only-child:after,.ant-btn-link-disabled:active>a:only-child:after,.ant-btn-link-disabled:focus>a:only-child:after,.ant-btn-link-disabled:hover>a:only-child:after,.ant-btn-link-disabled>a:only-child:after,.ant-btn-link.disabled.active>a:only-child:after,.ant-btn-link.disabled:active>a:only-child:after,.ant-btn-link.disabled:focus>a:only-child:after,.ant-btn-link.disabled:hover>a:only-child:after,.ant-btn-link.disabled>a:only-child:after,.ant-btn-link[disabled].active>a:only-child:after,.ant-btn-link[disabled]:active>a:only-child:after,.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-link[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-icon-only{width:32px;height:32px;padding:0;font-size:16px;border-radius:4px}.ant-btn-icon-only.ant-btn-lg{width:40px;height:40px;padding:0;font-size:18px;border-radius:4px}.ant-btn-icon-only.ant-btn-sm{width:24px;height:24px;padding:0;font-size:14px;border-radius:4px}.ant-btn-icon-only>i{vertical-align:middle}.ant-btn-round{height:32px;padding:0 16px;font-size:14px;border-radius:32px}.ant-btn-round.ant-btn-lg{height:40px;padding:0 20px;font-size:16px;border-radius:40px}.ant-btn-round.ant-btn-sm{height:24px;padding:0 12px;font-size:14px;border-radius:24px}.ant-btn-round.ant-btn-icon-only{width:auto}.ant-btn-circle,.ant-btn-circle-outline{min-width:32px;padding-right:0;padding-left:0;text-align:center;border-radius:50%}.ant-btn-circle-outline.ant-btn-lg,.ant-btn-circle.ant-btn-lg{min-width:40px;border-radius:50%}.ant-btn-circle-outline.ant-btn-sm,.ant-btn-circle.ant-btn-sm{min-width:24px;border-radius:50%}.ant-btn:before{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;z-index:1;display:none;background:#fff;border-radius:inherit;opacity:.35;-webkit-transition:opacity .2s;transition:opacity .2s;content:"";pointer-events:none}.ant-btn .anticon{-webkit-transition:margin-left .3s cubic-bezier(.645,.045,.355,1);transition:margin-left .3s cubic-bezier(.645,.045,.355,1)}.ant-btn .anticon.anticon-minus>svg,.ant-btn .anticon.anticon-plus>svg{shape-rendering:optimizeSpeed}.ant-btn.ant-btn-loading{position:relative}.ant-btn.ant-btn-loading:not([disabled]){pointer-events:none}.ant-btn.ant-btn-loading:before{display:block}.ant-btn.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only){padding-left:29px}.ant-btn.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only) .anticon:not(:last-child){margin-left:-14px}.ant-btn-sm.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only){padding-left:24px}.ant-btn-sm.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only) .anticon{margin-left:-17px}.ant-btn-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.ant-btn-group,.ant-btn-group>.ant-btn,.ant-btn-group>span>.ant-btn{position:relative}.ant-btn-group>.ant-btn.active,.ant-btn-group>.ant-btn:active,.ant-btn-group>.ant-btn:focus,.ant-btn-group>.ant-btn:hover,.ant-btn-group>span>.ant-btn.active,.ant-btn-group>span>.ant-btn:active,.ant-btn-group>span>.ant-btn:focus,.ant-btn-group>span>.ant-btn:hover{z-index:2}.ant-btn-group>.ant-btn:disabled,.ant-btn-group>span>.ant-btn:disabled{z-index:0}.ant-btn-group>.ant-btn-icon-only{font-size:14px}.ant-btn-group-lg>.ant-btn,.ant-btn-group-lg>span>.ant-btn{height:40px;padding:0 15px;font-size:16px;border-radius:0;line-height:38px}.ant-btn-group-lg>.ant-btn.ant-btn-icon-only{width:40px;height:40px;padding-right:0;padding-left:0}.ant-btn-group-sm>.ant-btn,.ant-btn-group-sm>span>.ant-btn{height:24px;padding:0 7px;font-size:14px;border-radius:0;line-height:22px}.ant-btn-group-sm>.ant-btn>.anticon,.ant-btn-group-sm>span>.ant-btn>.anticon{font-size:14px}.ant-btn-group-sm>.ant-btn.ant-btn-icon-only{width:24px;height:24px;padding-right:0;padding-left:0}.ant-btn+.ant-btn-group,.ant-btn-group+.ant-btn,.ant-btn-group+.ant-btn-group,.ant-btn-group .ant-btn+.ant-btn,.ant-btn-group .ant-btn+span,.ant-btn-group>span+span,.ant-btn-group span+.ant-btn{margin-left:-1px}.ant-btn-group .ant-btn-primary+.ant-btn:not(.ant-btn-primary):not([disabled]){border-left-color:transparent}.ant-btn-group .ant-btn{border-radius:0}.ant-btn-group>.ant-btn:first-child,.ant-btn-group>span:first-child>.ant-btn{margin-left:0}.ant-btn-group>.ant-btn:only-child,.ant-btn-group>span:only-child>.ant-btn{border-radius:4px}.ant-btn-group>.ant-btn:first-child:not(:last-child),.ant-btn-group>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-btn-group>.ant-btn:last-child:not(:first-child),.ant-btn-group>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-btn-group-sm>.ant-btn:only-child,.ant-btn-group-sm>span:only-child>.ant-btn{border-radius:4px}.ant-btn-group-sm>.ant-btn:first-child:not(:last-child),.ant-btn-group-sm>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-btn-group-sm>.ant-btn:last-child:not(:first-child),.ant-btn-group-sm>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-btn-group>.ant-btn-group{float:left}.ant-btn-group>.ant-btn-group:not(:first-child):not(:last-child)>.ant-btn{border-radius:0}.ant-btn-group>.ant-btn-group:first-child:not(:last-child)>.ant-btn:last-child{padding-right:8px;border-top-right-radius:0;border-bottom-right-radius:0}.ant-btn-group>.ant-btn-group:last-child:not(:first-child)>.ant-btn:first-child{padding-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.ant-btn:active>span,.ant-btn:focus>span{position:relative}.ant-btn>.anticon+span,.ant-btn>span+.anticon{margin-left:8px}.ant-btn-background-ghost{color:#fff;background:transparent!important;border-color:#fff}.ant-btn-background-ghost.ant-btn-primary{color:#1890ff;background-color:transparent;border-color:#1890ff;text-shadow:none}.ant-btn-background-ghost.ant-btn-primary>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary:focus,.ant-btn-background-ghost.ant-btn-primary:hover{color:#40a9ff;background-color:transparent;border-color:#40a9ff}.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary.active,.ant-btn-background-ghost.ant-btn-primary:active{color:#096dd9;background-color:transparent;border-color:#096dd9}.ant-btn-background-ghost.ant-btn-primary.active>a:only-child,.ant-btn-background-ghost.ant-btn-primary:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary-disabled,.ant-btn-background-ghost.ant-btn-primary-disabled.active,.ant-btn-background-ghost.ant-btn-primary-disabled:active,.ant-btn-background-ghost.ant-btn-primary-disabled:focus,.ant-btn-background-ghost.ant-btn-primary-disabled:hover,.ant-btn-background-ghost.ant-btn-primary.disabled,.ant-btn-background-ghost.ant-btn-primary.disabled.active,.ant-btn-background-ghost.ant-btn-primary.disabled:active,.ant-btn-background-ghost.ant-btn-primary.disabled:focus,.ant-btn-background-ghost.ant-btn-primary.disabled:hover,.ant-btn-background-ghost.ant-btn-primary[disabled],.ant-btn-background-ghost.ant-btn-primary[disabled].active,.ant-btn-background-ghost.ant-btn-primary[disabled]:active,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-primary-disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-primary-disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-primary-disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary-disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary-disabled>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled].active>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary-disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary-disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary-disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary-disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary-disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled].active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger{color:#ff4d4f;background-color:transparent;border-color:#ff4d4f;text-shadow:none}.ant-btn-background-ghost.ant-btn-danger>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger:focus,.ant-btn-background-ghost.ant-btn-danger:hover{color:#ff7875;background-color:transparent;border-color:#ff7875}.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger.active,.ant-btn-background-ghost.ant-btn-danger:active{color:#d9363e;background-color:transparent;border-color:#d9363e}.ant-btn-background-ghost.ant-btn-danger.active>a:only-child,.ant-btn-background-ghost.ant-btn-danger:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger-disabled,.ant-btn-background-ghost.ant-btn-danger-disabled.active,.ant-btn-background-ghost.ant-btn-danger-disabled:active,.ant-btn-background-ghost.ant-btn-danger-disabled:focus,.ant-btn-background-ghost.ant-btn-danger-disabled:hover,.ant-btn-background-ghost.ant-btn-danger.disabled,.ant-btn-background-ghost.ant-btn-danger.disabled.active,.ant-btn-background-ghost.ant-btn-danger.disabled:active,.ant-btn-background-ghost.ant-btn-danger.disabled:focus,.ant-btn-background-ghost.ant-btn-danger.disabled:hover,.ant-btn-background-ghost.ant-btn-danger[disabled],.ant-btn-background-ghost.ant-btn-danger[disabled].active,.ant-btn-background-ghost.ant-btn-danger[disabled]:active,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-danger-disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-danger-disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-danger-disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger-disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger-disabled>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled].active>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger-disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger-disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger-disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger-disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger-disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled].active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-link{color:#1890ff;background-color:transparent;border-color:transparent;text-shadow:none;color:#fff}.ant-btn-background-ghost.ant-btn-link>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-link:focus,.ant-btn-background-ghost.ant-btn-link:hover{color:#40a9ff;background-color:transparent;border-color:transparent}.ant-btn-background-ghost.ant-btn-link:focus>a:only-child,.ant-btn-background-ghost.ant-btn-link:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-link:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-link:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-link.active,.ant-btn-background-ghost.ant-btn-link:active{color:#096dd9;background-color:transparent;border-color:transparent}.ant-btn-background-ghost.ant-btn-link.active>a:only-child,.ant-btn-background-ghost.ant-btn-link:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-link.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-link-disabled,.ant-btn-background-ghost.ant-btn-link-disabled.active,.ant-btn-background-ghost.ant-btn-link-disabled:active,.ant-btn-background-ghost.ant-btn-link-disabled:focus,.ant-btn-background-ghost.ant-btn-link-disabled:hover,.ant-btn-background-ghost.ant-btn-link.disabled,.ant-btn-background-ghost.ant-btn-link.disabled.active,.ant-btn-background-ghost.ant-btn-link.disabled:active,.ant-btn-background-ghost.ant-btn-link.disabled:focus,.ant-btn-background-ghost.ant-btn-link.disabled:hover,.ant-btn-background-ghost.ant-btn-link[disabled],.ant-btn-background-ghost.ant-btn-link[disabled].active,.ant-btn-background-ghost.ant-btn-link[disabled]:active,.ant-btn-background-ghost.ant-btn-link[disabled]:focus,.ant-btn-background-ghost.ant-btn-link[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-link-disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-link-disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-link-disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-link-disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-link-disabled>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled].active>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-link-disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link-disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link-disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-link-disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-link-disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled].active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-two-chinese-chars:first-letter{letter-spacing:.34em}.ant-btn-two-chinese-chars>:not(.anticon){margin-right:-.34em;letter-spacing:.34em}.ant-btn-block{width:100%}.ant-btn:empty{vertical-align:top}a.ant-btn{padding-top:.1px;line-height:30px}a.ant-btn-lg{line-height:38px}a.ant-btn-sm{line-height:22px}.ant-fullcalendar{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";border-top:1px solid #d9d9d9;outline:none}.ant-select.ant-fullcalendar-year-select{min-width:90px}.ant-select.ant-fullcalendar-year-select.ant-select-sm{min-width:70px}.ant-select.ant-fullcalendar-month-select{min-width:80px;margin-left:8px}.ant-select.ant-fullcalendar-month-select.ant-select-sm{min-width:70px}.ant-fullcalendar-header{padding:11px 16px 11px 0;text-align:right}.ant-fullcalendar-header .ant-select-dropdown{text-align:left}.ant-fullcalendar-header .ant-radio-group{margin-left:8px;text-align:left}.ant-fullcalendar-header label.ant-radio-button{height:22px;padding:0 10px;line-height:20px}.ant-fullcalendar-date-panel{position:relative;outline:none}.ant-fullcalendar-calendar-body{padding:8px 12px}.ant-fullcalendar table{width:100%;max-width:100%;height:256px;background-color:transparent;border-collapse:collapse}.ant-fullcalendar table,.ant-fullcalendar td,.ant-fullcalendar th{border:0}.ant-fullcalendar td{position:relative}.ant-fullcalendar-calendar-table{margin-bottom:0;border-spacing:0}.ant-fullcalendar-column-header{width:33px;padding:0;line-height:18px;text-align:center}.ant-fullcalendar-column-header .ant-fullcalendar-column-header-inner{display:block;font-weight:400}.ant-fullcalendar-week-number-header .ant-fullcalendar-column-header-inner{display:none}.ant-fullcalendar-date,.ant-fullcalendar-month{text-align:center;-webkit-transition:all .3s;transition:all .3s}.ant-fullcalendar-value{display:block;width:24px;height:24px;margin:0 auto;padding:0;color:rgba(0,0,0,.65);line-height:24px;background:transparent;border-radius:2px;-webkit-transition:all .3s;transition:all .3s}.ant-fullcalendar-value:hover{background:#e6f7ff;cursor:pointer}.ant-fullcalendar-value:active{color:#fff;background:#1890ff}.ant-fullcalendar-month-panel-cell .ant-fullcalendar-value{width:48px}.ant-fullcalendar-month-panel-current-cell .ant-fullcalendar-value,.ant-fullcalendar-today .ant-fullcalendar-value{-webkit-box-shadow:0 0 0 1px #1890ff inset;box-shadow:inset 0 0 0 1px #1890ff}.ant-fullcalendar-month-panel-selected-cell .ant-fullcalendar-value,.ant-fullcalendar-selected-day .ant-fullcalendar-value{color:#fff;background:#1890ff}.ant-fullcalendar-disabled-cell-first-of-row .ant-fullcalendar-value{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-fullcalendar-disabled-cell-last-of-row .ant-fullcalendar-value{border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-fullcalendar-last-month-cell .ant-fullcalendar-value,.ant-fullcalendar-next-month-btn-day .ant-fullcalendar-value{color:rgba(0,0,0,.25)}.ant-fullcalendar-month-panel-table{width:100%;table-layout:fixed;border-collapse:separate}.ant-fullcalendar-content{position:absolute;bottom:-9px;left:0;width:100%}.ant-fullcalendar-fullscreen{border-top:0}.ant-fullcalendar-fullscreen .ant-fullcalendar-table{table-layout:fixed}.ant-fullcalendar-fullscreen .ant-fullcalendar-header .ant-radio-group{margin-left:16px}.ant-fullcalendar-fullscreen .ant-fullcalendar-header label.ant-radio-button{height:32px;line-height:30px}.ant-fullcalendar-fullscreen .ant-fullcalendar-date,.ant-fullcalendar-fullscreen .ant-fullcalendar-month{display:block;height:116px;margin:0 4px;padding:4px 8px;color:rgba(0,0,0,.65);text-align:left;border-top:2px solid #e8e8e8;-webkit-transition:background .3s;transition:background .3s}.ant-fullcalendar-fullscreen .ant-fullcalendar-date:hover,.ant-fullcalendar-fullscreen .ant-fullcalendar-month:hover{background:#e6f7ff;cursor:pointer}.ant-fullcalendar-fullscreen .ant-fullcalendar-date:active,.ant-fullcalendar-fullscreen .ant-fullcalendar-month:active{background:#bae7ff}.ant-fullcalendar-fullscreen .ant-fullcalendar-column-header{padding-right:12px;padding-bottom:5px;text-align:right}.ant-fullcalendar-fullscreen .ant-fullcalendar-value{width:auto;text-align:right;background:transparent}.ant-fullcalendar-fullscreen .ant-fullcalendar-today .ant-fullcalendar-value{color:rgba(0,0,0,.65)}.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-current-cell .ant-fullcalendar-month,.ant-fullcalendar-fullscreen .ant-fullcalendar-today .ant-fullcalendar-date{background:transparent;border-top-color:#1890ff}.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-current-cell .ant-fullcalendar-value,.ant-fullcalendar-fullscreen .ant-fullcalendar-today .ant-fullcalendar-value{-webkit-box-shadow:none;box-shadow:none}.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-selected-cell .ant-fullcalendar-month,.ant-fullcalendar-fullscreen .ant-fullcalendar-selected-day .ant-fullcalendar-date{background:#e6f7ff}.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-selected-cell .ant-fullcalendar-value,.ant-fullcalendar-fullscreen .ant-fullcalendar-selected-day .ant-fullcalendar-value{color:#1890ff}.ant-fullcalendar-fullscreen .ant-fullcalendar-last-month-cell .ant-fullcalendar-date,.ant-fullcalendar-fullscreen .ant-fullcalendar-next-month-btn-day .ant-fullcalendar-date{color:rgba(0,0,0,.25)}.ant-fullcalendar-fullscreen .ant-fullcalendar-content{position:static;width:auto;height:88px;overflow-y:auto}.ant-fullcalendar-disabled-cell .ant-fullcalendar-date,.ant-fullcalendar-disabled-cell .ant-fullcalendar-date:hover{cursor:not-allowed}.ant-fullcalendar-disabled-cell:not(.ant-fullcalendar-today) .ant-fullcalendar-date,.ant-fullcalendar-disabled-cell:not(.ant-fullcalendar-today) .ant-fullcalendar-date:hover{background:transparent}.ant-fullcalendar-disabled-cell .ant-fullcalendar-value{width:auto;color:rgba(0,0,0,.25);border-radius:0;cursor:not-allowed}.ant-card{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;background:#fff;border-radius:2px;-webkit-transition:all .3s;transition:all .3s}.ant-card-hoverable{cursor:pointer}.ant-card-hoverable:hover{border-color:rgba(0,0,0,.09);-webkit-box-shadow:0 2px 8px rgba(0,0,0,.09);box-shadow:0 2px 8px rgba(0,0,0,.09)}.ant-card-bordered{border:1px solid #e8e8e8}.ant-card-head{min-height:48px;margin-bottom:-1px;padding:0 24px;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;background:transparent;border-bottom:1px solid #e8e8e8;border-radius:2px 2px 0 0;zoom:1}.ant-card-head:after,.ant-card-head:before{display:table;content:""}.ant-card-head:after{clear:both}.ant-card-head-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ant-card-head-title{display:inline-block;-webkit-box-flex:1;-ms-flex:1;flex:1;padding:16px 0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-card-head .ant-tabs{clear:both;margin-bottom:-17px;color:rgba(0,0,0,.65);font-weight:400;font-size:14px}.ant-card-head .ant-tabs-bar{border-bottom:1px solid #e8e8e8}.ant-card-extra{float:right;margin-left:auto;padding:16px 0;color:rgba(0,0,0,.65);font-weight:400;font-size:14px}.ant-card-body{padding:24px;zoom:1}.ant-card-body:after,.ant-card-body:before{display:table;content:""}.ant-card-body:after{clear:both}.ant-card-contain-grid:not(.ant-card-loading) .ant-card-body{margin:-1px 0 0 -1px;padding:0}.ant-card-grid{float:left;width:33.33%;padding:24px;border:0;border-radius:0;-webkit-box-shadow:1px 0 0 0 #e8e8e8,0 1px 0 0 #e8e8e8,1px 1px 0 0 #e8e8e8,1px 0 0 0 #e8e8e8 inset,0 1px 0 0 #e8e8e8 inset;box-shadow:1px 0 0 0 #e8e8e8,0 1px 0 0 #e8e8e8,1px 1px 0 0 #e8e8e8,inset 1px 0 0 0 #e8e8e8,inset 0 1px 0 0 #e8e8e8;-webkit-transition:all .3s;transition:all .3s}.ant-card-grid-hoverable:hover{position:relative;z-index:1;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-card-contain-tabs>.ant-card-head .ant-card-head-title{min-height:32px;padding-bottom:0}.ant-card-contain-tabs>.ant-card-head .ant-card-extra{padding-bottom:0}.ant-card-cover>*{display:block;width:100%}.ant-card-cover img{border-radius:2px 2px 0 0}.ant-card-actions{margin:0;padding:0;list-style:none;background:#fafafa;border-top:1px solid #e8e8e8;zoom:1}.ant-card-actions:after,.ant-card-actions:before{display:table;content:""}.ant-card-actions:after{clear:both}.ant-card-actions>li{float:left;margin:12px 0;color:rgba(0,0,0,.45);text-align:center}.ant-card-actions>li>span{position:relative;display:block;min-width:32px;font-size:14px;line-height:22px;cursor:pointer}.ant-card-actions>li>span:hover{color:#1890ff;-webkit-transition:color .3s;transition:color .3s}.ant-card-actions>li>span>.anticon,.ant-card-actions>li>span a:not(.ant-btn){display:inline-block;width:100%;color:rgba(0,0,0,.45);line-height:22px;-webkit-transition:color .3s;transition:color .3s}.ant-card-actions>li>span>.anticon:hover,.ant-card-actions>li>span a:not(.ant-btn):hover{color:#1890ff}.ant-card-actions>li>span>.anticon{font-size:16px;line-height:22px}.ant-card-actions>li:not(:last-child){border-right:1px solid #e8e8e8}.ant-card-type-inner .ant-card-head{padding:0 24px;background:#fafafa}.ant-card-type-inner .ant-card-head-title{padding:12px 0;font-size:14px}.ant-card-type-inner .ant-card-body{padding:16px 24px}.ant-card-type-inner .ant-card-extra{padding:13.5px 0}.ant-card-meta{margin:-4px 0;zoom:1}.ant-card-meta:after,.ant-card-meta:before{display:table;content:""}.ant-card-meta:after{clear:both}.ant-card-meta-avatar{float:left;padding-right:16px}.ant-card-meta-detail{overflow:hidden}.ant-card-meta-detail>div:not(:last-child){margin-bottom:8px}.ant-card-meta-title{overflow:hidden;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;white-space:nowrap;text-overflow:ellipsis}.ant-card-meta-description{color:rgba(0,0,0,.45)}.ant-card-loading{overflow:hidden}.ant-card-loading .ant-card-body{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-card-loading-content p{margin:0}.ant-card-loading-block{height:14px;margin:4px 0;background:-webkit-gradient(linear,left top,right top,from(rgba(207,216,220,.2)),color-stop(rgba(207,216,220,.4)),to(rgba(207,216,220,.2)));background:linear-gradient(90deg,rgba(207,216,220,.2),rgba(207,216,220,.4),rgba(207,216,220,.2));background-size:600% 600%;border-radius:2px;-webkit-animation:card-loading 1.4s ease infinite;animation:card-loading 1.4s ease infinite}@-webkit-keyframes card-loading{0%,to{background-position:0 50%}50%{background-position:100% 50%}}@keyframes card-loading{0%,to{background-position:0 50%}50%{background-position:100% 50%}}.ant-card-small>.ant-card-head{min-height:36px;padding:0 12px;font-size:14px}.ant-card-small>.ant-card-head>.ant-card-head-wrapper>.ant-card-head-title{padding:8px 0}.ant-card-small>.ant-card-head>.ant-card-head-wrapper>.ant-card-extra{padding:8px 0;font-size:14px}.ant-card-small>.ant-card-body{padding:12px}.ant-carousel{margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.ant-carousel,.ant-carousel .slick-slider{-webkit-box-sizing:border-box;box-sizing:border-box}.ant-carousel .slick-slider{position:relative;display:block;-webkit-touch-callout:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.ant-carousel .slick-list{position:relative;display:block;margin:0;padding:0;overflow:hidden}.ant-carousel .slick-list:focus{outline:none}.ant-carousel .slick-list.dragging{cursor:pointer}.ant-carousel .slick-list .slick-slide{pointer-events:none}.ant-carousel .slick-list .slick-slide input.ant-checkbox-input,.ant-carousel .slick-list .slick-slide input.ant-radio-input{visibility:hidden}.ant-carousel .slick-list .slick-slide.slick-active{pointer-events:auto}.ant-carousel .slick-list .slick-slide.slick-active input.ant-checkbox-input,.ant-carousel .slick-list .slick-slide.slick-active input.ant-radio-input{visibility:visible}.ant-carousel .slick-slider .slick-list,.ant-carousel .slick-slider .slick-track{-webkit-transform:translateZ(0);transform:translateZ(0)}.ant-carousel .slick-track{position:relative;top:0;left:0;display:block}.ant-carousel .slick-track:after,.ant-carousel .slick-track:before{display:table;content:""}.ant-carousel .slick-track:after{clear:both}.slick-loading .ant-carousel .slick-track{visibility:hidden}.ant-carousel .slick-slide{display:none;float:left;height:100%;min-height:1px}[dir=rtl] .ant-carousel .slick-slide{float:right}.ant-carousel .slick-slide img{display:block}.ant-carousel .slick-slide.slick-loading img{display:none}.ant-carousel .slick-slide.dragging img{pointer-events:none}.ant-carousel .slick-initialized .slick-slide{display:block}.ant-carousel .slick-loading .slick-slide{visibility:hidden}.ant-carousel .slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.ant-carousel .slick-arrow.slick-hidden{display:none}.ant-carousel .slick-next,.ant-carousel .slick-prev{position:absolute;top:50%;display:block;width:20px;height:20px;margin-top:-10px;padding:0;font-size:0;line-height:0;border:0;cursor:pointer}.ant-carousel .slick-next,.ant-carousel .slick-next:focus,.ant-carousel .slick-next:hover,.ant-carousel .slick-prev,.ant-carousel .slick-prev:focus,.ant-carousel .slick-prev:hover{color:transparent;background:transparent;outline:none}.ant-carousel .slick-next:focus:before,.ant-carousel .slick-next:hover:before,.ant-carousel .slick-prev:focus:before,.ant-carousel .slick-prev:hover:before{opacity:1}.ant-carousel .slick-next.slick-disabled:before,.ant-carousel .slick-prev.slick-disabled:before{opacity:.25}.ant-carousel .slick-prev{left:-25px}.ant-carousel .slick-prev:before{content:"←"}.ant-carousel .slick-next{right:-25px}.ant-carousel .slick-next:before{content:"→"}.ant-carousel .slick-dots{position:absolute;display:block;width:100%;height:3px;margin:0;padding:0;text-align:center;list-style:none}.ant-carousel .slick-dots-bottom{bottom:12px}.ant-carousel .slick-dots-top{top:12px}.ant-carousel .slick-dots li{position:relative;display:inline-block;margin:0 2px;padding:0;text-align:center;vertical-align:top}.ant-carousel .slick-dots li button{display:block;width:16px;height:3px;padding:0;color:transparent;font-size:0;background:#fff;border:0;border-radius:1px;outline:none;cursor:pointer;opacity:.3;-webkit-transition:all .5s;transition:all .5s}.ant-carousel .slick-dots li button:focus,.ant-carousel .slick-dots li button:hover{opacity:.75}.ant-carousel .slick-dots li.slick-active button{width:24px;background:#fff;opacity:1}.ant-carousel .slick-dots li.slick-active button:focus,.ant-carousel .slick-dots li.slick-active button:hover{opacity:1}.ant-carousel-vertical .slick-dots{top:50%;bottom:auto;width:3px;height:auto;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ant-carousel-vertical .slick-dots-left{left:12px}.ant-carousel-vertical .slick-dots-right{right:12px}.ant-carousel-vertical .slick-dots li{margin:0 2px;vertical-align:baseline}.ant-carousel-vertical .slick-dots li button{width:3px;height:16px}.ant-carousel-vertical .slick-dots li.slick-active button{width:3px;height:24px}.ant-cascader{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.ant-cascader-input.ant-input{position:static;width:100%;padding-right:24px;background-color:transparent!important;cursor:pointer}.ant-cascader-picker-show-search .ant-cascader-input.ant-input{position:relative}.ant-cascader-picker{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;background-color:#fff;border-radius:4px;outline:0;cursor:pointer;-webkit-transition:color .3s;transition:color .3s}.ant-cascader-picker-with-value .ant-cascader-picker-label{color:transparent}.ant-cascader-picker-disabled{color:rgba(0,0,0,.25);background:#f5f5f5;cursor:not-allowed}.ant-cascader-picker-disabled .ant-cascader-input{cursor:not-allowed}.ant-cascader-picker:focus .ant-cascader-input{border-color:#40a9ff;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-cascader-picker-show-search.ant-cascader-picker-focused{color:rgba(0,0,0,.25)}.ant-cascader-picker-label{position:absolute;top:50%;left:0;width:100%;height:20px;margin-top:-10px;padding:0 20px 0 12px;overflow:hidden;line-height:20px;white-space:nowrap;text-overflow:ellipsis}.ant-cascader-picker-clear{position:absolute;top:50%;right:12px;z-index:2;width:12px;height:12px;margin-top:-6px;color:rgba(0,0,0,.25);font-size:12px;line-height:12px;background:#fff;cursor:pointer;opacity:0;-webkit-transition:color .3s ease,opacity .15s ease;transition:color .3s ease,opacity .15s ease}.ant-cascader-picker-clear:hover{color:rgba(0,0,0,.45)}.ant-cascader-picker:hover .ant-cascader-picker-clear{opacity:1}.ant-cascader-picker-arrow{position:absolute;top:50%;right:12px;z-index:1;width:12px;height:12px;margin-top:-6px;color:rgba(0,0,0,.25);font-size:12px;line-height:12px;-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.ant-cascader-picker-arrow.ant-cascader-picker-arrow-expand{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.ant-cascader-picker-label:hover+.ant-cascader-input{border-color:#40a9ff;border-right-width:1px!important}.ant-cascader-picker-small .ant-cascader-picker-arrow,.ant-cascader-picker-small .ant-cascader-picker-clear{right:8px}.ant-cascader-menus{position:absolute;z-index:1050;font-size:14px;white-space:nowrap;background:#fff;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-cascader-menus ol,.ant-cascader-menus ul{margin:0;list-style:none}.ant-cascader-menus-empty,.ant-cascader-menus-hidden{display:none}.ant-cascader-menus.slide-up-appear.slide-up-appear-active.ant-cascader-menus-placement-bottomLeft,.ant-cascader-menus.slide-up-enter.slide-up-enter-active.ant-cascader-menus-placement-bottomLeft{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn}.ant-cascader-menus.slide-up-appear.slide-up-appear-active.ant-cascader-menus-placement-topLeft,.ant-cascader-menus.slide-up-enter.slide-up-enter-active.ant-cascader-menus-placement-topLeft{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn}.ant-cascader-menus.slide-up-leave.slide-up-leave-active.ant-cascader-menus-placement-bottomLeft{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut}.ant-cascader-menus.slide-up-leave.slide-up-leave-active.ant-cascader-menus-placement-topLeft{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut}.ant-cascader-menu{display:inline-block;min-width:111px;height:180px;margin:0;padding:4px 0;overflow:auto;vertical-align:top;list-style:none;border-right:1px solid #e8e8e8;-ms-overflow-style:-ms-autohiding-scrollbar}.ant-cascader-menu:first-child{border-radius:4px 0 0 4px}.ant-cascader-menu:last-child{margin-right:-1px;border-right-color:transparent;border-radius:0 4px 4px 0}.ant-cascader-menu:only-child{border-radius:4px}.ant-cascader-menu-item{padding:5px 12px;line-height:22px;white-space:nowrap;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-cascader-menu-item:hover{background:#e6f7ff}.ant-cascader-menu-item-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-cascader-menu-item-disabled:hover{background:transparent}.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled),.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled):hover{font-weight:600;background-color:#fafafa}.ant-cascader-menu-item-expand{position:relative;padding-right:24px}.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,.ant-cascader-menu-item-loading-icon{display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg);position:absolute;right:12px;color:rgba(0,0,0,.45)}:root .ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,:root .ant-cascader-menu-item-loading-icon{font-size:12px}.ant-cascader-menu-item-disabled.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,.ant-cascader-menu-item-disabled.ant-cascader-menu-item-loading-icon{color:rgba(0,0,0,.25)}.ant-cascader-menu-item .ant-cascader-menu-item-keyword{color:#f5222d}@-webkit-keyframes antCheckboxEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}@keyframes antCheckboxEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}.ant-checkbox{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;top:-.09em;display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;outline:none;cursor:pointer}.ant-checkbox-input:focus+.ant-checkbox-inner,.ant-checkbox-wrapper:hover .ant-checkbox-inner,.ant-checkbox:hover .ant-checkbox-inner{border-color:#1890ff}.ant-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:2px;visibility:hidden;-webkit-animation:antCheckboxEffect .36s ease-in-out;animation:antCheckboxEffect .36s ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;content:""}.ant-checkbox-wrapper:hover .ant-checkbox:after,.ant-checkbox:hover:after{visibility:visible}.ant-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;-webkit-transition:all .3s;transition:all .3s}.ant-checkbox-inner:after{position:absolute;top:50%;left:22%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(0) translate(-50%,-50%);transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;-webkit-transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-checkbox-checked .ant-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(1) translate(-50%,-50%);transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;-webkit-transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-checkbox-checked .ant-checkbox-inner{background-color:#1890ff;border-color:#1890ff}.ant-checkbox-disabled{cursor:not-allowed}.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after{border-color:rgba(0,0,0,.25);-webkit-animation-name:none;animation-name:none}.ant-checkbox-disabled .ant-checkbox-input{cursor:not-allowed}.ant-checkbox-disabled .ant-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-checkbox-disabled .ant-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;-webkit-animation-name:none;animation-name:none}.ant-checkbox-disabled+span{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-checkbox-disabled:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox-disabled:after{visibility:hidden}.ant-checkbox-wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block;line-height:unset;cursor:pointer}.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled{cursor:not-allowed}.ant-checkbox-wrapper+.ant-checkbox-wrapper{margin-left:8px}.ant-checkbox+span{padding-right:8px;padding-left:8px}.ant-checkbox-group{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block}.ant-checkbox-group-item{display:inline-block;margin-right:8px}.ant-checkbox-group-item:last-child{margin-right:0}.ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:0}.ant-checkbox-indeterminate .ant-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-checkbox-indeterminate .ant-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#1890ff;border:0;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after{background-color:rgba(0,0,0,.25);border-color:rgba(0,0,0,.25)}.ant-collapse{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";background-color:#fafafa;border:1px solid #d9d9d9;border-bottom:0;border-radius:4px}.ant-collapse>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse>.ant-collapse-item:last-child,.ant-collapse>.ant-collapse-item:last-child>.ant-collapse-header{border-radius:0 0 4px 4px}.ant-collapse>.ant-collapse-item>.ant-collapse-header{position:relative;padding:12px 16px;padding-left:40px;color:rgba(0,0,0,.85);line-height:22px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:50%;left:16px;display:inline-block;font-size:12px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow>*{line-height:1}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{display:inline-block}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow:before{display:none}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow .ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow-icon{display:block}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{-webkit-transition:-webkit-transform .24s;transition:-webkit-transform .24s;transition:transform .24s;transition:transform .24s,-webkit-transform .24s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{float:right}.ant-collapse>.ant-collapse-item>.ant-collapse-header:focus{outline:none}.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-left:12px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header{padding:12px 16px;padding-right:40px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{right:16px;left:auto}.ant-collapse-anim-active{-webkit-transition:height .2s cubic-bezier(.215,.61,.355,1);transition:height .2s cubic-bezier(.215,.61,.355,1)}.ant-collapse-content{overflow:hidden;color:rgba(0,0,0,.65);background-color:#fff;border-top:1px solid #d9d9d9}.ant-collapse-content>.ant-collapse-content-box{padding:16px}.ant-collapse-content-inactive{display:none}.ant-collapse-item:last-child>.ant-collapse-content{border-radius:0 0 4px 4px}.ant-collapse-borderless{background-color:#fafafa;border:0}.ant-collapse-borderless>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse-borderless>.ant-collapse-item:last-child,.ant-collapse-borderless>.ant-collapse-item:last-child .ant-collapse-header{border-radius:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:4px}.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header,.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header>.arrow{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-comment{position:relative}.ant-comment-inner{display:-webkit-box;display:-ms-flexbox;display:flex;padding:16px 0}.ant-comment-avatar{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-right:12px;cursor:pointer}.ant-comment-avatar img{width:32px;height:32px;border-radius:50%}.ant-comment-content{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-width:1px;font-size:14px;word-wrap:break-word}.ant-comment-content-author{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:4px;font-size:14px}.ant-comment-content-author>a,.ant-comment-content-author>span{padding-right:8px;font-size:12px;line-height:18px}.ant-comment-content-author-name{color:rgba(0,0,0,.45);font-size:14px;-webkit-transition:color .3s;transition:color .3s}.ant-comment-content-author-name>*,.ant-comment-content-author-name>:hover{color:rgba(0,0,0,.45)}.ant-comment-content-author-time{color:#ccc;white-space:nowrap;cursor:auto}.ant-comment-content-detail p{white-space:pre-wrap}.ant-comment-actions{margin-top:12px;padding-left:0}.ant-comment-actions>li{display:inline-block;color:rgba(0,0,0,.45)}.ant-comment-actions>li>span{padding-right:10px;color:rgba(0,0,0,.45);font-size:12px;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-comment-actions>li>span:hover{color:#595959}.ant-comment-nested{margin-left:44px}.ant-calendar-picker-container{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;z-index:1050;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.ant-calendar-picker-container.slide-up-appear.slide-up-appear-active.ant-calendar-picker-container-placement-topLeft,.ant-calendar-picker-container.slide-up-appear.slide-up-appear-active.ant-calendar-picker-container-placement-topRight,.ant-calendar-picker-container.slide-up-enter.slide-up-enter-active.ant-calendar-picker-container-placement-topLeft,.ant-calendar-picker-container.slide-up-enter.slide-up-enter-active.ant-calendar-picker-container-placement-topRight{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn}.ant-calendar-picker-container.slide-up-appear.slide-up-appear-active.ant-calendar-picker-container-placement-bottomLeft,.ant-calendar-picker-container.slide-up-appear.slide-up-appear-active.ant-calendar-picker-container-placement-bottomRight,.ant-calendar-picker-container.slide-up-enter.slide-up-enter-active.ant-calendar-picker-container-placement-bottomLeft,.ant-calendar-picker-container.slide-up-enter.slide-up-enter-active.ant-calendar-picker-container-placement-bottomRight{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn}.ant-calendar-picker-container.slide-up-leave.slide-up-leave-active.ant-calendar-picker-container-placement-topLeft,.ant-calendar-picker-container.slide-up-leave.slide-up-leave-active.ant-calendar-picker-container-placement-topRight{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut}.ant-calendar-picker-container.slide-up-leave.slide-up-leave-active.ant-calendar-picker-container-placement-bottomLeft,.ant-calendar-picker-container.slide-up-leave.slide-up-leave-active.ant-calendar-picker-container-placement-bottomRight{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut}.ant-calendar-picker{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;outline:none;cursor:text;-webkit-transition:opacity .3s;transition:opacity .3s}.ant-calendar-picker-input{outline:none}.ant-calendar-picker-input.ant-input{line-height:1.5}.ant-calendar-picker-input.ant-input-sm{padding-top:0;padding-bottom:0}.ant-calendar-picker:hover .ant-calendar-picker-input:not(.ant-input-disabled){border-color:#40a9ff}.ant-calendar-picker:focus .ant-calendar-picker-input:not(.ant-input-disabled){border-color:#40a9ff;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-calendar-picker-clear,.ant-calendar-picker-icon{position:absolute;top:50%;right:12px;z-index:1;width:14px;height:14px;margin-top:-7px;font-size:12px;line-height:14px;-webkit-transition:all .3s;transition:all .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-calendar-picker-clear{z-index:2;color:rgba(0,0,0,.25);font-size:14px;background:#fff;cursor:pointer;opacity:0;pointer-events:none}.ant-calendar-picker-clear:hover{color:rgba(0,0,0,.45)}.ant-calendar-picker:hover .ant-calendar-picker-clear{opacity:1;pointer-events:auto}.ant-calendar-picker-icon{display:inline-block;color:rgba(0,0,0,.25);font-size:14px;line-height:1}.ant-input-disabled+.ant-calendar-picker-icon{cursor:not-allowed}.ant-calendar-picker-small .ant-calendar-picker-clear,.ant-calendar-picker-small .ant-calendar-picker-icon{right:8px}.ant-calendar{position:relative;width:280px;font-size:14px;line-height:1.5;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #fff;border-radius:4px;outline:none;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-calendar-input-wrap{height:34px;padding:6px 10px;border-bottom:1px solid #e8e8e8}.ant-calendar-input{width:100%;height:22px;color:rgba(0,0,0,.65);background:#fff;border:0;outline:0;cursor:auto}.ant-calendar-input::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-calendar-input:-ms-input-placeholder{color:#bfbfbf}.ant-calendar-input::-webkit-input-placeholder{color:#bfbfbf}.ant-calendar-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-calendar-input:-ms-input-placeholder{text-overflow:ellipsis}.ant-calendar-input:placeholder-shown{text-overflow:ellipsis}.ant-calendar-week-number{width:286px}.ant-calendar-week-number-cell{text-align:center}.ant-calendar-header{height:40px;line-height:40px;text-align:center;border-bottom:1px solid #e8e8e8;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-calendar-header a:hover{color:#40a9ff}.ant-calendar-header .ant-calendar-century-select,.ant-calendar-header .ant-calendar-decade-select,.ant-calendar-header .ant-calendar-month-select,.ant-calendar-header .ant-calendar-year-select{display:inline-block;padding:0 2px;color:rgba(0,0,0,.85);font-weight:500;line-height:40px}.ant-calendar-header .ant-calendar-century-select-arrow,.ant-calendar-header .ant-calendar-decade-select-arrow,.ant-calendar-header .ant-calendar-month-select-arrow,.ant-calendar-header .ant-calendar-year-select-arrow{display:none}.ant-calendar-header .ant-calendar-next-century-btn,.ant-calendar-header .ant-calendar-next-decade-btn,.ant-calendar-header .ant-calendar-next-month-btn,.ant-calendar-header .ant-calendar-next-year-btn,.ant-calendar-header .ant-calendar-prev-century-btn,.ant-calendar-header .ant-calendar-prev-decade-btn,.ant-calendar-header .ant-calendar-prev-month-btn,.ant-calendar-header .ant-calendar-prev-year-btn{position:absolute;top:0;display:inline-block;padding:0 5px;color:rgba(0,0,0,.45);font-size:16px;font-family:Arial,Hiragino Sans GB,Microsoft Yahei,"Microsoft Sans Serif",sans-serif;line-height:40px}.ant-calendar-header .ant-calendar-prev-century-btn,.ant-calendar-header .ant-calendar-prev-decade-btn,.ant-calendar-header .ant-calendar-prev-year-btn{left:7px;height:100%}.ant-calendar-header .ant-calendar-prev-century-btn:after,.ant-calendar-header .ant-calendar-prev-century-btn:before,.ant-calendar-header .ant-calendar-prev-decade-btn:after,.ant-calendar-header .ant-calendar-prev-decade-btn:before,.ant-calendar-header .ant-calendar-prev-year-btn:after,.ant-calendar-header .ant-calendar-prev-year-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-header .ant-calendar-prev-century-btn:hover:after,.ant-calendar-header .ant-calendar-prev-century-btn:hover:before,.ant-calendar-header .ant-calendar-prev-decade-btn:hover:after,.ant-calendar-header .ant-calendar-prev-decade-btn:hover:before,.ant-calendar-header .ant-calendar-prev-year-btn:hover:after,.ant-calendar-header .ant-calendar-prev-year-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-header .ant-calendar-prev-century-btn:after,.ant-calendar-header .ant-calendar-prev-decade-btn:after,.ant-calendar-header .ant-calendar-prev-year-btn:after{display:none;position:relative;left:-3px;display:inline-block}.ant-calendar-header .ant-calendar-next-century-btn,.ant-calendar-header .ant-calendar-next-decade-btn,.ant-calendar-header .ant-calendar-next-year-btn{right:7px;height:100%}.ant-calendar-header .ant-calendar-next-century-btn:after,.ant-calendar-header .ant-calendar-next-century-btn:before,.ant-calendar-header .ant-calendar-next-decade-btn:after,.ant-calendar-header .ant-calendar-next-decade-btn:before,.ant-calendar-header .ant-calendar-next-year-btn:after,.ant-calendar-header .ant-calendar-next-year-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-header .ant-calendar-next-century-btn:hover:after,.ant-calendar-header .ant-calendar-next-century-btn:hover:before,.ant-calendar-header .ant-calendar-next-decade-btn:hover:after,.ant-calendar-header .ant-calendar-next-decade-btn:hover:before,.ant-calendar-header .ant-calendar-next-year-btn:hover:after,.ant-calendar-header .ant-calendar-next-year-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-header .ant-calendar-next-century-btn:after,.ant-calendar-header .ant-calendar-next-decade-btn:after,.ant-calendar-header .ant-calendar-next-year-btn:after{display:none}.ant-calendar-header .ant-calendar-next-century-btn:after,.ant-calendar-header .ant-calendar-next-century-btn:before,.ant-calendar-header .ant-calendar-next-decade-btn:after,.ant-calendar-header .ant-calendar-next-decade-btn:before,.ant-calendar-header .ant-calendar-next-year-btn:after,.ant-calendar-header .ant-calendar-next-year-btn:before{-webkit-transform:rotate(135deg) scale(.8);transform:rotate(135deg) scale(.8)}.ant-calendar-header .ant-calendar-next-century-btn:before,.ant-calendar-header .ant-calendar-next-decade-btn:before,.ant-calendar-header .ant-calendar-next-year-btn:before{position:relative;left:3px}.ant-calendar-header .ant-calendar-next-century-btn:after,.ant-calendar-header .ant-calendar-next-decade-btn:after,.ant-calendar-header .ant-calendar-next-year-btn:after{display:inline-block}.ant-calendar-header .ant-calendar-prev-month-btn{left:29px;height:100%}.ant-calendar-header .ant-calendar-prev-month-btn:after,.ant-calendar-header .ant-calendar-prev-month-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-header .ant-calendar-prev-month-btn:hover:after,.ant-calendar-header .ant-calendar-prev-month-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-header .ant-calendar-prev-month-btn:after{display:none}.ant-calendar-header .ant-calendar-next-month-btn{right:29px;height:100%}.ant-calendar-header .ant-calendar-next-month-btn:after,.ant-calendar-header .ant-calendar-next-month-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-header .ant-calendar-next-month-btn:hover:after,.ant-calendar-header .ant-calendar-next-month-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-header .ant-calendar-next-month-btn:after{display:none}.ant-calendar-header .ant-calendar-next-month-btn:after,.ant-calendar-header .ant-calendar-next-month-btn:before{-webkit-transform:rotate(135deg) scale(.8);transform:rotate(135deg) scale(.8)}.ant-calendar-body{padding:8px 12px}.ant-calendar table{width:100%;max-width:100%;background-color:transparent;border-collapse:collapse}.ant-calendar table,.ant-calendar td,.ant-calendar th{text-align:center;border:0}.ant-calendar-calendar-table{margin-bottom:0;border-spacing:0}.ant-calendar-column-header{width:33px;padding:6px 0;line-height:18px;text-align:center}.ant-calendar-column-header .ant-calendar-column-header-inner{display:block;font-weight:400}.ant-calendar-week-number-header .ant-calendar-column-header-inner{display:none}.ant-calendar-cell{height:30px;padding:3px 0}.ant-calendar-date{display:block;width:24px;height:24px;margin:0 auto;padding:0;color:rgba(0,0,0,.65);line-height:22px;text-align:center;background:transparent;border:1px solid transparent;border-radius:2px;-webkit-transition:background .3s ease;transition:background .3s ease}.ant-calendar-date-panel{position:relative;outline:none}.ant-calendar-date:hover{background:#e6f7ff;cursor:pointer}.ant-calendar-date:active{color:#fff;background:#40a9ff}.ant-calendar-today .ant-calendar-date{color:#1890ff;font-weight:700;border-color:#1890ff}.ant-calendar-selected-day .ant-calendar-date{background:#bae7ff}.ant-calendar-last-month-cell .ant-calendar-date,.ant-calendar-last-month-cell .ant-calendar-date:hover,.ant-calendar-next-month-btn-day .ant-calendar-date,.ant-calendar-next-month-btn-day .ant-calendar-date:hover{color:rgba(0,0,0,.25);background:transparent;border-color:transparent}.ant-calendar-disabled-cell .ant-calendar-date{position:relative;width:auto;color:rgba(0,0,0,.25);background:#f5f5f5;border:1px solid transparent;border-radius:0;cursor:not-allowed}.ant-calendar-disabled-cell .ant-calendar-date:hover{background:#f5f5f5}.ant-calendar-disabled-cell.ant-calendar-selected-day .ant-calendar-date:before{position:absolute;top:-1px;left:5px;width:24px;height:24px;background:rgba(0,0,0,.1);border-radius:2px;content:""}.ant-calendar-disabled-cell.ant-calendar-today .ant-calendar-date{position:relative;padding-right:5px;padding-left:5px}.ant-calendar-disabled-cell.ant-calendar-today .ant-calendar-date:before{position:absolute;top:-1px;left:5px;width:24px;height:24px;border:1px solid rgba(0,0,0,.25);border-radius:2px;content:" "}.ant-calendar-disabled-cell-first-of-row .ant-calendar-date{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-calendar-disabled-cell-last-of-row .ant-calendar-date{border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-calendar-footer{padding:0 12px;line-height:38px;border-top:1px solid #e8e8e8}.ant-calendar-footer:empty{border-top:0}.ant-calendar-footer-btn{display:block;text-align:center}.ant-calendar-footer-extra{text-align:left}.ant-calendar .ant-calendar-clear-btn,.ant-calendar .ant-calendar-today-btn{display:inline-block;margin:0 0 0 8px;text-align:center}.ant-calendar .ant-calendar-clear-btn-disabled,.ant-calendar .ant-calendar-today-btn-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-calendar .ant-calendar-clear-btn:only-child,.ant-calendar .ant-calendar-today-btn:only-child{margin:0}.ant-calendar .ant-calendar-clear-btn{position:absolute;top:7px;right:5px;display:none;width:20px;height:20px;margin:0;overflow:hidden;line-height:20px;text-align:center;text-indent:-76px}.ant-calendar .ant-calendar-clear-btn:after{display:inline-block;width:20px;color:rgba(0,0,0,.25);font-size:14px;line-height:1;text-indent:43px;-webkit-transition:color .3s ease;transition:color .3s ease}.ant-calendar .ant-calendar-clear-btn:hover:after{color:rgba(0,0,0,.45)}.ant-calendar .ant-calendar-ok-btn{position:relative;display:inline-block;font-weight:400;white-space:nowrap;text-align:center;background-image:none;border:1px solid transparent;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.015);box-shadow:0 2px 0 rgba(0,0,0,.015);cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:manipulation;touch-action:manipulation;height:32px;padding:0 15px;color:#fff;background-color:#1890ff;border-color:#1890ff;text-shadow:0 -1px 0 rgba(0,0,0,.12);-webkit-box-shadow:0 2px 0 rgba(0,0,0,.045);box-shadow:0 2px 0 rgba(0,0,0,.045);height:24px;padding:0 7px;font-size:14px;border-radius:4px;line-height:22px}.ant-calendar .ant-calendar-ok-btn>.anticon{line-height:1}.ant-calendar .ant-calendar-ok-btn,.ant-calendar .ant-calendar-ok-btn:active,.ant-calendar .ant-calendar-ok-btn:focus{outline:0}.ant-calendar .ant-calendar-ok-btn:not([disabled]):hover{text-decoration:none}.ant-calendar .ant-calendar-ok-btn:not([disabled]):active{outline:0;-webkit-box-shadow:none;box-shadow:none}.ant-calendar .ant-calendar-ok-btn.disabled,.ant-calendar .ant-calendar-ok-btn[disabled]{cursor:not-allowed}.ant-calendar .ant-calendar-ok-btn.disabled>*,.ant-calendar .ant-calendar-ok-btn[disabled]>*{pointer-events:none}.ant-calendar .ant-calendar-ok-btn-lg{height:40px;padding:0 15px;font-size:16px;border-radius:4px}.ant-calendar .ant-calendar-ok-btn-sm{height:24px;padding:0 7px;font-size:14px;border-radius:4px}.ant-calendar .ant-calendar-ok-btn>a:only-child{color:currentColor}.ant-calendar .ant-calendar-ok-btn>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-calendar .ant-calendar-ok-btn:focus,.ant-calendar .ant-calendar-ok-btn:hover{color:#fff;background-color:#40a9ff;border-color:#40a9ff}.ant-calendar .ant-calendar-ok-btn:focus>a:only-child,.ant-calendar .ant-calendar-ok-btn:hover>a:only-child{color:currentColor}.ant-calendar .ant-calendar-ok-btn:focus>a:only-child:after,.ant-calendar .ant-calendar-ok-btn:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-calendar .ant-calendar-ok-btn.active,.ant-calendar .ant-calendar-ok-btn:active{color:#fff;background-color:#096dd9;border-color:#096dd9}.ant-calendar .ant-calendar-ok-btn.active>a:only-child,.ant-calendar .ant-calendar-ok-btn:active>a:only-child{color:currentColor}.ant-calendar .ant-calendar-ok-btn.active>a:only-child:after,.ant-calendar .ant-calendar-ok-btn:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-calendar .ant-calendar-ok-btn-disabled,.ant-calendar .ant-calendar-ok-btn-disabled.active,.ant-calendar .ant-calendar-ok-btn-disabled:active,.ant-calendar .ant-calendar-ok-btn-disabled:focus,.ant-calendar .ant-calendar-ok-btn-disabled:hover,.ant-calendar .ant-calendar-ok-btn.disabled,.ant-calendar .ant-calendar-ok-btn.disabled.active,.ant-calendar .ant-calendar-ok-btn.disabled:active,.ant-calendar .ant-calendar-ok-btn.disabled:focus,.ant-calendar .ant-calendar-ok-btn.disabled:hover,.ant-calendar .ant-calendar-ok-btn[disabled],.ant-calendar .ant-calendar-ok-btn[disabled].active,.ant-calendar .ant-calendar-ok-btn[disabled]:active,.ant-calendar .ant-calendar-ok-btn[disabled]:focus,.ant-calendar .ant-calendar-ok-btn[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-calendar .ant-calendar-ok-btn-disabled.active>a:only-child,.ant-calendar .ant-calendar-ok-btn-disabled:active>a:only-child,.ant-calendar .ant-calendar-ok-btn-disabled:focus>a:only-child,.ant-calendar .ant-calendar-ok-btn-disabled:hover>a:only-child,.ant-calendar .ant-calendar-ok-btn-disabled>a:only-child,.ant-calendar .ant-calendar-ok-btn.disabled.active>a:only-child,.ant-calendar .ant-calendar-ok-btn.disabled:active>a:only-child,.ant-calendar .ant-calendar-ok-btn.disabled:focus>a:only-child,.ant-calendar .ant-calendar-ok-btn.disabled:hover>a:only-child,.ant-calendar .ant-calendar-ok-btn.disabled>a:only-child,.ant-calendar .ant-calendar-ok-btn[disabled].active>a:only-child,.ant-calendar .ant-calendar-ok-btn[disabled]:active>a:only-child,.ant-calendar .ant-calendar-ok-btn[disabled]:focus>a:only-child,.ant-calendar .ant-calendar-ok-btn[disabled]:hover>a:only-child,.ant-calendar .ant-calendar-ok-btn[disabled]>a:only-child{color:currentColor}.ant-calendar .ant-calendar-ok-btn-disabled.active>a:only-child:after,.ant-calendar .ant-calendar-ok-btn-disabled:active>a:only-child:after,.ant-calendar .ant-calendar-ok-btn-disabled:focus>a:only-child:after,.ant-calendar .ant-calendar-ok-btn-disabled:hover>a:only-child:after,.ant-calendar .ant-calendar-ok-btn-disabled>a:only-child:after,.ant-calendar .ant-calendar-ok-btn.disabled.active>a:only-child:after,.ant-calendar .ant-calendar-ok-btn.disabled:active>a:only-child:after,.ant-calendar .ant-calendar-ok-btn.disabled:focus>a:only-child:after,.ant-calendar .ant-calendar-ok-btn.disabled:hover>a:only-child:after,.ant-calendar .ant-calendar-ok-btn.disabled>a:only-child:after,.ant-calendar .ant-calendar-ok-btn[disabled].active>a:only-child:after,.ant-calendar .ant-calendar-ok-btn[disabled]:active>a:only-child:after,.ant-calendar .ant-calendar-ok-btn[disabled]:focus>a:only-child:after,.ant-calendar .ant-calendar-ok-btn[disabled]:hover>a:only-child:after,.ant-calendar .ant-calendar-ok-btn[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-calendar-range-picker-input{width:44%;height:99%;text-align:center;background-color:transparent;border:0;outline:0}.ant-calendar-range-picker-input::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-calendar-range-picker-input:-ms-input-placeholder{color:#bfbfbf}.ant-calendar-range-picker-input::-webkit-input-placeholder{color:#bfbfbf}.ant-calendar-range-picker-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-calendar-range-picker-input:-ms-input-placeholder{text-overflow:ellipsis}.ant-calendar-range-picker-input:placeholder-shown{text-overflow:ellipsis}.ant-calendar-range-picker-input[disabled]{cursor:not-allowed}.ant-calendar-range-picker-separator{display:inline-block;min-width:10px;height:100%;color:rgba(0,0,0,.45);white-space:nowrap;text-align:center;vertical-align:top;pointer-events:none}.ant-input-disabled .ant-calendar-range-picker-separator{color:rgba(0,0,0,.25)}.ant-calendar-range{width:552px;overflow:hidden}.ant-calendar-range .ant-calendar-date-panel:after{display:block;clear:both;height:0;visibility:hidden;content:"."}.ant-calendar-range-part{position:relative;width:50%}.ant-calendar-range-left{float:left}.ant-calendar-range-left .ant-calendar-time-picker-inner{border-right:1px solid #e8e8e8}.ant-calendar-range-right{float:right}.ant-calendar-range-right .ant-calendar-time-picker-inner{border-left:1px solid #e8e8e8}.ant-calendar-range-middle{position:absolute;left:50%;z-index:1;height:34px;margin:1px 0 0 0;padding:0 200px 0 0;color:rgba(0,0,0,.45);line-height:34px;text-align:center;-webkit-transform:translateX(-50%);transform:translateX(-50%);pointer-events:none}.ant-calendar-range-right .ant-calendar-date-input-wrap{margin-left:-90px}.ant-calendar-range.ant-calendar-time .ant-calendar-range-middle{padding:0 10px 0 0;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.ant-calendar-range .ant-calendar-today :not(.ant-calendar-disabled-cell) :not(.ant-calendar-last-month-cell) :not(.ant-calendar-next-month-btn-day) .ant-calendar-date{color:#1890ff;background:#bae7ff;border-color:#1890ff}.ant-calendar-range .ant-calendar-selected-end-date .ant-calendar-date,.ant-calendar-range .ant-calendar-selected-start-date .ant-calendar-date{color:#fff;background:#1890ff;border:1px solid transparent}.ant-calendar-range .ant-calendar-selected-end-date .ant-calendar-date:hover,.ant-calendar-range .ant-calendar-selected-start-date .ant-calendar-date:hover{background:#1890ff}.ant-calendar-range.ant-calendar-time .ant-calendar-range-right .ant-calendar-date-input-wrap{margin-left:0}.ant-calendar-range .ant-calendar-input-wrap{position:relative;height:34px}.ant-calendar-range .ant-calendar-input,.ant-calendar-range .ant-calendar-time-picker-input{position:relative;display:inline-block;width:100%;height:32px;padding:4px 11px;color:rgba(0,0,0,.65);font-size:14px;line-height:1.5;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:4px;-webkit-transition:all .3s;transition:all .3s;height:24px;padding-right:0;padding-left:0;line-height:24px;border:0;-webkit-box-shadow:none;box-shadow:none}.ant-calendar-range .ant-calendar-input::-moz-placeholder,.ant-calendar-range .ant-calendar-time-picker-input::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-calendar-range .ant-calendar-input:-ms-input-placeholder,.ant-calendar-range .ant-calendar-time-picker-input:-ms-input-placeholder{color:#bfbfbf}.ant-calendar-range .ant-calendar-input::-webkit-input-placeholder,.ant-calendar-range .ant-calendar-time-picker-input::-webkit-input-placeholder{color:#bfbfbf}.ant-calendar-range .ant-calendar-input:-moz-placeholder-shown,.ant-calendar-range .ant-calendar-time-picker-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-calendar-range .ant-calendar-input:-ms-input-placeholder,.ant-calendar-range .ant-calendar-time-picker-input:-ms-input-placeholder{text-overflow:ellipsis}.ant-calendar-range .ant-calendar-input:placeholder-shown,.ant-calendar-range .ant-calendar-time-picker-input:placeholder-shown{text-overflow:ellipsis}.ant-calendar-range .ant-calendar-input:hover,.ant-calendar-range .ant-calendar-time-picker-input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-calendar-range .ant-calendar-input:focus,.ant-calendar-range .ant-calendar-time-picker-input:focus{border-color:#40a9ff;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-calendar-range .ant-calendar-input-disabled,.ant-calendar-range .ant-calendar-time-picker-input-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-calendar-range .ant-calendar-input-disabled:hover,.ant-calendar-range .ant-calendar-time-picker-input-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-calendar-range .ant-calendar-input[disabled],.ant-calendar-range .ant-calendar-time-picker-input[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-calendar-range .ant-calendar-input[disabled]:hover,.ant-calendar-range .ant-calendar-time-picker-input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}textarea.ant-calendar-range .ant-calendar-input,textarea.ant-calendar-range .ant-calendar-time-picker-input{max-width:100%;height:auto;min-height:32px;line-height:1.5;vertical-align:bottom;-webkit-transition:all .3s,height 0s;transition:all .3s,height 0s}.ant-calendar-range .ant-calendar-input-lg,.ant-calendar-range .ant-calendar-time-picker-input-lg{height:40px;padding:6px 11px;font-size:16px}.ant-calendar-range .ant-calendar-input-sm,.ant-calendar-range .ant-calendar-time-picker-input-sm{height:24px;padding:1px 7px}.ant-calendar-range .ant-calendar-input:focus,.ant-calendar-range .ant-calendar-time-picker-input:focus{-webkit-box-shadow:none;box-shadow:none}.ant-calendar-range .ant-calendar-time-picker-icon{display:none}.ant-calendar-range.ant-calendar-week-number{width:574px}.ant-calendar-range.ant-calendar-week-number .ant-calendar-range-part{width:286px}.ant-calendar-range .ant-calendar-decade-panel,.ant-calendar-range .ant-calendar-month-panel,.ant-calendar-range .ant-calendar-year-panel{top:34px}.ant-calendar-range .ant-calendar-month-panel .ant-calendar-year-panel{top:0}.ant-calendar-range .ant-calendar-decade-panel-table,.ant-calendar-range .ant-calendar-month-panel-table,.ant-calendar-range .ant-calendar-year-panel-table{height:208px}.ant-calendar-range .ant-calendar-in-range-cell{position:relative;border-radius:0}.ant-calendar-range .ant-calendar-in-range-cell>div{position:relative;z-index:1}.ant-calendar-range .ant-calendar-in-range-cell:before{position:absolute;top:4px;right:0;bottom:4px;left:0;display:block;background:#e6f7ff;border:0;border-radius:0;content:""}.ant-calendar-range .ant-calendar-footer-extra{float:left}div.ant-calendar-range-quick-selector{text-align:left}div.ant-calendar-range-quick-selector>a{margin-right:8px}.ant-calendar-range .ant-calendar-decade-panel-header,.ant-calendar-range .ant-calendar-header,.ant-calendar-range .ant-calendar-month-panel-header,.ant-calendar-range .ant-calendar-year-panel-header{border-bottom:0}.ant-calendar-range .ant-calendar-body,.ant-calendar-range .ant-calendar-decade-panel-body,.ant-calendar-range .ant-calendar-month-panel-body,.ant-calendar-range .ant-calendar-year-panel-body{border-top:1px solid #e8e8e8}.ant-calendar-range.ant-calendar-time .ant-calendar-time-picker{top:68px;z-index:2;width:100%;height:207px}.ant-calendar-range.ant-calendar-time .ant-calendar-time-picker-panel{height:267px;margin-top:-34px}.ant-calendar-range.ant-calendar-time .ant-calendar-time-picker-inner{height:100%;padding-top:40px;background:none}.ant-calendar-range.ant-calendar-time .ant-calendar-time-picker-combobox{display:inline-block;height:100%;background-color:#fff;border-top:1px solid #e8e8e8}.ant-calendar-range.ant-calendar-time .ant-calendar-time-picker-select{height:100%}.ant-calendar-range.ant-calendar-time .ant-calendar-time-picker-select ul{max-height:100%}.ant-calendar-range.ant-calendar-time .ant-calendar-footer .ant-calendar-time-picker-btn{margin-right:8px}.ant-calendar-range.ant-calendar-time .ant-calendar-today-btn{height:22px;margin:8px 12px;line-height:22px}.ant-calendar-range-with-ranges.ant-calendar-time .ant-calendar-time-picker{height:233px}.ant-calendar-range.ant-calendar-show-time-picker .ant-calendar-body{border-top-color:transparent}.ant-calendar-time-picker{position:absolute;top:40px;width:100%;background-color:#fff}.ant-calendar-time-picker-panel{position:absolute;z-index:1050;width:100%}.ant-calendar-time-picker-inner{position:relative;display:inline-block;width:100%;overflow:hidden;font-size:14px;line-height:1.5;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;outline:none}.ant-calendar-time-picker-column-1,.ant-calendar-time-picker-column-1 .ant-calendar-time-picker-select,.ant-calendar-time-picker-combobox{width:100%}.ant-calendar-time-picker-column-2 .ant-calendar-time-picker-select{width:50%}.ant-calendar-time-picker-column-3 .ant-calendar-time-picker-select{width:33.33%}.ant-calendar-time-picker-column-4 .ant-calendar-time-picker-select{width:25%}.ant-calendar-time-picker-input-wrap{display:none}.ant-calendar-time-picker-select{position:relative;float:left;height:226px;overflow:hidden;font-size:14px;border-right:1px solid #e8e8e8}.ant-calendar-time-picker-select:hover{overflow-y:auto}.ant-calendar-time-picker-select:first-child{margin-left:0;border-left:0}.ant-calendar-time-picker-select:last-child{border-right:0}.ant-calendar-time-picker-select ul{width:100%;max-height:206px;margin:0;padding:0;list-style:none}.ant-calendar-time-picker-select li{width:100%;height:24px;margin:0;line-height:24px;text-align:center;list-style:none;cursor:pointer;-webkit-transition:all .3s;transition:all .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-calendar-time-picker-select li:last-child:after{display:block;height:202px;content:""}.ant-calendar-time-picker-select li:hover{background:#e6f7ff}.ant-calendar-time-picker-select li:focus{color:#1890ff;font-weight:600;outline:none}li.ant-calendar-time-picker-select-option-selected{font-weight:600;background:#f5f5f5}li.ant-calendar-time-picker-select-option-disabled{color:rgba(0,0,0,.25)}li.ant-calendar-time-picker-select-option-disabled:hover{background:transparent;cursor:not-allowed}.ant-calendar-time .ant-calendar-day-select{display:inline-block;padding:0 2px;color:rgba(0,0,0,.85);font-weight:500;line-height:34px}.ant-calendar-time .ant-calendar-footer{position:relative;height:auto}.ant-calendar-time .ant-calendar-footer-btn{text-align:right}.ant-calendar-time .ant-calendar-footer .ant-calendar-today-btn{float:left;margin:0}.ant-calendar-time .ant-calendar-footer .ant-calendar-time-picker-btn{display:inline-block;margin-right:8px}.ant-calendar-time .ant-calendar-footer .ant-calendar-time-picker-btn-disabled{color:rgba(0,0,0,.25)}.ant-calendar-month-panel{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;background:#fff;border-radius:4px;outline:none}.ant-calendar-month-panel>div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%}.ant-calendar-month-panel-hidden{display:none}.ant-calendar-month-panel-header{height:40px;line-height:40px;text-align:center;border-bottom:1px solid #e8e8e8;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative}.ant-calendar-month-panel-header a:hover{color:#40a9ff}.ant-calendar-month-panel-header .ant-calendar-month-panel-century-select,.ant-calendar-month-panel-header .ant-calendar-month-panel-decade-select,.ant-calendar-month-panel-header .ant-calendar-month-panel-month-select,.ant-calendar-month-panel-header .ant-calendar-month-panel-year-select{display:inline-block;padding:0 2px;color:rgba(0,0,0,.85);font-weight:500;line-height:40px}.ant-calendar-month-panel-header .ant-calendar-month-panel-century-select-arrow,.ant-calendar-month-panel-header .ant-calendar-month-panel-decade-select-arrow,.ant-calendar-month-panel-header .ant-calendar-month-panel-month-select-arrow,.ant-calendar-month-panel-header .ant-calendar-month-panel-year-select-arrow{display:none}.ant-calendar-month-panel-header .ant-calendar-month-panel-next-century-btn,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-decade-btn,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-month-btn,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-year-btn,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-century-btn,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-decade-btn,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-month-btn,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-year-btn{position:absolute;top:0;display:inline-block;padding:0 5px;color:rgba(0,0,0,.45);font-size:16px;font-family:Arial,Hiragino Sans GB,Microsoft Yahei,"Microsoft Sans Serif",sans-serif;line-height:40px}.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-century-btn,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-decade-btn,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-year-btn{left:7px;height:100%}.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-century-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-century-btn:before,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-decade-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-decade-btn:before,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-year-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-year-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-century-btn:hover:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-century-btn:hover:before,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-decade-btn:hover:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-decade-btn:hover:before,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-year-btn:hover:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-year-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-century-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-decade-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-year-btn:after{display:none;position:relative;left:-3px;display:inline-block}.ant-calendar-month-panel-header .ant-calendar-month-panel-next-century-btn,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-decade-btn,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-year-btn{right:7px;height:100%}.ant-calendar-month-panel-header .ant-calendar-month-panel-next-century-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-century-btn:before,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-decade-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-decade-btn:before,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-year-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-year-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-month-panel-header .ant-calendar-month-panel-next-century-btn:hover:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-century-btn:hover:before,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-decade-btn:hover:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-decade-btn:hover:before,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-year-btn:hover:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-year-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-month-panel-header .ant-calendar-month-panel-next-century-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-decade-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-year-btn:after{display:none}.ant-calendar-month-panel-header .ant-calendar-month-panel-next-century-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-century-btn:before,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-decade-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-decade-btn:before,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-year-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-year-btn:before{-webkit-transform:rotate(135deg) scale(.8);transform:rotate(135deg) scale(.8)}.ant-calendar-month-panel-header .ant-calendar-month-panel-next-century-btn:before,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-decade-btn:before,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-year-btn:before{position:relative;left:3px}.ant-calendar-month-panel-header .ant-calendar-month-panel-next-century-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-decade-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-year-btn:after{display:inline-block}.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-month-btn{left:29px;height:100%}.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-month-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-month-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-month-btn:hover:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-month-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-month-btn:after{display:none}.ant-calendar-month-panel-header .ant-calendar-month-panel-next-month-btn{right:29px;height:100%}.ant-calendar-month-panel-header .ant-calendar-month-panel-next-month-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-month-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-month-panel-header .ant-calendar-month-panel-next-month-btn:hover:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-month-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-month-panel-header .ant-calendar-month-panel-next-month-btn:after{display:none}.ant-calendar-month-panel-header .ant-calendar-month-panel-next-month-btn:after,.ant-calendar-month-panel-header .ant-calendar-month-panel-next-month-btn:before{-webkit-transform:rotate(135deg) scale(.8);transform:rotate(135deg) scale(.8)}.ant-calendar-month-panel-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.ant-calendar-month-panel-footer{border-top:1px solid #e8e8e8}.ant-calendar-month-panel-footer .ant-calendar-footer-extra{padding:0 12px}.ant-calendar-month-panel-table{width:100%;height:100%;table-layout:fixed;border-collapse:separate}.ant-calendar-month-panel-selected-cell .ant-calendar-month-panel-month,.ant-calendar-month-panel-selected-cell .ant-calendar-month-panel-month:hover{color:#fff;background:#1890ff}.ant-calendar-month-panel-cell{text-align:center}.ant-calendar-month-panel-cell-disabled .ant-calendar-month-panel-month,.ant-calendar-month-panel-cell-disabled .ant-calendar-month-panel-month:hover{color:rgba(0,0,0,.25);background:#f5f5f5;cursor:not-allowed}.ant-calendar-month-panel-month{display:inline-block;height:24px;margin:0 auto;padding:0 8px;color:rgba(0,0,0,.65);line-height:24px;text-align:center;background:transparent;border-radius:2px;-webkit-transition:background .3s ease;transition:background .3s ease}.ant-calendar-month-panel-month:hover{background:#e6f7ff;cursor:pointer}.ant-calendar-year-panel{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;background:#fff;border-radius:4px;outline:none}.ant-calendar-year-panel>div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%}.ant-calendar-year-panel-hidden{display:none}.ant-calendar-year-panel-header{height:40px;line-height:40px;text-align:center;border-bottom:1px solid #e8e8e8;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative}.ant-calendar-year-panel-header a:hover{color:#40a9ff}.ant-calendar-year-panel-header .ant-calendar-year-panel-century-select,.ant-calendar-year-panel-header .ant-calendar-year-panel-decade-select,.ant-calendar-year-panel-header .ant-calendar-year-panel-month-select,.ant-calendar-year-panel-header .ant-calendar-year-panel-year-select{display:inline-block;padding:0 2px;color:rgba(0,0,0,.85);font-weight:500;line-height:40px}.ant-calendar-year-panel-header .ant-calendar-year-panel-century-select-arrow,.ant-calendar-year-panel-header .ant-calendar-year-panel-decade-select-arrow,.ant-calendar-year-panel-header .ant-calendar-year-panel-month-select-arrow,.ant-calendar-year-panel-header .ant-calendar-year-panel-year-select-arrow{display:none}.ant-calendar-year-panel-header .ant-calendar-year-panel-next-century-btn,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-decade-btn,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-month-btn,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-year-btn,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-century-btn,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-decade-btn,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-month-btn,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-year-btn{position:absolute;top:0;display:inline-block;padding:0 5px;color:rgba(0,0,0,.45);font-size:16px;font-family:Arial,Hiragino Sans GB,Microsoft Yahei,"Microsoft Sans Serif",sans-serif;line-height:40px}.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-century-btn,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-decade-btn,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-year-btn{left:7px;height:100%}.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-century-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-century-btn:before,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-decade-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-decade-btn:before,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-year-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-year-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-century-btn:hover:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-century-btn:hover:before,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-decade-btn:hover:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-decade-btn:hover:before,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-year-btn:hover:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-year-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-century-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-decade-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-year-btn:after{display:none;position:relative;left:-3px;display:inline-block}.ant-calendar-year-panel-header .ant-calendar-year-panel-next-century-btn,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-decade-btn,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-year-btn{right:7px;height:100%}.ant-calendar-year-panel-header .ant-calendar-year-panel-next-century-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-century-btn:before,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-decade-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-decade-btn:before,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-year-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-year-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-year-panel-header .ant-calendar-year-panel-next-century-btn:hover:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-century-btn:hover:before,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-decade-btn:hover:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-decade-btn:hover:before,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-year-btn:hover:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-year-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-year-panel-header .ant-calendar-year-panel-next-century-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-decade-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-year-btn:after{display:none}.ant-calendar-year-panel-header .ant-calendar-year-panel-next-century-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-century-btn:before,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-decade-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-decade-btn:before,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-year-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-year-btn:before{-webkit-transform:rotate(135deg) scale(.8);transform:rotate(135deg) scale(.8)}.ant-calendar-year-panel-header .ant-calendar-year-panel-next-century-btn:before,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-decade-btn:before,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-year-btn:before{position:relative;left:3px}.ant-calendar-year-panel-header .ant-calendar-year-panel-next-century-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-decade-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-year-btn:after{display:inline-block}.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-month-btn{left:29px;height:100%}.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-month-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-month-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-month-btn:hover:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-month-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-month-btn:after{display:none}.ant-calendar-year-panel-header .ant-calendar-year-panel-next-month-btn{right:29px;height:100%}.ant-calendar-year-panel-header .ant-calendar-year-panel-next-month-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-month-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-year-panel-header .ant-calendar-year-panel-next-month-btn:hover:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-month-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-year-panel-header .ant-calendar-year-panel-next-month-btn:after{display:none}.ant-calendar-year-panel-header .ant-calendar-year-panel-next-month-btn:after,.ant-calendar-year-panel-header .ant-calendar-year-panel-next-month-btn:before{-webkit-transform:rotate(135deg) scale(.8);transform:rotate(135deg) scale(.8)}.ant-calendar-year-panel-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.ant-calendar-year-panel-footer{border-top:1px solid #e8e8e8}.ant-calendar-year-panel-footer .ant-calendar-footer-extra{padding:0 12px}.ant-calendar-year-panel-table{width:100%;height:100%;table-layout:fixed;border-collapse:separate}.ant-calendar-year-panel-cell{text-align:center}.ant-calendar-year-panel-cell-disabled .ant-calendar-year-panel-year,.ant-calendar-year-panel-cell-disabled .ant-calendar-year-panel-year:hover{color:rgba(0,0,0,.25);background:#f5f5f5;cursor:not-allowed}.ant-calendar-year-panel-year{display:inline-block;height:24px;margin:0 auto;padding:0 8px;color:rgba(0,0,0,.65);line-height:24px;text-align:center;background:transparent;border-radius:2px;-webkit-transition:background .3s ease;transition:background .3s ease}.ant-calendar-year-panel-year:hover{background:#e6f7ff;cursor:pointer}.ant-calendar-year-panel-selected-cell .ant-calendar-year-panel-year,.ant-calendar-year-panel-selected-cell .ant-calendar-year-panel-year:hover{color:#fff;background:#1890ff}.ant-calendar-year-panel-last-decade-cell .ant-calendar-year-panel-year,.ant-calendar-year-panel-next-decade-cell .ant-calendar-year-panel-year{color:rgba(0,0,0,.25);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-calendar-decade-panel{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background:#fff;border-radius:4px;outline:none}.ant-calendar-decade-panel-hidden{display:none}.ant-calendar-decade-panel-header{height:40px;line-height:40px;text-align:center;border-bottom:1px solid #e8e8e8;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative}.ant-calendar-decade-panel-header a:hover{color:#40a9ff}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-century-select,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-decade-select,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-month-select,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-year-select{display:inline-block;padding:0 2px;color:rgba(0,0,0,.85);font-weight:500;line-height:40px}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-century-select-arrow,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-decade-select-arrow,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-month-select-arrow,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-year-select-arrow{display:none}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-century-btn,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-decade-btn,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-month-btn,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-year-btn,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-century-btn,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-decade-btn,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-month-btn,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-year-btn{position:absolute;top:0;display:inline-block;padding:0 5px;color:rgba(0,0,0,.45);font-size:16px;font-family:Arial,Hiragino Sans GB,Microsoft Yahei,"Microsoft Sans Serif",sans-serif;line-height:40px}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-century-btn,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-decade-btn,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-year-btn{left:7px;height:100%}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-century-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-century-btn:before,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-decade-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-decade-btn:before,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-year-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-year-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-century-btn:hover:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-century-btn:hover:before,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-decade-btn:hover:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-decade-btn:hover:before,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-year-btn:hover:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-year-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-century-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-decade-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-year-btn:after{display:none;position:relative;left:-3px;display:inline-block}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-century-btn,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-decade-btn,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-year-btn{right:7px;height:100%}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-century-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-century-btn:before,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-decade-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-decade-btn:before,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-year-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-year-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-century-btn:hover:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-century-btn:hover:before,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-decade-btn:hover:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-decade-btn:hover:before,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-year-btn:hover:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-year-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-century-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-decade-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-year-btn:after{display:none}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-century-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-century-btn:before,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-decade-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-decade-btn:before,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-year-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-year-btn:before{-webkit-transform:rotate(135deg) scale(.8);transform:rotate(135deg) scale(.8)}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-century-btn:before,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-decade-btn:before,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-year-btn:before{position:relative;left:3px}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-century-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-decade-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-year-btn:after{display:inline-block}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-month-btn{left:29px;height:100%}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-month-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-month-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-month-btn:hover:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-month-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-month-btn:after{display:none}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-month-btn{right:29px;height:100%}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-month-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-month-btn:before{position:relative;top:-1px;display:inline-block;width:8px;height:8px;vertical-align:middle;border:0 solid #aaa;border-width:1.5px 0 0 1.5px;border-radius:1px;-webkit-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);-webkit-transition:all .3s;transition:all .3s;content:""}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-month-btn:hover:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-month-btn:hover:before{border-color:rgba(0,0,0,.65)}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-month-btn:after{display:none}.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-month-btn:after,.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-month-btn:before{-webkit-transform:rotate(135deg) scale(.8);transform:rotate(135deg) scale(.8)}.ant-calendar-decade-panel-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.ant-calendar-decade-panel-footer{border-top:1px solid #e8e8e8}.ant-calendar-decade-panel-footer .ant-calendar-footer-extra{padding:0 12px}.ant-calendar-decade-panel-table{width:100%;height:100%;table-layout:fixed;border-collapse:separate}.ant-calendar-decade-panel-cell{white-space:nowrap;text-align:center}.ant-calendar-decade-panel-decade{display:inline-block;height:24px;margin:0 auto;padding:0 6px;color:rgba(0,0,0,.65);line-height:24px;text-align:center;background:transparent;border-radius:2px;-webkit-transition:background .3s ease;transition:background .3s ease}.ant-calendar-decade-panel-decade:hover{background:#e6f7ff;cursor:pointer}.ant-calendar-decade-panel-selected-cell .ant-calendar-decade-panel-decade,.ant-calendar-decade-panel-selected-cell .ant-calendar-decade-panel-decade:hover{color:#fff;background:#1890ff}.ant-calendar-decade-panel-last-century-cell .ant-calendar-decade-panel-decade,.ant-calendar-decade-panel-next-century-cell .ant-calendar-decade-panel-decade{color:rgba(0,0,0,.25);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-calendar-month .ant-calendar-month-header-wrap{position:relative;height:288px}.ant-calendar-month .ant-calendar-month-panel,.ant-calendar-month .ant-calendar-year-panel{top:0;height:100%}.ant-calendar-week-number-cell{opacity:.5}.ant-calendar-week-number .ant-calendar-body tr{cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-calendar-week-number .ant-calendar-body tr:hover{background:#e6f7ff}.ant-calendar-week-number .ant-calendar-body tr.ant-calendar-active-week{font-weight:700;background:#bae7ff}.ant-calendar-week-number .ant-calendar-body tr .ant-calendar-selected-day .ant-calendar-date,.ant-calendar-week-number .ant-calendar-body tr .ant-calendar-selected-day:hover .ant-calendar-date{color:rgba(0,0,0,.65);background:transparent}.ant-descriptions-title{margin-bottom:20px;color:rgba(0,0,0,.85);font-weight:700;font-size:16px;line-height:1.5}.ant-descriptions-view{width:100%;overflow:hidden;border-radius:4px}.ant-descriptions-view table{width:100%;table-layout:fixed}.ant-descriptions-row>td,.ant-descriptions-row>th{padding-bottom:16px}.ant-descriptions-row:last-child{border-bottom:none}.ant-descriptions-item-label{color:rgba(0,0,0,.85);font-weight:400;font-size:14px;line-height:1.5}.ant-descriptions-item-label:after{position:relative;top:-.5px;margin:0 8px 0 2px;content:" "}.ant-descriptions-item-colon:after{content:":"}.ant-descriptions-item-no-label:after{margin:0;content:""}.ant-descriptions-item-content{display:table-cell;color:rgba(0,0,0,.65);font-size:14px;line-height:1.5}.ant-descriptions-item{padding-bottom:0}.ant-descriptions-item>span{display:inline-block}.ant-descriptions-middle .ant-descriptions-row>td,.ant-descriptions-middle .ant-descriptions-row>th{padding-bottom:12px}.ant-descriptions-small .ant-descriptions-row>td,.ant-descriptions-small .ant-descriptions-row>th{padding-bottom:8px}.ant-descriptions-bordered .ant-descriptions-view{border:1px solid #e8e8e8}.ant-descriptions-bordered .ant-descriptions-view>table{table-layout:auto}.ant-descriptions-bordered .ant-descriptions-item-content,.ant-descriptions-bordered .ant-descriptions-item-label{padding:16px 24px;border-right:1px solid #e8e8e8}.ant-descriptions-bordered .ant-descriptions-item-content:last-child,.ant-descriptions-bordered .ant-descriptions-item-label:last-child{border-right:none}.ant-descriptions-bordered .ant-descriptions-item-label{background-color:#fafafa}.ant-descriptions-bordered .ant-descriptions-item-label:after{display:none}.ant-descriptions-bordered .ant-descriptions-row{border-bottom:1px solid #e8e8e8}.ant-descriptions-bordered .ant-descriptions-row:last-child{border-bottom:none}.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-content,.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-label{padding:12px 24px}.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-content,.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-label{padding:8px 16px}.ant-divider{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";background:#e8e8e8}.ant-divider,.ant-divider-vertical{position:relative;top:-.06em;display:inline-block;width:1px;height:.9em;margin:0 8px;vertical-align:middle}.ant-divider-horizontal{display:block;clear:both;width:100%;min-width:100%;height:1px;margin:24px 0}.ant-divider-horizontal.ant-divider-with-text-center,.ant-divider-horizontal.ant-divider-with-text-left,.ant-divider-horizontal.ant-divider-with-text-right{display:table;margin:16px 0;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;white-space:nowrap;text-align:center;background:transparent}.ant-divider-horizontal.ant-divider-with-text-center:after,.ant-divider-horizontal.ant-divider-with-text-center:before,.ant-divider-horizontal.ant-divider-with-text-left:after,.ant-divider-horizontal.ant-divider-with-text-left:before,.ant-divider-horizontal.ant-divider-with-text-right:after,.ant-divider-horizontal.ant-divider-with-text-right:before{position:relative;top:50%;display:table-cell;width:50%;border-top:1px solid #e8e8e8;-webkit-transform:translateY(50%);transform:translateY(50%);content:""}.ant-divider-horizontal.ant-divider-with-text-left .ant-divider-inner-text,.ant-divider-horizontal.ant-divider-with-text-right .ant-divider-inner-text{display:inline-block;padding:0 10px}.ant-divider-horizontal.ant-divider-with-text-left:before{top:50%;width:5%}.ant-divider-horizontal.ant-divider-with-text-left:after,.ant-divider-horizontal.ant-divider-with-text-right:before{top:50%;width:95%}.ant-divider-horizontal.ant-divider-with-text-right:after{top:50%;width:5%}.ant-divider-inner-text{display:inline-block;padding:0 24px}.ant-divider-dashed{background:none;border-color:#e8e8e8;border-style:dashed;border-width:1px 0 0}.ant-divider-horizontal.ant-divider-with-text-center.ant-divider-dashed,.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed,.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed{border-top:0}.ant-divider-horizontal.ant-divider-with-text-center.ant-divider-dashed:after,.ant-divider-horizontal.ant-divider-with-text-center.ant-divider-dashed:before,.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed:after,.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed:before,.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed:after,.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed:before{border-style:dashed none none}.ant-divider-vertical.ant-divider-dashed{border-width:0 0 0 1px}.ant-drawer{position:fixed;z-index:1000;width:0;height:100%;-webkit-transition:height 0s ease .3s,width 0s ease .3s,-webkit-transform .3s cubic-bezier(.7,.3,.1,1);transition:height 0s ease .3s,width 0s ease .3s,-webkit-transform .3s cubic-bezier(.7,.3,.1,1);transition:transform .3s cubic-bezier(.7,.3,.1,1),height 0s ease .3s,width 0s ease .3s;transition:transform .3s cubic-bezier(.7,.3,.1,1),height 0s ease .3s,width 0s ease .3s,-webkit-transform .3s cubic-bezier(.7,.3,.1,1)}.ant-drawer>*{-webkit-transition:-webkit-transform .3s cubic-bezier(.7,.3,.1,1),-webkit-box-shadow .3s cubic-bezier(.7,.3,.1,1);transition:-webkit-transform .3s cubic-bezier(.7,.3,.1,1),-webkit-box-shadow .3s cubic-bezier(.7,.3,.1,1);transition:transform .3s cubic-bezier(.7,.3,.1,1),box-shadow .3s cubic-bezier(.7,.3,.1,1);transition:transform .3s cubic-bezier(.7,.3,.1,1),box-shadow .3s cubic-bezier(.7,.3,.1,1),-webkit-transform .3s cubic-bezier(.7,.3,.1,1),-webkit-box-shadow .3s cubic-bezier(.7,.3,.1,1)}.ant-drawer-content-wrapper{position:absolute}.ant-drawer .ant-drawer-content{width:100%;height:100%}.ant-drawer-left,.ant-drawer-right{top:0;width:0;height:100%}.ant-drawer-left .ant-drawer-content-wrapper,.ant-drawer-right .ant-drawer-content-wrapper{height:100%}.ant-drawer-left.ant-drawer-open,.ant-drawer-right.ant-drawer-open{width:100%;-webkit-transition:-webkit-transform .3s cubic-bezier(.7,.3,.1,1);transition:-webkit-transform .3s cubic-bezier(.7,.3,.1,1);transition:transform .3s cubic-bezier(.7,.3,.1,1);transition:transform .3s cubic-bezier(.7,.3,.1,1),-webkit-transform .3s cubic-bezier(.7,.3,.1,1)}.ant-drawer-left.ant-drawer-open.no-mask,.ant-drawer-right.ant-drawer-open.no-mask{width:0}.ant-drawer-left.ant-drawer-open .ant-drawer-content-wrapper{-webkit-box-shadow:2px 0 8px rgba(0,0,0,.15);box-shadow:2px 0 8px rgba(0,0,0,.15)}.ant-drawer-right,.ant-drawer-right .ant-drawer-content-wrapper{right:0}.ant-drawer-right.ant-drawer-open .ant-drawer-content-wrapper{-webkit-box-shadow:-2px 0 8px rgba(0,0,0,.15);box-shadow:-2px 0 8px rgba(0,0,0,.15)}.ant-drawer-right.ant-drawer-open.no-mask{right:1px;-webkit-transform:translateX(1px);transform:translateX(1px)}.ant-drawer-bottom,.ant-drawer-top{left:0;width:100%;height:0%}.ant-drawer-bottom .ant-drawer-content-wrapper,.ant-drawer-top .ant-drawer-content-wrapper{width:100%}.ant-drawer-bottom.ant-drawer-open,.ant-drawer-top.ant-drawer-open{height:100%;-webkit-transition:-webkit-transform .3s cubic-bezier(.7,.3,.1,1);transition:-webkit-transform .3s cubic-bezier(.7,.3,.1,1);transition:transform .3s cubic-bezier(.7,.3,.1,1);transition:transform .3s cubic-bezier(.7,.3,.1,1),-webkit-transform .3s cubic-bezier(.7,.3,.1,1)}.ant-drawer-bottom.ant-drawer-open.no-mask,.ant-drawer-top.ant-drawer-open.no-mask{height:0%}.ant-drawer-top{top:0}.ant-drawer-top.ant-drawer-open .ant-drawer-content-wrapper{-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-drawer-bottom,.ant-drawer-bottom .ant-drawer-content-wrapper{bottom:0}.ant-drawer-bottom.ant-drawer-open .ant-drawer-content-wrapper{-webkit-box-shadow:0 -2px 8px rgba(0,0,0,.15);box-shadow:0 -2px 8px rgba(0,0,0,.15)}.ant-drawer-bottom.ant-drawer-open.no-mask{bottom:1px;-webkit-transform:translateY(1px);transform:translateY(1px)}.ant-drawer.ant-drawer-open .ant-drawer-mask{height:100%;opacity:1;-webkit-transition:none;transition:none;-webkit-animation:antdDrawerFadeIn .3s cubic-bezier(.7,.3,.1,1);animation:antdDrawerFadeIn .3s cubic-bezier(.7,.3,.1,1)}.ant-drawer-title{margin:0;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;line-height:22px}.ant-drawer-content{position:relative;z-index:1;overflow:auto;background-color:#fff;background-clip:padding-box;border:0}.ant-drawer-close{position:absolute;top:0;right:0;z-index:10;display:block;width:56px;height:56px;padding:0;color:rgba(0,0,0,.45);font-weight:700;font-size:16px;font-style:normal;line-height:56px;text-align:center;text-transform:none;text-decoration:none;background:transparent;border:0;outline:0;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;text-rendering:auto}.ant-drawer-close:focus,.ant-drawer-close:hover{color:rgba(0,0,0,.75);text-decoration:none}.ant-drawer-header{position:relative;padding:16px 24px;border-bottom:1px solid #e8e8e8;border-radius:4px 4px 0 0}.ant-drawer-header,.ant-drawer-header-no-title{color:rgba(0,0,0,.65);background:#fff}.ant-drawer-body{padding:24px;font-size:14px;line-height:1.5;word-wrap:break-word}.ant-drawer-wrapper-body{height:100%;overflow:auto}.ant-drawer-mask{position:absolute;top:0;left:0;width:100%;height:0;background-color:rgba(0,0,0,.45);opacity:0;filter:alpha(opacity=45);-webkit-transition:opacity .3s linear,height 0s ease .3s;transition:opacity .3s linear,height 0s ease .3s}.ant-drawer-open-content{-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15)}@-webkit-keyframes antdDrawerFadeIn{0%{opacity:0}to{opacity:1}}@keyframes antdDrawerFadeIn{0%{opacity:0}to{opacity:1}}.ant-dropdown{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block}.ant-dropdown:before{position:absolute;top:-7px;right:0;bottom:-7px;left:-7px;z-index:-9999;opacity:.0001;content:" "}.ant-dropdown-wrap{position:relative}.ant-dropdown-wrap .ant-btn>.anticon-down{display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-dropdown-wrap .ant-btn>.anticon-down{font-size:12px}.ant-dropdown-wrap .anticon-down:before{-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.ant-dropdown-wrap-open .anticon-down:before{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.ant-dropdown-hidden,.ant-dropdown-menu-hidden{display:none}.ant-dropdown-menu{position:relative;margin:0;padding:4px 0;text-align:left;list-style-type:none;background-color:#fff;background-clip:padding-box;border-radius:4px;outline:none;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15);-webkit-transform:translateZ(0)}.ant-dropdown-menu-item-group-title{padding:5px 12px;color:rgba(0,0,0,.45);-webkit-transition:all .3s;transition:all .3s}.ant-dropdown-menu-submenu-popup{position:absolute;z-index:1050}.ant-dropdown-menu-submenu-popup>.ant-dropdown-menu{-webkit-transform-origin:0 0;transform-origin:0 0}.ant-dropdown-menu-submenu-popup li,.ant-dropdown-menu-submenu-popup ul{list-style:none}.ant-dropdown-menu-submenu-popup ul{margin-right:.3em;margin-left:.3em;padding:0}.ant-dropdown-menu-item,.ant-dropdown-menu-submenu-title{clear:both;margin:0;padding:5px 12px;color:rgba(0,0,0,.65);font-weight:400;font-size:14px;line-height:22px;white-space:nowrap;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-dropdown-menu-item>.anticon:first-child,.ant-dropdown-menu-item>span>.anticon:first-child,.ant-dropdown-menu-submenu-title>.anticon:first-child,.ant-dropdown-menu-submenu-title>span>.anticon:first-child{min-width:12px;margin-right:8px;font-size:12px}.ant-dropdown-menu-item>a,.ant-dropdown-menu-submenu-title>a{display:block;margin:-5px -12px;padding:5px 12px;color:rgba(0,0,0,.65);-webkit-transition:all .3s;transition:all .3s}.ant-dropdown-menu-item-selected,.ant-dropdown-menu-item-selected>a,.ant-dropdown-menu-submenu-title-selected,.ant-dropdown-menu-submenu-title-selected>a{color:#1890ff;background-color:#e6f7ff}.ant-dropdown-menu-item:hover,.ant-dropdown-menu-submenu-title:hover{background-color:#e6f7ff}.ant-dropdown-menu-item-disabled,.ant-dropdown-menu-submenu-title-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-dropdown-menu-item-disabled:hover,.ant-dropdown-menu-submenu-title-disabled:hover{color:rgba(0,0,0,.25);background-color:#fff;cursor:not-allowed}.ant-dropdown-menu-item-divider,.ant-dropdown-menu-submenu-title-divider{height:1px;margin:4px 0;overflow:hidden;line-height:0;background-color:#e8e8e8}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow{position:absolute;right:8px}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{color:rgba(0,0,0,.45);font-style:normal;display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow-icon,:root .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{font-size:12px}.ant-dropdown-menu-item-group-list{margin:0 8px;padding:0;list-style:none}.ant-dropdown-menu-submenu-title{padding-right:26px}.ant-dropdown-menu-submenu-vertical{position:relative}.ant-dropdown-menu-submenu-vertical>.ant-dropdown-menu{position:absolute;top:0;left:100%;min-width:100%;margin-left:4px;-webkit-transform-origin:0 0;transform-origin:0 0}.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{color:rgba(0,0,0,.25);background-color:#fff;cursor:not-allowed}.ant-dropdown-menu-submenu-selected .ant-dropdown-menu-submenu-title{color:#1890ff}.ant-dropdown.slide-down-appear.slide-down-appear-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.slide-down-appear.slide-down-appear-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.slide-down-appear.slide-down-appear-active.ant-dropdown-placement-bottomRight,.ant-dropdown.slide-down-enter.slide-down-enter-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.slide-down-enter.slide-down-enter-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.slide-down-enter.slide-down-enter-active.ant-dropdown-placement-bottomRight{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn}.ant-dropdown.slide-up-appear.slide-up-appear-active.ant-dropdown-placement-topCenter,.ant-dropdown.slide-up-appear.slide-up-appear-active.ant-dropdown-placement-topLeft,.ant-dropdown.slide-up-appear.slide-up-appear-active.ant-dropdown-placement-topRight,.ant-dropdown.slide-up-enter.slide-up-enter-active.ant-dropdown-placement-topCenter,.ant-dropdown.slide-up-enter.slide-up-enter-active.ant-dropdown-placement-topLeft,.ant-dropdown.slide-up-enter.slide-up-enter-active.ant-dropdown-placement-topRight{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn}.ant-dropdown.slide-down-leave.slide-down-leave-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.slide-down-leave.slide-down-leave-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.slide-down-leave.slide-down-leave-active.ant-dropdown-placement-bottomRight{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut}.ant-dropdown.slide-up-leave.slide-up-leave-active.ant-dropdown-placement-topCenter,.ant-dropdown.slide-up-leave.slide-up-leave-active.ant-dropdown-placement-topLeft,.ant-dropdown.slide-up-leave.slide-up-leave-active.ant-dropdown-placement-topRight{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut}.ant-dropdown-link>.anticon.anticon-down,.ant-dropdown-trigger>.anticon.anticon-down{display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-dropdown-link>.anticon.anticon-down,:root .ant-dropdown-trigger>.anticon.anticon-down{font-size:12px}.ant-dropdown-button{white-space:nowrap}.ant-dropdown-button.ant-btn-group>.ant-btn:last-child:not(:first-child){padding-right:8px;padding-left:8px}.ant-dropdown-button .anticon.anticon-down{display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-dropdown-button .anticon.anticon-down{font-size:12px}.ant-dropdown-menu-dark,.ant-dropdown-menu-dark .ant-dropdown-menu{background:#001529}.ant-dropdown-menu-dark .ant-dropdown-menu-item,.ant-dropdown-menu-dark .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow:after{color:hsla(0,0%,100%,.65)}.ant-dropdown-menu-dark .ant-dropdown-menu-item:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title:hover{color:#fff;background:transparent}.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected>a{color:#fff;background:#1890ff}.ant-empty{margin:0 8px;font-size:14px;line-height:22px;text-align:center}.ant-empty-image{height:100px;margin-bottom:8px}.ant-empty-image img{height:100%}.ant-empty-image svg{height:100%;margin:auto}.ant-empty-description{margin:0}.ant-empty-footer{margin-top:16px}.ant-empty-normal{margin:32px 0;color:rgba(0,0,0,.25)}.ant-empty-normal .ant-empty-image{height:40px}.ant-empty-small{margin:8px 0;color:rgba(0,0,0,.25)}.ant-empty-small .ant-empty-image{height:35px}@media (max-width:575px){.ant-form-item-control-wrapper,.ant-form-item-label{display:block;width:100%}.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-form-item-label label:after{display:none}.ant-col-xs-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-xs-24.ant-form-item-label label:after{display:none}}@media (max-width:767px){.ant-col-sm-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-sm-24.ant-form-item-label label:after{display:none}}@media (max-width:991px){.ant-col-md-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-md-24.ant-form-item-label label:after{display:none}}@media (max-width:1199px){.ant-col-lg-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-lg-24.ant-form-item-label label:after{display:none}}@media (max-width:1599px){.ant-col-xl-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-xl-24.ant-form-item-label label:after{display:none}}@-webkit-keyframes antShowHelpIn{0%{-webkit-transform:translateY(-5px);transform:translateY(-5px);opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@-webkit-keyframes antShowHelpOut{to{-webkit-transform:translateY(-5px);transform:translateY(-5px);opacity:0}}@-webkit-keyframes diffZoomIn1{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes diffZoomIn2{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes diffZoomIn3{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}.ant-form{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.ant-form legend{display:block;width:100%;margin-bottom:20px;padding:0;color:rgba(0,0,0,.45);font-size:16px;line-height:inherit;border:0;border-bottom:1px solid #d9d9d9}.ant-form label{font-size:14px}.ant-form input[type=search]{-webkit-box-sizing:border-box;box-sizing:border-box}.ant-form input[type=checkbox],.ant-form input[type=radio]{line-height:normal}.ant-form input[type=file]{display:block}.ant-form input[type=range]{display:block;width:100%}.ant-form select[multiple],.ant-form select[size]{height:auto}.ant-form input[type=checkbox]:focus,.ant-form input[type=file]:focus,.ant-form input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.ant-form output{display:block;padding-top:15px;color:rgba(0,0,0,.65);font-size:14px;line-height:1.5}.ant-form-item-required:before{display:inline-block;margin-right:4px;color:#f5222d;font-size:14px;font-family:SimSun,sans-serif;line-height:1;content:"*"}.ant-form-hide-required-mark .ant-form-item-required:before{display:none}.ant-form-item-label>label{color:rgba(0,0,0,.85)}.ant-form-item-label>label:after{content:":";position:relative;top:-.5px;margin:0 8px 0 2px}.ant-form-item-label>label.ant-form-item-no-colon:after{content:" "}.ant-form-item{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";margin-bottom:24px;vertical-align:top}.ant-form-item label{position:relative}.ant-form-item label>.anticon{font-size:14px;vertical-align:top}.ant-form-item-control{position:relative;line-height:40px;zoom:1}.ant-form-item-control:after,.ant-form-item-control:before{display:table;content:""}.ant-form-item-control:after{clear:both}.ant-form-item-children{position:relative}.ant-form-item-with-help{margin-bottom:5px}.ant-form-item-label{display:inline-block;overflow:hidden;line-height:39.9999px;white-space:nowrap;text-align:right;vertical-align:middle}.ant-form-item-label-left{text-align:left}.ant-form-item .ant-switch{margin:2px 0 4px}.ant-form-explain,.ant-form-extra{clear:both;min-height:22px;margin-top:-2px;color:rgba(0,0,0,.45);font-size:14px;line-height:1.5;-webkit-transition:color .3s cubic-bezier(.215,.61,.355,1);transition:color .3s cubic-bezier(.215,.61,.355,1)}.ant-form-explain{margin-bottom:-1px}.ant-form-extra{padding-top:4px}.ant-form-text{display:inline-block;padding-right:8px}.ant-form-split{display:block;text-align:center}form .has-feedback .ant-input{padding-right:30px}form .has-feedback .ant-input-affix-wrapper .ant-input-suffix{padding-right:18px}form .has-feedback .ant-input-affix-wrapper .ant-input{padding-right:49px}form .has-feedback .ant-input-affix-wrapper.ant-input-affix-wrapper-input-with-clear-btn .ant-input{padding-right:68px}form .has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-arrow,form .has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-selection__clear,form .has-feedback>.ant-select .ant-select-arrow,form .has-feedback>.ant-select .ant-select-selection__clear{right:28px}form .has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-selection-selected-value,form .has-feedback>.ant-select .ant-select-selection-selected-value{padding-right:42px}form .has-feedback .ant-cascader-picker-arrow{margin-right:17px}form .has-feedback .ant-calendar-picker-clear,form .has-feedback .ant-calendar-picker-icon,form .has-feedback .ant-cascader-picker-clear,form .has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix,form .has-feedback .ant-time-picker-clear,form .has-feedback .ant-time-picker-icon{right:28px}form .ant-mentions,form textarea.ant-input{height:auto;margin-bottom:4px}form .ant-upload{background:transparent}form input[type=checkbox],form input[type=radio]{width:14px;height:14px}form .ant-checkbox-inline,form .ant-radio-inline{display:inline-block;margin-left:8px;font-weight:400;vertical-align:middle;cursor:pointer}form .ant-checkbox-inline:first-child,form .ant-radio-inline:first-child{margin-left:0}form .ant-checkbox-vertical,form .ant-radio-vertical{display:block}form .ant-checkbox-vertical+.ant-checkbox-vertical,form .ant-radio-vertical+.ant-radio-vertical{margin-left:0}form .ant-input-number+.ant-form-text{margin-left:8px}form .ant-input-number-handler-wrap{z-index:2}form .ant-cascader-picker,form .ant-select{width:100%}form .ant-input-group .ant-cascader-picker,form .ant-input-group .ant-select{width:auto}form .ant-input-group-wrapper,form :not(.ant-input-group-wrapper)>.ant-input-group{display:inline-block;vertical-align:middle}form:not(.ant-form-vertical) .ant-input-group-wrapper,form:not(.ant-form-vertical) :not(.ant-input-group-wrapper)>.ant-input-group{position:relative;top:-1px}.ant-col-24.ant-form-item-label,.ant-col-xl-24.ant-form-item-label,.ant-form-vertical .ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-24.ant-form-item-label label:after,.ant-col-xl-24.ant-form-item-label label:after,.ant-form-vertical .ant-form-item-label label:after{display:none}.ant-form-vertical .ant-form-item{padding-bottom:8px}.ant-form-vertical .ant-form-item-control{line-height:1.5}.ant-form-vertical .ant-form-explain{margin-top:2px;margin-bottom:-5px}.ant-form-vertical .ant-form-extra{margin-top:2px;margin-bottom:-4px}@media (max-width:575px){.ant-form-item-control-wrapper,.ant-form-item-label{display:block;width:100%}.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-form-item-label label:after{display:none}.ant-col-xs-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-xs-24.ant-form-item-label label:after{display:none}}@media (max-width:767px){.ant-col-sm-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-sm-24.ant-form-item-label label:after{display:none}}@media (max-width:991px){.ant-col-md-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-md-24.ant-form-item-label label:after{display:none}}@media (max-width:1199px){.ant-col-lg-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-lg-24.ant-form-item-label label:after{display:none}}@media (max-width:1599px){.ant-col-xl-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-xl-24.ant-form-item-label label:after{display:none}}.ant-form-inline .ant-form-item{display:inline-block;margin-right:16px;margin-bottom:0}.ant-form-inline .ant-form-item-with-help{margin-bottom:24px}.ant-form-inline .ant-form-item>.ant-form-item-control-wrapper,.ant-form-inline .ant-form-item>.ant-form-item-label{display:inline-block;vertical-align:top}.ant-form-inline .ant-form-text,.ant-form-inline .has-feedback{display:inline-block}.has-error.has-feedback .ant-form-item-children-icon,.has-success.has-feedback .ant-form-item-children-icon,.has-warning.has-feedback .ant-form-item-children-icon,.is-validating.has-feedback .ant-form-item-children-icon{position:absolute;top:50%;right:0;z-index:1;width:32px;height:20px;margin-top:-10px;font-size:14px;line-height:20px;text-align:center;visibility:visible;-webkit-animation:zoomIn .3s cubic-bezier(.12,.4,.29,1.46);animation:zoomIn .3s cubic-bezier(.12,.4,.29,1.46);pointer-events:none}.has-error.has-feedback .ant-form-item-children-icon svg,.has-success.has-feedback .ant-form-item-children-icon svg,.has-warning.has-feedback .ant-form-item-children-icon svg,.is-validating.has-feedback .ant-form-item-children-icon svg{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.has-success.has-feedback .ant-form-item-children-icon{color:#52c41a;-webkit-animation-name:diffZoomIn1!important;animation-name:diffZoomIn1!important}.has-warning .ant-form-explain,.has-warning .ant-form-split{color:#faad14}.has-warning .ant-input,.has-warning .ant-input:hover{background-color:#fff;border-color:#faad14}.has-warning .ant-input:focus{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-input:not([disabled]):hover{border-color:#faad14}.has-warning .ant-calendar-picker-open .ant-calendar-picker-input{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-input-affix-wrapper .ant-input,.has-warning .ant-input-affix-wrapper .ant-input:hover{background-color:#fff;border-color:#faad14}.has-warning .ant-input-affix-wrapper .ant-input:focus{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled){border-color:#faad14}.has-warning .ant-input-prefix{color:#faad14}.has-warning .ant-input-group-addon{color:#faad14;background-color:#fff;border-color:#faad14}.has-warning .has-feedback{color:#faad14}.has-warning.has-feedback .ant-form-item-children-icon{color:#faad14;-webkit-animation-name:diffZoomIn3!important;animation-name:diffZoomIn3!important}.has-warning .ant-select-selection,.has-warning .ant-select-selection:hover{border-color:#faad14}.has-warning .ant-select-focused .ant-select-selection,.has-warning .ant-select-open .ant-select-selection{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-calendar-picker-icon:after,.has-warning .ant-cascader-picker-arrow,.has-warning .ant-picker-icon:after,.has-warning .ant-select-arrow,.has-warning .ant-time-picker-icon:after{color:#faad14}.has-warning .ant-input-number,.has-warning .ant-time-picker-input{border-color:#faad14}.has-warning .ant-input-number-focused,.has-warning .ant-input-number:focus,.has-warning .ant-time-picker-input-focused,.has-warning .ant-time-picker-input:focus{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-input-number:not([disabled]):hover,.has-warning .ant-time-picker-input:not([disabled]):hover{border-color:#faad14}.has-warning .ant-cascader-picker:focus .ant-cascader-input{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-cascader-picker:hover .ant-cascader-input{border-color:#faad14}.has-error .ant-form-explain,.has-error .ant-form-split{color:#f5222d}.has-error .ant-input,.has-error .ant-input:hover{background-color:#fff;border-color:#f5222d}.has-error .ant-input:focus{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-input:not([disabled]):hover{border-color:#f5222d}.has-error .ant-calendar-picker-open .ant-calendar-picker-input{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-input-affix-wrapper .ant-input,.has-error .ant-input-affix-wrapper .ant-input:hover{background-color:#fff;border-color:#f5222d}.has-error .ant-input-affix-wrapper .ant-input:focus{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled){border-color:#f5222d}.has-error .ant-input-prefix{color:#f5222d}.has-error .ant-input-group-addon{color:#f5222d;background-color:#fff;border-color:#f5222d}.has-error .has-feedback{color:#f5222d}.has-error.has-feedback .ant-form-item-children-icon{color:#f5222d;-webkit-animation-name:diffZoomIn2!important;animation-name:diffZoomIn2!important}.has-error .ant-select-selection,.has-error .ant-select-selection:hover{border-color:#f5222d}.has-error .ant-select-focused .ant-select-selection,.has-error .ant-select-open .ant-select-selection{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-select.ant-select-auto-complete .ant-input:focus{border-color:#f5222d}.has-error .ant-input-group-addon .ant-select-selection{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.has-error .ant-calendar-picker-icon:after,.has-error .ant-cascader-picker-arrow,.has-error .ant-picker-icon:after,.has-error .ant-select-arrow,.has-error .ant-time-picker-icon:after{color:#f5222d}.has-error .ant-input-number,.has-error .ant-time-picker-input{border-color:#f5222d}.has-error .ant-input-number-focused,.has-error .ant-input-number:focus,.has-error .ant-time-picker-input-focused,.has-error .ant-time-picker-input:focus{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-input-number:not([disabled]):hover,.has-error .ant-mention-wrapper .ant-mention-editor,.has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):hover,.has-error .ant-time-picker-input:not([disabled]):hover{border-color:#f5222d}.has-error .ant-cascader-picker:focus .ant-cascader-input,.has-error .ant-mention-wrapper.ant-mention-active:not([disabled]) .ant-mention-editor,.has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):focus{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-cascader-picker:hover .ant-cascader-input,.has-error .ant-transfer-list{border-color:#f5222d}.has-error .ant-transfer-list-search:not([disabled]){border-color:#d9d9d9}.has-error .ant-transfer-list-search:not([disabled]):hover{border-color:#40a9ff;border-right-width:1px!important}.has-error .ant-transfer-list-search:not([disabled]):focus{border-color:#40a9ff;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.is-validating.has-feedback .ant-form-item-children-icon{display:inline-block;color:#1890ff}.ant-advanced-search-form .ant-form-item{margin-bottom:24px}.ant-advanced-search-form .ant-form-item-with-help{margin-bottom:5px}.show-help-appear,.show-help-enter,.show-help-leave{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.show-help-appear.show-help-appear-active,.show-help-enter.show-help-enter-active{-webkit-animation-name:antShowHelpIn;animation-name:antShowHelpIn;-webkit-animation-play-state:running;animation-play-state:running}.show-help-leave.show-help-leave-active{-webkit-animation-name:antShowHelpOut;animation-name:antShowHelpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.show-help-appear,.show-help-enter{opacity:0}.show-help-appear,.show-help-enter,.show-help-leave{-webkit-animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-timing-function:cubic-bezier(.645,.045,.355,1)}@keyframes antShowHelpIn{0%{-webkit-transform:translateY(-5px);transform:translateY(-5px);opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes antShowHelpOut{to{-webkit-transform:translateY(-5px);transform:translateY(-5px);opacity:0}}@keyframes diffZoomIn1{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes diffZoomIn2{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes diffZoomIn3{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}.ant-row{position:relative;height:auto;margin-right:0;margin-left:0;zoom:1;display:block;-webkit-box-sizing:border-box;box-sizing:border-box}.ant-row:after,.ant-row:before{display:table;content:""}.ant-row+.ant-row:before,.ant-row:after{clear:both}.ant-row-flex{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.ant-row-flex,.ant-row-flex:after,.ant-row-flex:before{display:-webkit-box;display:-ms-flexbox;display:flex}.ant-row-flex-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.ant-row-flex-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.ant-row-flex-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.ant-row-flex-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.ant-row-flex-space-around{-ms-flex-pack:distribute;justify-content:space-around}.ant-row-flex-top{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.ant-row-flex-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ant-row-flex-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.ant-col{position:relative;min-height:1px}.ant-col-1,.ant-col-2,.ant-col-3,.ant-col-4,.ant-col-5,.ant-col-6,.ant-col-7,.ant-col-8,.ant-col-9,.ant-col-10,.ant-col-11,.ant-col-12,.ant-col-13,.ant-col-14,.ant-col-15,.ant-col-16,.ant-col-17,.ant-col-18,.ant-col-19,.ant-col-20,.ant-col-21,.ant-col-22,.ant-col-23,.ant-col-24,.ant-col-lg-1,.ant-col-lg-2,.ant-col-lg-3,.ant-col-lg-4,.ant-col-lg-5,.ant-col-lg-6,.ant-col-lg-7,.ant-col-lg-8,.ant-col-lg-9,.ant-col-lg-10,.ant-col-lg-11,.ant-col-lg-12,.ant-col-lg-13,.ant-col-lg-14,.ant-col-lg-15,.ant-col-lg-16,.ant-col-lg-17,.ant-col-lg-18,.ant-col-lg-19,.ant-col-lg-20,.ant-col-lg-21,.ant-col-lg-22,.ant-col-lg-23,.ant-col-lg-24,.ant-col-md-1,.ant-col-md-2,.ant-col-md-3,.ant-col-md-4,.ant-col-md-5,.ant-col-md-6,.ant-col-md-7,.ant-col-md-8,.ant-col-md-9,.ant-col-md-10,.ant-col-md-11,.ant-col-md-12,.ant-col-md-13,.ant-col-md-14,.ant-col-md-15,.ant-col-md-16,.ant-col-md-17,.ant-col-md-18,.ant-col-md-19,.ant-col-md-20,.ant-col-md-21,.ant-col-md-22,.ant-col-md-23,.ant-col-md-24,.ant-col-sm-1,.ant-col-sm-2,.ant-col-sm-3,.ant-col-sm-4,.ant-col-sm-5,.ant-col-sm-6,.ant-col-sm-7,.ant-col-sm-8,.ant-col-sm-9,.ant-col-sm-10,.ant-col-sm-11,.ant-col-sm-12,.ant-col-sm-13,.ant-col-sm-14,.ant-col-sm-15,.ant-col-sm-16,.ant-col-sm-17,.ant-col-sm-18,.ant-col-sm-19,.ant-col-sm-20,.ant-col-sm-21,.ant-col-sm-22,.ant-col-sm-23,.ant-col-sm-24,.ant-col-xs-1,.ant-col-xs-2,.ant-col-xs-3,.ant-col-xs-4,.ant-col-xs-5,.ant-col-xs-6,.ant-col-xs-7,.ant-col-xs-8,.ant-col-xs-9,.ant-col-xs-10,.ant-col-xs-11,.ant-col-xs-12,.ant-col-xs-13,.ant-col-xs-14,.ant-col-xs-15,.ant-col-xs-16,.ant-col-xs-17,.ant-col-xs-18,.ant-col-xs-19,.ant-col-xs-20,.ant-col-xs-21,.ant-col-xs-22,.ant-col-xs-23,.ant-col-xs-24{position:relative;padding-right:0;padding-left:0}.ant-col-1,.ant-col-2,.ant-col-3,.ant-col-4,.ant-col-5,.ant-col-6,.ant-col-7,.ant-col-8,.ant-col-9,.ant-col-10,.ant-col-11,.ant-col-12,.ant-col-13,.ant-col-14,.ant-col-15,.ant-col-16,.ant-col-17,.ant-col-18,.ant-col-19,.ant-col-20,.ant-col-21,.ant-col-22,.ant-col-23,.ant-col-24{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-push-24{left:100%}.ant-col-pull-24{right:100%}.ant-col-offset-24{margin-left:100%}.ant-col-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ant-col-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-push-23{left:95.83333333%}.ant-col-pull-23{right:95.83333333%}.ant-col-offset-23{margin-left:95.83333333%}.ant-col-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ant-col-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-push-22{left:91.66666667%}.ant-col-pull-22{right:91.66666667%}.ant-col-offset-22{margin-left:91.66666667%}.ant-col-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ant-col-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-push-21{left:87.5%}.ant-col-pull-21{right:87.5%}.ant-col-offset-21{margin-left:87.5%}.ant-col-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ant-col-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-push-20{left:83.33333333%}.ant-col-pull-20{right:83.33333333%}.ant-col-offset-20{margin-left:83.33333333%}.ant-col-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ant-col-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-push-19{left:79.16666667%}.ant-col-pull-19{right:79.16666667%}.ant-col-offset-19{margin-left:79.16666667%}.ant-col-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ant-col-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-push-18{left:75%}.ant-col-pull-18{right:75%}.ant-col-offset-18{margin-left:75%}.ant-col-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ant-col-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-push-17{left:70.83333333%}.ant-col-pull-17{right:70.83333333%}.ant-col-offset-17{margin-left:70.83333333%}.ant-col-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ant-col-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-push-16{left:66.66666667%}.ant-col-pull-16{right:66.66666667%}.ant-col-offset-16{margin-left:66.66666667%}.ant-col-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ant-col-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-push-15{left:62.5%}.ant-col-pull-15{right:62.5%}.ant-col-offset-15{margin-left:62.5%}.ant-col-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ant-col-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-push-14{left:58.33333333%}.ant-col-pull-14{right:58.33333333%}.ant-col-offset-14{margin-left:58.33333333%}.ant-col-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ant-col-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-push-13{left:54.16666667%}.ant-col-pull-13{right:54.16666667%}.ant-col-offset-13{margin-left:54.16666667%}.ant-col-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ant-col-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-push-12{left:50%}.ant-col-pull-12{right:50%}.ant-col-offset-12{margin-left:50%}.ant-col-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ant-col-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-push-11{left:45.83333333%}.ant-col-pull-11{right:45.83333333%}.ant-col-offset-11{margin-left:45.83333333%}.ant-col-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ant-col-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-push-10{left:41.66666667%}.ant-col-pull-10{right:41.66666667%}.ant-col-offset-10{margin-left:41.66666667%}.ant-col-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ant-col-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-push-9{left:37.5%}.ant-col-pull-9{right:37.5%}.ant-col-offset-9{margin-left:37.5%}.ant-col-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ant-col-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-push-8{left:33.33333333%}.ant-col-pull-8{right:33.33333333%}.ant-col-offset-8{margin-left:33.33333333%}.ant-col-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ant-col-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-push-7{left:29.16666667%}.ant-col-pull-7{right:29.16666667%}.ant-col-offset-7{margin-left:29.16666667%}.ant-col-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ant-col-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-push-6{left:25%}.ant-col-pull-6{right:25%}.ant-col-offset-6{margin-left:25%}.ant-col-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ant-col-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-push-5{left:20.83333333%}.ant-col-pull-5{right:20.83333333%}.ant-col-offset-5{margin-left:20.83333333%}.ant-col-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ant-col-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-push-4{left:16.66666667%}.ant-col-pull-4{right:16.66666667%}.ant-col-offset-4{margin-left:16.66666667%}.ant-col-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ant-col-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-push-3{left:12.5%}.ant-col-pull-3{right:12.5%}.ant-col-offset-3{margin-left:12.5%}.ant-col-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ant-col-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-push-2{left:8.33333333%}.ant-col-pull-2{right:8.33333333%}.ant-col-offset-2{margin-left:8.33333333%}.ant-col-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ant-col-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-push-1{left:4.16666667%}.ant-col-pull-1{right:4.16666667%}.ant-col-offset-1{margin-left:4.16666667%}.ant-col-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-col-0{display:none}.ant-col-offset-0{margin-left:0}.ant-col-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.ant-col-xs-1,.ant-col-xs-2,.ant-col-xs-3,.ant-col-xs-4,.ant-col-xs-5,.ant-col-xs-6,.ant-col-xs-7,.ant-col-xs-8,.ant-col-xs-9,.ant-col-xs-10,.ant-col-xs-11,.ant-col-xs-12,.ant-col-xs-13,.ant-col-xs-14,.ant-col-xs-15,.ant-col-xs-16,.ant-col-xs-17,.ant-col-xs-18,.ant-col-xs-19,.ant-col-xs-20,.ant-col-xs-21,.ant-col-xs-22,.ant-col-xs-23,.ant-col-xs-24{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-xs-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-xs-push-24{left:100%}.ant-col-xs-pull-24{right:100%}.ant-col-xs-offset-24{margin-left:100%}.ant-col-xs-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ant-col-xs-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-xs-push-23{left:95.83333333%}.ant-col-xs-pull-23{right:95.83333333%}.ant-col-xs-offset-23{margin-left:95.83333333%}.ant-col-xs-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ant-col-xs-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-xs-push-22{left:91.66666667%}.ant-col-xs-pull-22{right:91.66666667%}.ant-col-xs-offset-22{margin-left:91.66666667%}.ant-col-xs-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ant-col-xs-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-xs-push-21{left:87.5%}.ant-col-xs-pull-21{right:87.5%}.ant-col-xs-offset-21{margin-left:87.5%}.ant-col-xs-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ant-col-xs-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-xs-push-20{left:83.33333333%}.ant-col-xs-pull-20{right:83.33333333%}.ant-col-xs-offset-20{margin-left:83.33333333%}.ant-col-xs-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ant-col-xs-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-xs-push-19{left:79.16666667%}.ant-col-xs-pull-19{right:79.16666667%}.ant-col-xs-offset-19{margin-left:79.16666667%}.ant-col-xs-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ant-col-xs-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-xs-push-18{left:75%}.ant-col-xs-pull-18{right:75%}.ant-col-xs-offset-18{margin-left:75%}.ant-col-xs-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ant-col-xs-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-xs-push-17{left:70.83333333%}.ant-col-xs-pull-17{right:70.83333333%}.ant-col-xs-offset-17{margin-left:70.83333333%}.ant-col-xs-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ant-col-xs-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-xs-push-16{left:66.66666667%}.ant-col-xs-pull-16{right:66.66666667%}.ant-col-xs-offset-16{margin-left:66.66666667%}.ant-col-xs-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ant-col-xs-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-xs-push-15{left:62.5%}.ant-col-xs-pull-15{right:62.5%}.ant-col-xs-offset-15{margin-left:62.5%}.ant-col-xs-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ant-col-xs-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-xs-push-14{left:58.33333333%}.ant-col-xs-pull-14{right:58.33333333%}.ant-col-xs-offset-14{margin-left:58.33333333%}.ant-col-xs-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ant-col-xs-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-xs-push-13{left:54.16666667%}.ant-col-xs-pull-13{right:54.16666667%}.ant-col-xs-offset-13{margin-left:54.16666667%}.ant-col-xs-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ant-col-xs-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-xs-push-12{left:50%}.ant-col-xs-pull-12{right:50%}.ant-col-xs-offset-12{margin-left:50%}.ant-col-xs-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ant-col-xs-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-xs-push-11{left:45.83333333%}.ant-col-xs-pull-11{right:45.83333333%}.ant-col-xs-offset-11{margin-left:45.83333333%}.ant-col-xs-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ant-col-xs-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-xs-push-10{left:41.66666667%}.ant-col-xs-pull-10{right:41.66666667%}.ant-col-xs-offset-10{margin-left:41.66666667%}.ant-col-xs-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ant-col-xs-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-xs-push-9{left:37.5%}.ant-col-xs-pull-9{right:37.5%}.ant-col-xs-offset-9{margin-left:37.5%}.ant-col-xs-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ant-col-xs-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-xs-push-8{left:33.33333333%}.ant-col-xs-pull-8{right:33.33333333%}.ant-col-xs-offset-8{margin-left:33.33333333%}.ant-col-xs-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ant-col-xs-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-xs-push-7{left:29.16666667%}.ant-col-xs-pull-7{right:29.16666667%}.ant-col-xs-offset-7{margin-left:29.16666667%}.ant-col-xs-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ant-col-xs-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-xs-push-6{left:25%}.ant-col-xs-pull-6{right:25%}.ant-col-xs-offset-6{margin-left:25%}.ant-col-xs-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ant-col-xs-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-xs-push-5{left:20.83333333%}.ant-col-xs-pull-5{right:20.83333333%}.ant-col-xs-offset-5{margin-left:20.83333333%}.ant-col-xs-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ant-col-xs-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-xs-push-4{left:16.66666667%}.ant-col-xs-pull-4{right:16.66666667%}.ant-col-xs-offset-4{margin-left:16.66666667%}.ant-col-xs-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ant-col-xs-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-xs-push-3{left:12.5%}.ant-col-xs-pull-3{right:12.5%}.ant-col-xs-offset-3{margin-left:12.5%}.ant-col-xs-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ant-col-xs-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-xs-push-2{left:8.33333333%}.ant-col-xs-pull-2{right:8.33333333%}.ant-col-xs-offset-2{margin-left:8.33333333%}.ant-col-xs-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ant-col-xs-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-xs-push-1{left:4.16666667%}.ant-col-xs-pull-1{right:4.16666667%}.ant-col-xs-offset-1{margin-left:4.16666667%}.ant-col-xs-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-col-xs-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xs-push-0{left:auto}.ant-col-xs-pull-0{right:auto}.ant-col-xs-offset-0{margin-left:0}.ant-col-xs-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}@media (min-width:576px){.ant-col-sm-1,.ant-col-sm-2,.ant-col-sm-3,.ant-col-sm-4,.ant-col-sm-5,.ant-col-sm-6,.ant-col-sm-7,.ant-col-sm-8,.ant-col-sm-9,.ant-col-sm-10,.ant-col-sm-11,.ant-col-sm-12,.ant-col-sm-13,.ant-col-sm-14,.ant-col-sm-15,.ant-col-sm-16,.ant-col-sm-17,.ant-col-sm-18,.ant-col-sm-19,.ant-col-sm-20,.ant-col-sm-21,.ant-col-sm-22,.ant-col-sm-23,.ant-col-sm-24{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-sm-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-sm-push-24{left:100%}.ant-col-sm-pull-24{right:100%}.ant-col-sm-offset-24{margin-left:100%}.ant-col-sm-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ant-col-sm-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-sm-push-23{left:95.83333333%}.ant-col-sm-pull-23{right:95.83333333%}.ant-col-sm-offset-23{margin-left:95.83333333%}.ant-col-sm-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ant-col-sm-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-sm-push-22{left:91.66666667%}.ant-col-sm-pull-22{right:91.66666667%}.ant-col-sm-offset-22{margin-left:91.66666667%}.ant-col-sm-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ant-col-sm-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-sm-push-21{left:87.5%}.ant-col-sm-pull-21{right:87.5%}.ant-col-sm-offset-21{margin-left:87.5%}.ant-col-sm-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ant-col-sm-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-sm-push-20{left:83.33333333%}.ant-col-sm-pull-20{right:83.33333333%}.ant-col-sm-offset-20{margin-left:83.33333333%}.ant-col-sm-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ant-col-sm-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-sm-push-19{left:79.16666667%}.ant-col-sm-pull-19{right:79.16666667%}.ant-col-sm-offset-19{margin-left:79.16666667%}.ant-col-sm-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ant-col-sm-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-sm-push-18{left:75%}.ant-col-sm-pull-18{right:75%}.ant-col-sm-offset-18{margin-left:75%}.ant-col-sm-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ant-col-sm-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-sm-push-17{left:70.83333333%}.ant-col-sm-pull-17{right:70.83333333%}.ant-col-sm-offset-17{margin-left:70.83333333%}.ant-col-sm-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ant-col-sm-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-sm-push-16{left:66.66666667%}.ant-col-sm-pull-16{right:66.66666667%}.ant-col-sm-offset-16{margin-left:66.66666667%}.ant-col-sm-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ant-col-sm-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-sm-push-15{left:62.5%}.ant-col-sm-pull-15{right:62.5%}.ant-col-sm-offset-15{margin-left:62.5%}.ant-col-sm-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ant-col-sm-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-sm-push-14{left:58.33333333%}.ant-col-sm-pull-14{right:58.33333333%}.ant-col-sm-offset-14{margin-left:58.33333333%}.ant-col-sm-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ant-col-sm-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-sm-push-13{left:54.16666667%}.ant-col-sm-pull-13{right:54.16666667%}.ant-col-sm-offset-13{margin-left:54.16666667%}.ant-col-sm-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ant-col-sm-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-sm-push-12{left:50%}.ant-col-sm-pull-12{right:50%}.ant-col-sm-offset-12{margin-left:50%}.ant-col-sm-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ant-col-sm-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-sm-push-11{left:45.83333333%}.ant-col-sm-pull-11{right:45.83333333%}.ant-col-sm-offset-11{margin-left:45.83333333%}.ant-col-sm-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ant-col-sm-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-sm-push-10{left:41.66666667%}.ant-col-sm-pull-10{right:41.66666667%}.ant-col-sm-offset-10{margin-left:41.66666667%}.ant-col-sm-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ant-col-sm-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-sm-push-9{left:37.5%}.ant-col-sm-pull-9{right:37.5%}.ant-col-sm-offset-9{margin-left:37.5%}.ant-col-sm-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ant-col-sm-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-sm-push-8{left:33.33333333%}.ant-col-sm-pull-8{right:33.33333333%}.ant-col-sm-offset-8{margin-left:33.33333333%}.ant-col-sm-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ant-col-sm-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-sm-push-7{left:29.16666667%}.ant-col-sm-pull-7{right:29.16666667%}.ant-col-sm-offset-7{margin-left:29.16666667%}.ant-col-sm-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ant-col-sm-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-sm-push-6{left:25%}.ant-col-sm-pull-6{right:25%}.ant-col-sm-offset-6{margin-left:25%}.ant-col-sm-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ant-col-sm-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-sm-push-5{left:20.83333333%}.ant-col-sm-pull-5{right:20.83333333%}.ant-col-sm-offset-5{margin-left:20.83333333%}.ant-col-sm-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ant-col-sm-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-sm-push-4{left:16.66666667%}.ant-col-sm-pull-4{right:16.66666667%}.ant-col-sm-offset-4{margin-left:16.66666667%}.ant-col-sm-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ant-col-sm-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-sm-push-3{left:12.5%}.ant-col-sm-pull-3{right:12.5%}.ant-col-sm-offset-3{margin-left:12.5%}.ant-col-sm-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ant-col-sm-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-sm-push-2{left:8.33333333%}.ant-col-sm-pull-2{right:8.33333333%}.ant-col-sm-offset-2{margin-left:8.33333333%}.ant-col-sm-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ant-col-sm-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-sm-push-1{left:4.16666667%}.ant-col-sm-pull-1{right:4.16666667%}.ant-col-sm-offset-1{margin-left:4.16666667%}.ant-col-sm-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-col-sm-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-sm-push-0{left:auto}.ant-col-sm-pull-0{right:auto}.ant-col-sm-offset-0{margin-left:0}.ant-col-sm-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}@media (min-width:768px){.ant-col-md-1,.ant-col-md-2,.ant-col-md-3,.ant-col-md-4,.ant-col-md-5,.ant-col-md-6,.ant-col-md-7,.ant-col-md-8,.ant-col-md-9,.ant-col-md-10,.ant-col-md-11,.ant-col-md-12,.ant-col-md-13,.ant-col-md-14,.ant-col-md-15,.ant-col-md-16,.ant-col-md-17,.ant-col-md-18,.ant-col-md-19,.ant-col-md-20,.ant-col-md-21,.ant-col-md-22,.ant-col-md-23,.ant-col-md-24{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-md-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-md-push-24{left:100%}.ant-col-md-pull-24{right:100%}.ant-col-md-offset-24{margin-left:100%}.ant-col-md-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ant-col-md-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-md-push-23{left:95.83333333%}.ant-col-md-pull-23{right:95.83333333%}.ant-col-md-offset-23{margin-left:95.83333333%}.ant-col-md-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ant-col-md-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-md-push-22{left:91.66666667%}.ant-col-md-pull-22{right:91.66666667%}.ant-col-md-offset-22{margin-left:91.66666667%}.ant-col-md-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ant-col-md-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-md-push-21{left:87.5%}.ant-col-md-pull-21{right:87.5%}.ant-col-md-offset-21{margin-left:87.5%}.ant-col-md-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ant-col-md-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-md-push-20{left:83.33333333%}.ant-col-md-pull-20{right:83.33333333%}.ant-col-md-offset-20{margin-left:83.33333333%}.ant-col-md-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ant-col-md-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-md-push-19{left:79.16666667%}.ant-col-md-pull-19{right:79.16666667%}.ant-col-md-offset-19{margin-left:79.16666667%}.ant-col-md-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ant-col-md-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-md-push-18{left:75%}.ant-col-md-pull-18{right:75%}.ant-col-md-offset-18{margin-left:75%}.ant-col-md-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ant-col-md-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-md-push-17{left:70.83333333%}.ant-col-md-pull-17{right:70.83333333%}.ant-col-md-offset-17{margin-left:70.83333333%}.ant-col-md-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ant-col-md-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-md-push-16{left:66.66666667%}.ant-col-md-pull-16{right:66.66666667%}.ant-col-md-offset-16{margin-left:66.66666667%}.ant-col-md-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ant-col-md-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-md-push-15{left:62.5%}.ant-col-md-pull-15{right:62.5%}.ant-col-md-offset-15{margin-left:62.5%}.ant-col-md-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ant-col-md-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-md-push-14{left:58.33333333%}.ant-col-md-pull-14{right:58.33333333%}.ant-col-md-offset-14{margin-left:58.33333333%}.ant-col-md-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ant-col-md-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-md-push-13{left:54.16666667%}.ant-col-md-pull-13{right:54.16666667%}.ant-col-md-offset-13{margin-left:54.16666667%}.ant-col-md-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ant-col-md-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-md-push-12{left:50%}.ant-col-md-pull-12{right:50%}.ant-col-md-offset-12{margin-left:50%}.ant-col-md-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ant-col-md-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-md-push-11{left:45.83333333%}.ant-col-md-pull-11{right:45.83333333%}.ant-col-md-offset-11{margin-left:45.83333333%}.ant-col-md-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ant-col-md-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-md-push-10{left:41.66666667%}.ant-col-md-pull-10{right:41.66666667%}.ant-col-md-offset-10{margin-left:41.66666667%}.ant-col-md-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ant-col-md-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-md-push-9{left:37.5%}.ant-col-md-pull-9{right:37.5%}.ant-col-md-offset-9{margin-left:37.5%}.ant-col-md-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ant-col-md-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-md-push-8{left:33.33333333%}.ant-col-md-pull-8{right:33.33333333%}.ant-col-md-offset-8{margin-left:33.33333333%}.ant-col-md-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ant-col-md-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-md-push-7{left:29.16666667%}.ant-col-md-pull-7{right:29.16666667%}.ant-col-md-offset-7{margin-left:29.16666667%}.ant-col-md-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ant-col-md-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-md-push-6{left:25%}.ant-col-md-pull-6{right:25%}.ant-col-md-offset-6{margin-left:25%}.ant-col-md-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ant-col-md-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-md-push-5{left:20.83333333%}.ant-col-md-pull-5{right:20.83333333%}.ant-col-md-offset-5{margin-left:20.83333333%}.ant-col-md-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ant-col-md-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-md-push-4{left:16.66666667%}.ant-col-md-pull-4{right:16.66666667%}.ant-col-md-offset-4{margin-left:16.66666667%}.ant-col-md-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ant-col-md-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-md-push-3{left:12.5%}.ant-col-md-pull-3{right:12.5%}.ant-col-md-offset-3{margin-left:12.5%}.ant-col-md-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ant-col-md-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-md-push-2{left:8.33333333%}.ant-col-md-pull-2{right:8.33333333%}.ant-col-md-offset-2{margin-left:8.33333333%}.ant-col-md-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ant-col-md-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-md-push-1{left:4.16666667%}.ant-col-md-pull-1{right:4.16666667%}.ant-col-md-offset-1{margin-left:4.16666667%}.ant-col-md-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-col-md-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-md-push-0{left:auto}.ant-col-md-pull-0{right:auto}.ant-col-md-offset-0{margin-left:0}.ant-col-md-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}@media (min-width:992px){.ant-col-lg-1,.ant-col-lg-2,.ant-col-lg-3,.ant-col-lg-4,.ant-col-lg-5,.ant-col-lg-6,.ant-col-lg-7,.ant-col-lg-8,.ant-col-lg-9,.ant-col-lg-10,.ant-col-lg-11,.ant-col-lg-12,.ant-col-lg-13,.ant-col-lg-14,.ant-col-lg-15,.ant-col-lg-16,.ant-col-lg-17,.ant-col-lg-18,.ant-col-lg-19,.ant-col-lg-20,.ant-col-lg-21,.ant-col-lg-22,.ant-col-lg-23,.ant-col-lg-24{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-lg-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-lg-push-24{left:100%}.ant-col-lg-pull-24{right:100%}.ant-col-lg-offset-24{margin-left:100%}.ant-col-lg-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ant-col-lg-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-lg-push-23{left:95.83333333%}.ant-col-lg-pull-23{right:95.83333333%}.ant-col-lg-offset-23{margin-left:95.83333333%}.ant-col-lg-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ant-col-lg-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-lg-push-22{left:91.66666667%}.ant-col-lg-pull-22{right:91.66666667%}.ant-col-lg-offset-22{margin-left:91.66666667%}.ant-col-lg-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ant-col-lg-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-lg-push-21{left:87.5%}.ant-col-lg-pull-21{right:87.5%}.ant-col-lg-offset-21{margin-left:87.5%}.ant-col-lg-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ant-col-lg-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-lg-push-20{left:83.33333333%}.ant-col-lg-pull-20{right:83.33333333%}.ant-col-lg-offset-20{margin-left:83.33333333%}.ant-col-lg-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ant-col-lg-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-lg-push-19{left:79.16666667%}.ant-col-lg-pull-19{right:79.16666667%}.ant-col-lg-offset-19{margin-left:79.16666667%}.ant-col-lg-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ant-col-lg-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-lg-push-18{left:75%}.ant-col-lg-pull-18{right:75%}.ant-col-lg-offset-18{margin-left:75%}.ant-col-lg-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ant-col-lg-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-lg-push-17{left:70.83333333%}.ant-col-lg-pull-17{right:70.83333333%}.ant-col-lg-offset-17{margin-left:70.83333333%}.ant-col-lg-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ant-col-lg-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-lg-push-16{left:66.66666667%}.ant-col-lg-pull-16{right:66.66666667%}.ant-col-lg-offset-16{margin-left:66.66666667%}.ant-col-lg-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ant-col-lg-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-lg-push-15{left:62.5%}.ant-col-lg-pull-15{right:62.5%}.ant-col-lg-offset-15{margin-left:62.5%}.ant-col-lg-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ant-col-lg-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-lg-push-14{left:58.33333333%}.ant-col-lg-pull-14{right:58.33333333%}.ant-col-lg-offset-14{margin-left:58.33333333%}.ant-col-lg-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ant-col-lg-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-lg-push-13{left:54.16666667%}.ant-col-lg-pull-13{right:54.16666667%}.ant-col-lg-offset-13{margin-left:54.16666667%}.ant-col-lg-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ant-col-lg-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-lg-push-12{left:50%}.ant-col-lg-pull-12{right:50%}.ant-col-lg-offset-12{margin-left:50%}.ant-col-lg-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ant-col-lg-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-lg-push-11{left:45.83333333%}.ant-col-lg-pull-11{right:45.83333333%}.ant-col-lg-offset-11{margin-left:45.83333333%}.ant-col-lg-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ant-col-lg-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-lg-push-10{left:41.66666667%}.ant-col-lg-pull-10{right:41.66666667%}.ant-col-lg-offset-10{margin-left:41.66666667%}.ant-col-lg-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ant-col-lg-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-lg-push-9{left:37.5%}.ant-col-lg-pull-9{right:37.5%}.ant-col-lg-offset-9{margin-left:37.5%}.ant-col-lg-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ant-col-lg-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-lg-push-8{left:33.33333333%}.ant-col-lg-pull-8{right:33.33333333%}.ant-col-lg-offset-8{margin-left:33.33333333%}.ant-col-lg-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ant-col-lg-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-lg-push-7{left:29.16666667%}.ant-col-lg-pull-7{right:29.16666667%}.ant-col-lg-offset-7{margin-left:29.16666667%}.ant-col-lg-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ant-col-lg-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-lg-push-6{left:25%}.ant-col-lg-pull-6{right:25%}.ant-col-lg-offset-6{margin-left:25%}.ant-col-lg-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ant-col-lg-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-lg-push-5{left:20.83333333%}.ant-col-lg-pull-5{right:20.83333333%}.ant-col-lg-offset-5{margin-left:20.83333333%}.ant-col-lg-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ant-col-lg-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-lg-push-4{left:16.66666667%}.ant-col-lg-pull-4{right:16.66666667%}.ant-col-lg-offset-4{margin-left:16.66666667%}.ant-col-lg-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ant-col-lg-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-lg-push-3{left:12.5%}.ant-col-lg-pull-3{right:12.5%}.ant-col-lg-offset-3{margin-left:12.5%}.ant-col-lg-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ant-col-lg-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-lg-push-2{left:8.33333333%}.ant-col-lg-pull-2{right:8.33333333%}.ant-col-lg-offset-2{margin-left:8.33333333%}.ant-col-lg-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ant-col-lg-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-lg-push-1{left:4.16666667%}.ant-col-lg-pull-1{right:4.16666667%}.ant-col-lg-offset-1{margin-left:4.16666667%}.ant-col-lg-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-col-lg-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-lg-push-0{left:auto}.ant-col-lg-pull-0{right:auto}.ant-col-lg-offset-0{margin-left:0}.ant-col-lg-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}@media (min-width:1200px){.ant-col-xl-1,.ant-col-xl-2,.ant-col-xl-3,.ant-col-xl-4,.ant-col-xl-5,.ant-col-xl-6,.ant-col-xl-7,.ant-col-xl-8,.ant-col-xl-9,.ant-col-xl-10,.ant-col-xl-11,.ant-col-xl-12,.ant-col-xl-13,.ant-col-xl-14,.ant-col-xl-15,.ant-col-xl-16,.ant-col-xl-17,.ant-col-xl-18,.ant-col-xl-19,.ant-col-xl-20,.ant-col-xl-21,.ant-col-xl-22,.ant-col-xl-23,.ant-col-xl-24{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-xl-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-xl-push-24{left:100%}.ant-col-xl-pull-24{right:100%}.ant-col-xl-offset-24{margin-left:100%}.ant-col-xl-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ant-col-xl-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-xl-push-23{left:95.83333333%}.ant-col-xl-pull-23{right:95.83333333%}.ant-col-xl-offset-23{margin-left:95.83333333%}.ant-col-xl-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ant-col-xl-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-xl-push-22{left:91.66666667%}.ant-col-xl-pull-22{right:91.66666667%}.ant-col-xl-offset-22{margin-left:91.66666667%}.ant-col-xl-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ant-col-xl-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-xl-push-21{left:87.5%}.ant-col-xl-pull-21{right:87.5%}.ant-col-xl-offset-21{margin-left:87.5%}.ant-col-xl-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ant-col-xl-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-xl-push-20{left:83.33333333%}.ant-col-xl-pull-20{right:83.33333333%}.ant-col-xl-offset-20{margin-left:83.33333333%}.ant-col-xl-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ant-col-xl-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-xl-push-19{left:79.16666667%}.ant-col-xl-pull-19{right:79.16666667%}.ant-col-xl-offset-19{margin-left:79.16666667%}.ant-col-xl-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ant-col-xl-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-xl-push-18{left:75%}.ant-col-xl-pull-18{right:75%}.ant-col-xl-offset-18{margin-left:75%}.ant-col-xl-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ant-col-xl-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-xl-push-17{left:70.83333333%}.ant-col-xl-pull-17{right:70.83333333%}.ant-col-xl-offset-17{margin-left:70.83333333%}.ant-col-xl-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ant-col-xl-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-xl-push-16{left:66.66666667%}.ant-col-xl-pull-16{right:66.66666667%}.ant-col-xl-offset-16{margin-left:66.66666667%}.ant-col-xl-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ant-col-xl-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-xl-push-15{left:62.5%}.ant-col-xl-pull-15{right:62.5%}.ant-col-xl-offset-15{margin-left:62.5%}.ant-col-xl-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ant-col-xl-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-xl-push-14{left:58.33333333%}.ant-col-xl-pull-14{right:58.33333333%}.ant-col-xl-offset-14{margin-left:58.33333333%}.ant-col-xl-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ant-col-xl-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-xl-push-13{left:54.16666667%}.ant-col-xl-pull-13{right:54.16666667%}.ant-col-xl-offset-13{margin-left:54.16666667%}.ant-col-xl-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ant-col-xl-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-xl-push-12{left:50%}.ant-col-xl-pull-12{right:50%}.ant-col-xl-offset-12{margin-left:50%}.ant-col-xl-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ant-col-xl-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-xl-push-11{left:45.83333333%}.ant-col-xl-pull-11{right:45.83333333%}.ant-col-xl-offset-11{margin-left:45.83333333%}.ant-col-xl-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ant-col-xl-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-xl-push-10{left:41.66666667%}.ant-col-xl-pull-10{right:41.66666667%}.ant-col-xl-offset-10{margin-left:41.66666667%}.ant-col-xl-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ant-col-xl-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-xl-push-9{left:37.5%}.ant-col-xl-pull-9{right:37.5%}.ant-col-xl-offset-9{margin-left:37.5%}.ant-col-xl-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ant-col-xl-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-xl-push-8{left:33.33333333%}.ant-col-xl-pull-8{right:33.33333333%}.ant-col-xl-offset-8{margin-left:33.33333333%}.ant-col-xl-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ant-col-xl-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-xl-push-7{left:29.16666667%}.ant-col-xl-pull-7{right:29.16666667%}.ant-col-xl-offset-7{margin-left:29.16666667%}.ant-col-xl-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ant-col-xl-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-xl-push-6{left:25%}.ant-col-xl-pull-6{right:25%}.ant-col-xl-offset-6{margin-left:25%}.ant-col-xl-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ant-col-xl-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-xl-push-5{left:20.83333333%}.ant-col-xl-pull-5{right:20.83333333%}.ant-col-xl-offset-5{margin-left:20.83333333%}.ant-col-xl-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ant-col-xl-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-xl-push-4{left:16.66666667%}.ant-col-xl-pull-4{right:16.66666667%}.ant-col-xl-offset-4{margin-left:16.66666667%}.ant-col-xl-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ant-col-xl-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-xl-push-3{left:12.5%}.ant-col-xl-pull-3{right:12.5%}.ant-col-xl-offset-3{margin-left:12.5%}.ant-col-xl-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ant-col-xl-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-xl-push-2{left:8.33333333%}.ant-col-xl-pull-2{right:8.33333333%}.ant-col-xl-offset-2{margin-left:8.33333333%}.ant-col-xl-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ant-col-xl-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-xl-push-1{left:4.16666667%}.ant-col-xl-pull-1{right:4.16666667%}.ant-col-xl-offset-1{margin-left:4.16666667%}.ant-col-xl-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-col-xl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xl-push-0{left:auto}.ant-col-xl-pull-0{right:auto}.ant-col-xl-offset-0{margin-left:0}.ant-col-xl-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}@media (min-width:1600px){.ant-col-xxl-1,.ant-col-xxl-2,.ant-col-xxl-3,.ant-col-xxl-4,.ant-col-xxl-5,.ant-col-xxl-6,.ant-col-xxl-7,.ant-col-xxl-8,.ant-col-xxl-9,.ant-col-xxl-10,.ant-col-xxl-11,.ant-col-xxl-12,.ant-col-xxl-13,.ant-col-xxl-14,.ant-col-xxl-15,.ant-col-xxl-16,.ant-col-xxl-17,.ant-col-xxl-18,.ant-col-xxl-19,.ant-col-xxl-20,.ant-col-xxl-21,.ant-col-xxl-22,.ant-col-xxl-23,.ant-col-xxl-24{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-xxl-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-xxl-push-24{left:100%}.ant-col-xxl-pull-24{right:100%}.ant-col-xxl-offset-24{margin-left:100%}.ant-col-xxl-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ant-col-xxl-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-xxl-push-23{left:95.83333333%}.ant-col-xxl-pull-23{right:95.83333333%}.ant-col-xxl-offset-23{margin-left:95.83333333%}.ant-col-xxl-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ant-col-xxl-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-xxl-push-22{left:91.66666667%}.ant-col-xxl-pull-22{right:91.66666667%}.ant-col-xxl-offset-22{margin-left:91.66666667%}.ant-col-xxl-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ant-col-xxl-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-xxl-push-21{left:87.5%}.ant-col-xxl-pull-21{right:87.5%}.ant-col-xxl-offset-21{margin-left:87.5%}.ant-col-xxl-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ant-col-xxl-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-xxl-push-20{left:83.33333333%}.ant-col-xxl-pull-20{right:83.33333333%}.ant-col-xxl-offset-20{margin-left:83.33333333%}.ant-col-xxl-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ant-col-xxl-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-xxl-push-19{left:79.16666667%}.ant-col-xxl-pull-19{right:79.16666667%}.ant-col-xxl-offset-19{margin-left:79.16666667%}.ant-col-xxl-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ant-col-xxl-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-xxl-push-18{left:75%}.ant-col-xxl-pull-18{right:75%}.ant-col-xxl-offset-18{margin-left:75%}.ant-col-xxl-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ant-col-xxl-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-xxl-push-17{left:70.83333333%}.ant-col-xxl-pull-17{right:70.83333333%}.ant-col-xxl-offset-17{margin-left:70.83333333%}.ant-col-xxl-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ant-col-xxl-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-xxl-push-16{left:66.66666667%}.ant-col-xxl-pull-16{right:66.66666667%}.ant-col-xxl-offset-16{margin-left:66.66666667%}.ant-col-xxl-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ant-col-xxl-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-xxl-push-15{left:62.5%}.ant-col-xxl-pull-15{right:62.5%}.ant-col-xxl-offset-15{margin-left:62.5%}.ant-col-xxl-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ant-col-xxl-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-xxl-push-14{left:58.33333333%}.ant-col-xxl-pull-14{right:58.33333333%}.ant-col-xxl-offset-14{margin-left:58.33333333%}.ant-col-xxl-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ant-col-xxl-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-xxl-push-13{left:54.16666667%}.ant-col-xxl-pull-13{right:54.16666667%}.ant-col-xxl-offset-13{margin-left:54.16666667%}.ant-col-xxl-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ant-col-xxl-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-xxl-push-12{left:50%}.ant-col-xxl-pull-12{right:50%}.ant-col-xxl-offset-12{margin-left:50%}.ant-col-xxl-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ant-col-xxl-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-xxl-push-11{left:45.83333333%}.ant-col-xxl-pull-11{right:45.83333333%}.ant-col-xxl-offset-11{margin-left:45.83333333%}.ant-col-xxl-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ant-col-xxl-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-xxl-push-10{left:41.66666667%}.ant-col-xxl-pull-10{right:41.66666667%}.ant-col-xxl-offset-10{margin-left:41.66666667%}.ant-col-xxl-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ant-col-xxl-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-xxl-push-9{left:37.5%}.ant-col-xxl-pull-9{right:37.5%}.ant-col-xxl-offset-9{margin-left:37.5%}.ant-col-xxl-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ant-col-xxl-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-xxl-push-8{left:33.33333333%}.ant-col-xxl-pull-8{right:33.33333333%}.ant-col-xxl-offset-8{margin-left:33.33333333%}.ant-col-xxl-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ant-col-xxl-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-xxl-push-7{left:29.16666667%}.ant-col-xxl-pull-7{right:29.16666667%}.ant-col-xxl-offset-7{margin-left:29.16666667%}.ant-col-xxl-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ant-col-xxl-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-xxl-push-6{left:25%}.ant-col-xxl-pull-6{right:25%}.ant-col-xxl-offset-6{margin-left:25%}.ant-col-xxl-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ant-col-xxl-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-xxl-push-5{left:20.83333333%}.ant-col-xxl-pull-5{right:20.83333333%}.ant-col-xxl-offset-5{margin-left:20.83333333%}.ant-col-xxl-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ant-col-xxl-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-xxl-push-4{left:16.66666667%}.ant-col-xxl-pull-4{right:16.66666667%}.ant-col-xxl-offset-4{margin-left:16.66666667%}.ant-col-xxl-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ant-col-xxl-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-xxl-push-3{left:12.5%}.ant-col-xxl-pull-3{right:12.5%}.ant-col-xxl-offset-3{margin-left:12.5%}.ant-col-xxl-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ant-col-xxl-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-xxl-push-2{left:8.33333333%}.ant-col-xxl-pull-2{right:8.33333333%}.ant-col-xxl-offset-2{margin-left:8.33333333%}.ant-col-xxl-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ant-col-xxl-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-xxl-push-1{left:4.16666667%}.ant-col-xxl-pull-1{right:4.16666667%}.ant-col-xxl-offset-1{margin-left:4.16666667%}.ant-col-xxl-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-col-xxl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xxl-push-0{left:auto}.ant-col-xxl-pull-0{right:auto}.ant-col-xxl-offset-0{margin-left:0}.ant-col-xxl-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}.ant-input{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;font-variant:tabular-nums;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;width:100%;height:32px;padding:4px 11px;color:rgba(0,0,0,.65);font-size:14px;line-height:1.5;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:4px;-webkit-transition:all .3s;transition:all .3s}.ant-input::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-input:-ms-input-placeholder{color:#bfbfbf}.ant-input::-webkit-input-placeholder{color:#bfbfbf}.ant-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input:-ms-input-placeholder{text-overflow:ellipsis}.ant-input:placeholder-shown{text-overflow:ellipsis}.ant-input:focus,.ant-input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-input:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-input-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-input-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}textarea.ant-input{max-width:100%;height:auto;min-height:32px;line-height:1.5;vertical-align:bottom;-webkit-transition:all .3s,height 0s;transition:all .3s,height 0s}.ant-input-lg{height:40px;padding:6px 11px;font-size:16px}.ant-input-sm{height:24px;padding:1px 7px}.ant-input-group{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:table;width:100%;border-collapse:separate;border-spacing:0}.ant-input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.ant-input-group>[class*=col-]{padding-right:8px}.ant-input-group>[class*=col-]:last-child{padding-right:0}.ant-input-group-addon,.ant-input-group-wrap,.ant-input-group>.ant-input{display:table-cell}.ant-input-group-addon:not(:first-child):not(:last-child),.ant-input-group-wrap:not(:first-child):not(:last-child),.ant-input-group>.ant-input:not(:first-child):not(:last-child){border-radius:0}.ant-input-group-addon,.ant-input-group-wrap{width:1px;white-space:nowrap;vertical-align:middle}.ant-input-group-wrap>*{display:block!important}.ant-input-group .ant-input{float:left;width:100%;margin-bottom:0;text-align:inherit}.ant-input-group .ant-input:focus,.ant-input-group .ant-input:hover{z-index:1;border-right-width:1px}.ant-input-group-addon{position:relative;padding:0 11px;color:rgba(0,0,0,.65);font-weight:400;font-size:14px;text-align:center;background-color:#fafafa;border:1px solid #d9d9d9;border-radius:4px;-webkit-transition:all .3s;transition:all .3s}.ant-input-group-addon .ant-select{margin:-5px -11px}.ant-input-group-addon .ant-select .ant-select-selection{margin:-1px;background-color:inherit;border:1px solid transparent;-webkit-box-shadow:none;box-shadow:none}.ant-input-group-addon .ant-select-focused .ant-select-selection,.ant-input-group-addon .ant-select-open .ant-select-selection{color:#1890ff}.ant-input-group-addon>i:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;content:""}.ant-input-group-addon:first-child,.ant-input-group-addon:first-child .ant-select .ant-select-selection,.ant-input-group>.ant-input:first-child,.ant-input-group>.ant-input:first-child .ant-select .ant-select-selection{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:first-child) .ant-input{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:last-child) .ant-input{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group-addon:first-child{border-right:0}.ant-input-group-addon:last-child{border-left:0}.ant-input-group-addon:last-child,.ant-input-group-addon:last-child .ant-select .ant-select-selection,.ant-input-group>.ant-input:last-child,.ant-input-group>.ant-input:last-child .ant-select .ant-select-selection{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group-lg .ant-input,.ant-input-group-lg>.ant-input-group-addon{height:40px;padding:6px 11px;font-size:16px}.ant-input-group-sm .ant-input,.ant-input-group-sm>.ant-input-group-addon{height:24px;padding:1px 7px}.ant-input-group-lg .ant-select-selection--single{height:40px}.ant-input-group-sm .ant-select-selection--single{height:24px}.ant-input-group .ant-input-affix-wrapper{display:table-cell;float:left;width:100%}.ant-input-group.ant-input-group-compact{display:block;zoom:1}.ant-input-group.ant-input-group-compact:after,.ant-input-group.ant-input-group-compact:before{display:table;content:""}.ant-input-group.ant-input-group-compact:after{clear:both}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child){border-right-width:1px}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):hover{z-index:1}.ant-input-group.ant-input-group-compact>*{display:inline-block;float:none;vertical-align:top;border-radius:0}.ant-input-group.ant-input-group-compact>:not(:last-child){margin-right:-1px;border-right-width:1px}.ant-input-group.ant-input-group-compact .ant-input{float:none}.ant-input-group.ant-input-group-compact>.ant-calendar-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selection,.ant-input-group.ant-input-group-compact>.ant-time-picker .ant-time-picker-input{border-right-width:1px;border-radius:0}.ant-input-group.ant-input-group-compact>.ant-calendar-picker .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-calendar-picker .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper .ant-mention-editor:focus,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper .ant-mention-editor:hover,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-select-focused,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selection:focus,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selection:hover,.ant-input-group.ant-input-group-compact>.ant-time-picker .ant-time-picker-input:focus,.ant-input-group.ant-input-group-compact>.ant-time-picker .ant-time-picker-input:hover{z-index:1}.ant-input-group.ant-input-group-compact>.ant-calendar-picker:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper:first-child .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selection,.ant-input-group.ant-input-group-compact>.ant-time-picker:first-child .ant-time-picker-input,.ant-input-group.ant-input-group-compact>:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-input-group.ant-input-group-compact>.ant-calendar-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker-focused:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper:last-child .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selection,.ant-input-group.ant-input-group-compact>.ant-time-picker:last-child .ant-time-picker-input,.ant-input-group.ant-input-group-compact>:last-child{border-right-width:1px;border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input{vertical-align:top}.ant-input-group-wrapper{display:inline-block;width:100%;text-align:start;vertical-align:top}.ant-input-affix-wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;width:100%;text-align:start}.ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled){border-color:#40a9ff;border-right-width:1px!important}.ant-input-affix-wrapper .ant-input{position:relative;text-align:inherit}.ant-input-affix-wrapper .ant-input-prefix,.ant-input-affix-wrapper .ant-input-suffix{position:absolute;top:50%;z-index:2;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:rgba(0,0,0,.65);line-height:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ant-input-affix-wrapper .ant-input-prefix :not(.anticon),.ant-input-affix-wrapper .ant-input-suffix :not(.anticon){line-height:1.5}.ant-input-affix-wrapper .ant-input-disabled~.ant-input-suffix .anticon{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-input-affix-wrapper .ant-input-prefix{left:12px}.ant-input-affix-wrapper .ant-input-suffix{right:12px}.ant-input-affix-wrapper .ant-input:not(:first-child){padding-left:30px}.ant-input-affix-wrapper .ant-input:not(:last-child){padding-right:30px}.ant-input-affix-wrapper.ant-input-affix-wrapper-input-with-clear-btn .ant-input:not(:last-child){padding-right:49px}.ant-input-affix-wrapper.ant-input-affix-wrapper-textarea-with-clear-btn .ant-input{padding-right:22px}.ant-input-password-icon{color:rgba(0,0,0,.45);cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-input-password-icon:hover{color:#333}.ant-input-clear-icon{color:rgba(0,0,0,.25);font-size:12px;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;vertical-align:0}.ant-input-clear-icon:hover{color:rgba(0,0,0,.45)}.ant-input-clear-icon:active{color:rgba(0,0,0,.65)}.ant-input-clear-icon+i{margin-left:6px}.ant-input-textarea-clear-icon{color:rgba(0,0,0,.25);font-size:12px;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;position:absolute;top:0;right:0;margin:8px 8px 0 0}.ant-input-textarea-clear-icon:hover{color:rgba(0,0,0,.45)}.ant-input-textarea-clear-icon:active{color:rgba(0,0,0,.65)}.ant-input-textarea-clear-icon+i{margin-left:6px}.ant-input-search-icon{color:rgba(0,0,0,.45);cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-input-search-icon:hover{color:rgba(0,0,0,.8)}.ant-input-search-enter-button input{border-right:0}.ant-input-search-enter-button+.ant-input-group-addon,.ant-input-search-enter-button input+.ant-input-group-addon{padding:0;border:0}.ant-input-search-enter-button+.ant-input-group-addon .ant-input-search-button,.ant-input-search-enter-button input+.ant-input-group-addon .ant-input-search-button{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-number{-webkit-box-sizing:border-box;box-sizing:border-box;font-variant:tabular-nums;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;width:100%;height:32px;padding:4px 11px;color:rgba(0,0,0,.65);font-size:14px;line-height:1.5;background-color:#fff;background-image:none;-webkit-transition:all .3s;transition:all .3s;display:inline-block;width:90px;margin:0;padding:0;border:1px solid #d9d9d9;border-radius:4px}.ant-input-number::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-input-number:-ms-input-placeholder{color:#bfbfbf}.ant-input-number::-webkit-input-placeholder{color:#bfbfbf}.ant-input-number:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input-number:-ms-input-placeholder{text-overflow:ellipsis}.ant-input-number:placeholder-shown{text-overflow:ellipsis}.ant-input-number:focus{border-color:#40a9ff;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-input-number[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-input-number[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}textarea.ant-input-number{max-width:100%;height:auto;min-height:32px;line-height:1.5;vertical-align:bottom;-webkit-transition:all .3s,height 0s;transition:all .3s,height 0s}.ant-input-number-lg{height:40px;padding:6px 11px}.ant-input-number-sm{height:24px;padding:1px 7px}.ant-input-number-handler{position:relative;display:block;width:100%;height:50%;overflow:hidden;color:rgba(0,0,0,.45);font-weight:700;line-height:0;text-align:center;-webkit-transition:all .1s linear;transition:all .1s linear}.ant-input-number-handler:active{background:#f4f4f4}.ant-input-number-handler:hover .ant-input-number-handler-down-inner,.ant-input-number-handler:hover .ant-input-number-handler-up-inner{color:#40a9ff}.ant-input-number-handler-down-inner,.ant-input-number-handler-up-inner{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;right:4px;width:12px;height:12px;color:rgba(0,0,0,.45);line-height:12px;-webkit-transition:all .1s linear;transition:all .1s linear;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-input-number-handler-down-inner>*,.ant-input-number-handler-up-inner>*{line-height:1}.ant-input-number-handler-down-inner svg,.ant-input-number-handler-up-inner svg{display:inline-block}.ant-input-number-handler-down-inner:before,.ant-input-number-handler-up-inner:before{display:none}.ant-input-number-handler-down-inner .ant-input-number-handler-down-inner-icon,.ant-input-number-handler-down-inner .ant-input-number-handler-up-inner-icon,.ant-input-number-handler-up-inner .ant-input-number-handler-down-inner-icon,.ant-input-number-handler-up-inner .ant-input-number-handler-up-inner-icon{display:block}.ant-input-number-focused,.ant-input-number:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-input-number-focused{outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-input-number-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-input-number-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-number-disabled .ant-input-number-input{cursor:not-allowed}.ant-input-number-disabled .ant-input-number-handler-wrap{display:none}.ant-input-number-input{width:100%;height:30px;padding:0 11px;text-align:left;background-color:transparent;border:0;border-radius:4px;outline:0;-webkit-transition:all .3s linear;transition:all .3s linear;-moz-appearance:textfield!important}.ant-input-number-input::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-input-number-input:-ms-input-placeholder{color:#bfbfbf}.ant-input-number-input::-webkit-input-placeholder{color:#bfbfbf}.ant-input-number-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input-number-input:-ms-input-placeholder{text-overflow:ellipsis}.ant-input-number-input:placeholder-shown{text-overflow:ellipsis}.ant-input-number-input[type=number]::-webkit-inner-spin-button,.ant-input-number-input[type=number]::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.ant-input-number-lg{padding:0;font-size:16px}.ant-input-number-lg input{height:38px}.ant-input-number-sm{padding:0}.ant-input-number-sm input{height:22px;padding:0 7px}.ant-input-number-handler-wrap{position:absolute;top:0;right:0;width:22px;height:100%;background:#fff;border-left:1px solid #d9d9d9;border-radius:0 4px 4px 0;opacity:0;-webkit-transition:opacity .24s linear .1s;transition:opacity .24s linear .1s}.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-down-inner,.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-up-inner{display:inline-block;font-size:12px;font-size:7px\9;-webkit-transform:scale(.58333333) rotate(0deg);transform:scale(.58333333) rotate(0deg);min-width:auto;margin-right:0}:root .ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-down-inner,:root .ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-up-inner{font-size:12px}.ant-input-number-handler-wrap:hover .ant-input-number-handler{height:40%}.ant-input-number:hover .ant-input-number-handler-wrap{opacity:1}.ant-input-number-handler-up{border-top-right-radius:4px;cursor:pointer}.ant-input-number-handler-up-inner{top:50%;margin-top:-5px;text-align:center}.ant-input-number-handler-up:hover{height:60%!important}.ant-input-number-handler-down{top:0;border-top:1px solid #d9d9d9;border-bottom-right-radius:4px;cursor:pointer}.ant-input-number-handler-down-inner{top:50%;margin-top:-6px;text-align:center}.ant-input-number-handler-down:hover{height:60%!important}.ant-input-number-handler-down-disabled,.ant-input-number-handler-up-disabled{cursor:not-allowed}.ant-input-number-handler-down-disabled:hover .ant-input-number-handler-down-inner,.ant-input-number-handler-up-disabled:hover .ant-input-number-handler-up-inner{color:rgba(0,0,0,.25)}.ant-layout{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:auto;flex:auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:0;background:#f0f2f5}.ant-layout,.ant-layout *{-webkit-box-sizing:border-box;box-sizing:border-box}.ant-layout.ant-layout-has-sider{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.ant-layout.ant-layout-has-sider>.ant-layout,.ant-layout.ant-layout-has-sider>.ant-layout-content{overflow-x:hidden}.ant-layout-footer,.ant-layout-header{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.ant-layout-header{height:64px;padding:0 50px;line-height:64px;background:#001529}.ant-layout-footer{padding:24px 50px;color:rgba(0,0,0,.65);font-size:14px;background:#f0f2f5}.ant-layout-content{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-height:0}.ant-layout-sider{position:relative;min-width:0;background:#001529;-webkit-transition:all .2s;transition:all .2s}.ant-layout-sider-children{height:100%;margin-top:-.1px;padding-top:.1px}.ant-layout-sider-has-trigger{padding-bottom:48px}.ant-layout-sider-right{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-layout-sider-trigger{position:fixed;bottom:0;z-index:1;height:48px;color:#fff;line-height:48px;text-align:center;background:#002140;cursor:pointer;-webkit-transition:all .2s;transition:all .2s}.ant-layout-sider-zero-width>*{overflow:hidden}.ant-layout-sider-zero-width-trigger{position:absolute;top:64px;right:-36px;z-index:1;width:36px;height:42px;color:#fff;font-size:18px;line-height:42px;text-align:center;background:#001529;border-radius:0 4px 4px 0;cursor:pointer;-webkit-transition:background .3s ease;transition:background .3s ease}.ant-layout-sider-zero-width-trigger:hover{background:#192c3e}.ant-layout-sider-zero-width-trigger-right{left:-36px;border-radius:4px 0 0 4px}.ant-layout-sider-light{background:#fff}.ant-layout-sider-light .ant-layout-sider-trigger,.ant-layout-sider-light .ant-layout-sider-zero-width-trigger{color:rgba(0,0,0,.65);background:#fff}.ant-list{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative}.ant-list *{outline:none}.ant-list-pagination{margin-top:24px;text-align:right}.ant-list-pagination .ant-pagination-options{text-align:left}.ant-list-more{margin-top:12px;text-align:center}.ant-list-more button{padding-right:32px;padding-left:32px}.ant-list-spin{min-height:40px;text-align:center}.ant-list-empty-text{padding:16px;color:rgba(0,0,0,.25);font-size:14px;text-align:center}.ant-list-items{margin:0;padding:0;list-style:none}.ant-list-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 0}.ant-list-item-content{color:rgba(0,0,0,.65)}.ant-list-item-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;font-size:0}.ant-list-item-meta-avatar{margin-right:16px}.ant-list-item-meta-content{-webkit-box-flex:1;-ms-flex:1 0;flex:1 0}.ant-list-item-meta-title{margin-bottom:4px;color:rgba(0,0,0,.65);font-size:14px;line-height:22px}.ant-list-item-meta-title>a{color:rgba(0,0,0,.65);-webkit-transition:all .3s;transition:all .3s}.ant-list-item-meta-title>a:hover{color:#1890ff}.ant-list-item-meta-description{color:rgba(0,0,0,.45);font-size:14px;line-height:22px}.ant-list-item-action{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-left:48px;padding:0;font-size:0;list-style:none}.ant-list-item-action>li{position:relative;display:inline-block;padding:0 8px;color:rgba(0,0,0,.45);font-size:14px;line-height:22px;text-align:center;cursor:pointer}.ant-list-item-action>li:first-child{padding-left:0}.ant-list-item-action-split{position:absolute;top:50%;right:0;width:1px;height:14px;margin-top:-7px;background-color:#e8e8e8}.ant-list-footer,.ant-list-header{background:transparent}.ant-list-footer,.ant-list-header{padding-top:12px;padding-bottom:12px}.ant-list-empty{padding:16px 0;color:rgba(0,0,0,.45);font-size:12px;text-align:center}.ant-list-split .ant-list-item{border-bottom:1px solid #e8e8e8}.ant-list-split .ant-list-item:last-child{border-bottom:none}.ant-list-split .ant-list-header{border-bottom:1px solid #e8e8e8}.ant-list-loading .ant-list-spin-nested-loading{min-height:32px}.ant-list-something-after-last-item .ant-spin-container>.ant-list-items>.ant-list-item:last-child{border-bottom:1px solid #e8e8e8}.ant-list-lg .ant-list-item{padding-top:16px;padding-bottom:16px}.ant-list-sm .ant-list-item{padding-top:8px;padding-bottom:8px}.ant-list-vertical .ant-list-item{-webkit-box-align:initial;-ms-flex-align:initial;align-items:normal}.ant-list-vertical .ant-list-item-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1}.ant-list-vertical .ant-list-item-extra{margin-left:40px}.ant-list-vertical .ant-list-item-meta{margin-bottom:16px}.ant-list-vertical .ant-list-item-meta-title{margin-bottom:12px;color:rgba(0,0,0,.85);font-size:16px;line-height:24px}.ant-list-vertical .ant-list-item-action{margin-top:16px;margin-left:auto}.ant-list-vertical .ant-list-item-action>li{padding:0 16px}.ant-list-vertical .ant-list-item-action>li:first-child{padding-left:0}.ant-list-grid .ant-col>.ant-list-item{display:block;max-width:100%;margin-bottom:16px;padding-top:0;padding-bottom:0;border-bottom:none}.ant-list-item-no-flex{display:block}.ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action{float:right}.ant-list-bordered{border:1px solid #d9d9d9;border-radius:4px}.ant-list-bordered .ant-list-footer,.ant-list-bordered .ant-list-header,.ant-list-bordered .ant-list-item{padding-right:24px;padding-left:24px}.ant-list-bordered .ant-list-item{border-bottom:1px solid #e8e8e8}.ant-list-bordered .ant-list-pagination{margin:16px 24px}.ant-list-bordered.ant-list-sm .ant-list-item{padding-right:16px;padding-left:16px}.ant-list-bordered.ant-list-sm .ant-list-footer,.ant-list-bordered.ant-list-sm .ant-list-header{padding:8px 16px}.ant-list-bordered.ant-list-lg .ant-list-footer,.ant-list-bordered.ant-list-lg .ant-list-header{padding:16px 24px}@media screen and (max-width:768px){.ant-list-item-action,.ant-list-vertical .ant-list-item-extra{margin-left:24px}}@media screen and (max-width:576px){.ant-list-item{-ms-flex-wrap:wrap;flex-wrap:wrap}.ant-list-item-action{margin-left:12px}.ant-list-vertical .ant-list-item{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.ant-list-vertical .ant-list-item-main{min-width:220px}.ant-list-vertical .ant-list-item-extra{margin:auto auto 16px}}.ant-mentions{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;font-variant:tabular-nums;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";width:100%;height:32px;padding:4px 11px;color:rgba(0,0,0,.65);font-size:14px;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:4px;-webkit-transition:all .3s;transition:all .3s;position:relative;display:inline-block;height:auto;padding:0;overflow:hidden;line-height:1.5;white-space:pre-wrap;vertical-align:bottom}.ant-mentions::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-mentions:-ms-input-placeholder{color:#bfbfbf}.ant-mentions::-webkit-input-placeholder{color:#bfbfbf}.ant-mentions:-moz-placeholder-shown{text-overflow:ellipsis}.ant-mentions:-ms-input-placeholder{text-overflow:ellipsis}.ant-mentions:placeholder-shown{text-overflow:ellipsis}.ant-mentions:focus,.ant-mentions:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-mentions:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-mentions-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-mentions-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-mentions[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-mentions[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}textarea.ant-mentions{max-width:100%;height:auto;min-height:32px;line-height:1.5;vertical-align:bottom;-webkit-transition:all .3s,height 0s;transition:all .3s,height 0s}.ant-mentions-lg{height:40px;padding:6px 11px;font-size:16px}.ant-mentions-sm{height:24px;padding:1px 7px}.ant-mentions-disabled>textarea{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-mentions-disabled>textarea:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-mentions-focused{border-color:#40a9ff;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-mentions-measure,.ant-mentions>textarea{min-height:30px;margin:0;padding:4px 11px;overflow:inherit;overflow-x:hidden;overflow-y:auto;font-weight:inherit;font-size:inherit;font-family:inherit;font-style:inherit;font-variant:inherit;font-size-adjust:inherit;font-stretch:inherit;line-height:inherit;direction:inherit;letter-spacing:inherit;white-space:inherit;text-align:inherit;vertical-align:top;word-wrap:break-word;word-break:inherit;-moz-tab-size:inherit;-o-tab-size:inherit;tab-size:inherit}.ant-mentions>textarea{width:100%;border:none;outline:none;resize:none}.ant-mentions>textarea::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-mentions>textarea:-ms-input-placeholder{color:#bfbfbf}.ant-mentions>textarea::-webkit-input-placeholder{color:#bfbfbf}.ant-mentions>textarea:-moz-placeholder-shown{text-overflow:ellipsis}.ant-mentions>textarea:-ms-input-placeholder{text-overflow:ellipsis}.ant-mentions>textarea:placeholder-shown{text-overflow:ellipsis}.ant-mentions>textarea:-moz-read-only{cursor:default}.ant-mentions>textarea:read-only{cursor:default}.ant-mentions-measure{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;color:transparent;pointer-events:none}.ant-mentions-measure>span{display:inline-block;min-height:1em}.ant-mentions-dropdown{margin:0;padding:0;color:rgba(0,0,0,.65);font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:14px;font-variant:normal;background-color:#fff;border-radius:4px;outline:none;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-mentions-dropdown-hidden{display:none}.ant-mentions-dropdown-menu{max-height:250px;margin-bottom:0;padding-left:0;overflow:auto;list-style:none;outline:none}.ant-mentions-dropdown-menu-item{position:relative;display:block;min-width:100px;padding:5px 12px;overflow:hidden;color:rgba(0,0,0,.65);font-weight:400;line-height:22px;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;-webkit-transition:background .3s ease;transition:background .3s ease}.ant-mentions-dropdown-menu-item:hover{background-color:#e6f7ff}.ant-mentions-dropdown-menu-item:first-child{border-radius:4px 4px 0 0}.ant-mentions-dropdown-menu-item:last-child{border-radius:0 0 4px 4px}.ant-mentions-dropdown-menu-item-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-mentions-dropdown-menu-item-disabled:hover{color:rgba(0,0,0,.25);background-color:#fff;cursor:not-allowed}.ant-mentions-dropdown-menu-item-selected{color:rgba(0,0,0,.65);font-weight:600;background-color:#fafafa}.ant-mentions-dropdown-menu-item-active{background-color:#e6f7ff}.ant-menu{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;font-size:14px;font-variant:tabular-nums;line-height:1.5;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";margin-bottom:0;padding-left:0;color:rgba(0,0,0,.65);line-height:0;list-style:none;background:#fff;outline:none;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15);-webkit-transition:background .3s,width .3s cubic-bezier(.2,0,0,1) 0s;transition:background .3s,width .3s cubic-bezier(.2,0,0,1) 0s;zoom:1}.ant-menu:after,.ant-menu:before{display:table;content:""}.ant-menu:after{clear:both}.ant-menu ol,.ant-menu ul{margin:0;padding:0;list-style:none}.ant-menu-hidden{display:none}.ant-menu-item-group-title{padding:8px 16px;color:rgba(0,0,0,.45);font-size:14px;line-height:1.5;-webkit-transition:all .3s;transition:all .3s}.ant-menu-submenu,.ant-menu-submenu-inline{-webkit-transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1);transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-selected{color:#1890ff}.ant-menu-item:active,.ant-menu-submenu-title:active{background:#e6f7ff}.ant-menu-submenu .ant-menu-sub{cursor:auto;-webkit-transition:background .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:background .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item>a{display:block;color:rgba(0,0,0,.65)}.ant-menu-item>a:hover{color:#1890ff}.ant-menu-item>a:before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:transparent;content:""}.ant-menu-item>.ant-badge>a{color:rgba(0,0,0,.65)}.ant-menu-item>.ant-badge>a:hover{color:#1890ff}.ant-menu-item-divider{height:1px;overflow:hidden;line-height:0;background-color:#e8e8e8}.ant-menu-item-active,.ant-menu-item:hover,.ant-menu-submenu-active,.ant-menu-submenu-title:hover,.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open{color:#1890ff}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu{margin-top:-1px}.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-submenu .ant-menu-submenu-title:hover{background-color:transparent}.ant-menu-item-selected,.ant-menu-item-selected>a,.ant-menu-item-selected>a:hover{color:#1890ff}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:#e6f7ff}.ant-menu-inline,.ant-menu-vertical,.ant-menu-vertical-left{border-right:1px solid #e8e8e8}.ant-menu-vertical-right{border-left:1px solid #e8e8e8}.ant-menu-vertical-left.ant-menu-sub,.ant-menu-vertical-right.ant-menu-sub,.ant-menu-vertical.ant-menu-sub{min-width:160px;padding:0;border-right:0;-webkit-transform-origin:0 0;transform-origin:0 0}.ant-menu-vertical-left.ant-menu-sub .ant-menu-item,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item,.ant-menu-vertical.ant-menu-sub .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-vertical-left.ant-menu-sub .ant-menu-item:after,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item:after,.ant-menu-vertical.ant-menu-sub .ant-menu-item:after{border-right:0}.ant-menu-vertical-left.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-left.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical.ant-menu-sub>.ant-menu-item,.ant-menu-vertical.ant-menu-sub>.ant-menu-submenu{-webkit-transform-origin:0 0;transform-origin:0 0}.ant-menu-horizontal.ant-menu-sub{min-width:114px}.ant-menu-item,.ant-menu-submenu-title{position:relative;display:block;margin:0;padding:0 20px;white-space:nowrap;cursor:pointer;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-item .anticon,.ant-menu-submenu-title .anticon{min-width:14px;margin-right:10px;font-size:14px;-webkit-transition:font-size .15s cubic-bezier(.215,.61,.355,1),margin .3s cubic-bezier(.645,.045,.355,1);transition:font-size .15s cubic-bezier(.215,.61,.355,1),margin .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item .anticon+span,.ant-menu-submenu-title .anticon+span{opacity:1;-webkit-transition:opacity .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1);transition:opacity .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1)}.ant-menu>.ant-menu-item-divider{height:1px;margin:1px 0;padding:0;overflow:hidden;line-height:0;background-color:#e8e8e8}.ant-menu-submenu-popup{position:absolute;z-index:1050;border-radius:4px}.ant-menu-submenu-popup .submenu-title-wrapper{padding-right:20px}.ant-menu-submenu-popup:before{position:absolute;top:-7px;right:0;bottom:0;left:0;opacity:.0001;content:" "}.ant-menu-submenu>.ant-menu{background-color:#fff;border-radius:4px}.ant-menu-submenu>.ant-menu-submenu-title:after{-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow{position:absolute;top:50%;right:16px;width:10px;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{position:absolute;width:6px;height:1.5px;background:#fff;background:rgba(0,0,0,.65)\9;background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.65)),to(rgba(0,0,0,.65)));background-image:linear-gradient(90deg,rgba(0,0,0,.65),rgba(0,0,0,.65));background-image:none\9;border-radius:2px;-webkit-transition:background .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:background .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:background .3s cubic-bezier(.645,.045,.355,1),transform .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1);transition:background .3s cubic-bezier(.645,.045,.355,1),transform .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);content:""}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{-webkit-transform:rotate(45deg) translateY(-2px);transform:rotate(45deg) translateY(-2px)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:after{-webkit-transform:rotate(-45deg) translateY(2px);transform:rotate(-45deg) translateY(2px)}.ant-menu-submenu-inline>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after,.ant-menu-submenu-inline>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before{background:-webkit-gradient(linear,left top,right top,from(#1890ff),to(#1890ff));background:linear-gradient(90deg,#1890ff,#1890ff)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{-webkit-transform:rotate(-45deg) translateX(2px);transform:rotate(-45deg) translateX(2px)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:after{-webkit-transform:rotate(45deg) translateX(-2px);transform:rotate(45deg) translateX(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow{-webkit-transform:translateY(-2px);transform:translateY(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:after{-webkit-transform:rotate(-45deg) translateX(-2px);transform:rotate(-45deg) translateX(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{-webkit-transform:rotate(45deg) translateX(2px);transform:rotate(45deg) translateX(2px)}.ant-menu-vertical-left .ant-menu-submenu-selected,.ant-menu-vertical-left .ant-menu-submenu-selected>a,.ant-menu-vertical-right .ant-menu-submenu-selected,.ant-menu-vertical-right .ant-menu-submenu-selected>a,.ant-menu-vertical .ant-menu-submenu-selected,.ant-menu-vertical .ant-menu-submenu-selected>a{color:#1890ff}.ant-menu-horizontal{line-height:46px;white-space:nowrap;border:0;border-bottom:1px solid #e8e8e8;-webkit-box-shadow:none;box-shadow:none}.ant-menu-horizontal>.ant-menu-item,.ant-menu-horizontal>.ant-menu-submenu{position:relative;top:1px;display:inline-block;vertical-align:bottom;border-bottom:2px solid transparent}.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-item-open,.ant-menu-horizontal>.ant-menu-item-selected,.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-submenu-active,.ant-menu-horizontal>.ant-menu-submenu-open,.ant-menu-horizontal>.ant-menu-submenu-selected,.ant-menu-horizontal>.ant-menu-submenu:hover{color:#1890ff;border-bottom:2px solid #1890ff}.ant-menu-horizontal>.ant-menu-item>a{display:block;color:rgba(0,0,0,.65)}.ant-menu-horizontal>.ant-menu-item>a:hover{color:#1890ff}.ant-menu-horizontal>.ant-menu-item>a:before{bottom:-2px}.ant-menu-horizontal>.ant-menu-item-selected>a{color:#1890ff}.ant-menu-horizontal:after{display:block;clear:both;height:0;content:"\20"}.ant-menu-inline .ant-menu-item,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-right .ant-menu-item,.ant-menu-vertical .ant-menu-item{position:relative}.ant-menu-inline .ant-menu-item:after,.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-vertical .ant-menu-item:after{position:absolute;top:0;right:0;bottom:0;border-right:3px solid #1890ff;-webkit-transform:scaleY(.0001);transform:scaleY(.0001);opacity:0;-webkit-transition:opacity .15s cubic-bezier(.215,.61,.355,1),-webkit-transform .15s cubic-bezier(.215,.61,.355,1);transition:opacity .15s cubic-bezier(.215,.61,.355,1),-webkit-transform .15s cubic-bezier(.215,.61,.355,1);transition:transform .15s cubic-bezier(.215,.61,.355,1),opacity .15s cubic-bezier(.215,.61,.355,1);transition:transform .15s cubic-bezier(.215,.61,.355,1),opacity .15s cubic-bezier(.215,.61,.355,1),-webkit-transform .15s cubic-bezier(.215,.61,.355,1);content:""}.ant-menu-inline .ant-menu-item,.ant-menu-inline .ant-menu-submenu-title,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-left .ant-menu-submenu-title,.ant-menu-vertical-right .ant-menu-item,.ant-menu-vertical-right .ant-menu-submenu-title,.ant-menu-vertical .ant-menu-item,.ant-menu-vertical .ant-menu-submenu-title{height:40px;margin-top:4px;margin-bottom:4px;padding:0 16px;overflow:hidden;font-size:14px;line-height:40px;text-overflow:ellipsis}.ant-menu-inline .ant-menu-submenu,.ant-menu-vertical-left .ant-menu-submenu,.ant-menu-vertical-right .ant-menu-submenu,.ant-menu-vertical .ant-menu-submenu{padding-bottom:.02px}.ant-menu-inline .ant-menu-item:not(:last-child),.ant-menu-vertical-left .ant-menu-item:not(:last-child),.ant-menu-vertical-right .ant-menu-item:not(:last-child),.ant-menu-vertical .ant-menu-item:not(:last-child){margin-bottom:8px}.ant-menu-inline>.ant-menu-item,.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-left>.ant-menu-item,.ant-menu-vertical-left>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-right>.ant-menu-item,.ant-menu-vertical-right>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical>.ant-menu-item,.ant-menu-vertical>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px}.ant-menu-inline{width:100%}.ant-menu-inline .ant-menu-item-selected:after,.ant-menu-inline .ant-menu-selected:after{-webkit-transform:scaleY(1);transform:scaleY(1);opacity:1;-webkit-transition:opacity .15s cubic-bezier(.645,.045,.355,1),-webkit-transform .15s cubic-bezier(.645,.045,.355,1);transition:opacity .15s cubic-bezier(.645,.045,.355,1),-webkit-transform .15s cubic-bezier(.645,.045,.355,1);transition:transform .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1);transition:transform .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1),-webkit-transform .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-inline .ant-menu-item,.ant-menu-inline .ant-menu-submenu-title{width:calc(100% + 1px)}.ant-menu-inline .ant-menu-submenu-title{padding-right:34px}.ant-menu-inline-collapsed{width:80px}.ant-menu-inline-collapsed>.ant-menu-item,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title{left:0;padding:0 32px!important;text-overflow:clip}.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow{display:none}.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon,.ant-menu-inline-collapsed>.ant-menu-item .anticon,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon{margin:0;font-size:16px;line-height:40px}.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon+span,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span,.ant-menu-inline-collapsed>.ant-menu-item .anticon+span,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span{display:inline-block;max-width:0;opacity:0}.ant-menu-inline-collapsed-tooltip{pointer-events:none}.ant-menu-inline-collapsed-tooltip .anticon{display:none}.ant-menu-inline-collapsed-tooltip a{color:hsla(0,0%,100%,.85)}.ant-menu-inline-collapsed .ant-menu-item-group-title{padding-right:4px;padding-left:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-menu-item-group-list{margin:0;padding:0}.ant-menu-item-group-list .ant-menu-item,.ant-menu-item-group-list .ant-menu-submenu-title{padding:0 16px 0 28px}.ant-menu-root.ant-menu-inline,.ant-menu-root.ant-menu-vertical,.ant-menu-root.ant-menu-vertical-left,.ant-menu-root.ant-menu-vertical-right,.ant-menu-sub.ant-menu-inline{-webkit-box-shadow:none;box-shadow:none}.ant-menu-sub.ant-menu-inline{padding:0;border:0;border-radius:0}.ant-menu-sub.ant-menu-inline>.ant-menu-item,.ant-menu-sub.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px;list-style-position:inside;list-style-type:disc}.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title{padding-left:32px}.ant-menu-item-disabled,.ant-menu-submenu-disabled{color:rgba(0,0,0,.25)!important;background:none;border-color:transparent!important;cursor:not-allowed}.ant-menu-item-disabled>a,.ant-menu-submenu-disabled>a{color:rgba(0,0,0,.25)!important;pointer-events:none}.ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-submenu-disabled>.ant-menu-submenu-title{color:rgba(0,0,0,.25)!important;cursor:not-allowed}.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:rgba(0,0,0,.25)!important}.ant-menu-dark,.ant-menu-dark .ant-menu-sub{color:hsla(0,0%,100%,.65);background:#001529}.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow{opacity:.45;-webkit-transition:all .3s;transition:all .3s}.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:before{background:#fff}.ant-menu-dark.ant-menu-submenu-popup{background:transparent}.ant-menu-dark .ant-menu-inline.ant-menu-sub{background:#000c17;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.45) inset;box-shadow:inset 0 2px 8px rgba(0,0,0,.45)}.ant-menu-dark.ant-menu-horizontal{border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item,.ant-menu-dark.ant-menu-horizontal>.ant-menu-submenu{top:0;margin-top:0;border-color:#001529;border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item>a:before{bottom:0}.ant-menu-dark .ant-menu-item,.ant-menu-dark .ant-menu-item-group-title,.ant-menu-dark .ant-menu-item>a{color:hsla(0,0%,100%,.65)}.ant-menu-dark.ant-menu-inline,.ant-menu-dark.ant-menu-vertical,.ant-menu-dark.ant-menu-vertical-left,.ant-menu-dark.ant-menu-vertical-right{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item,.ant-menu-dark.ant-menu-vertical .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical .ant-menu-item:after{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-inline .ant-menu-submenu-title{width:100%}.ant-menu-dark .ant-menu-item-active,.ant-menu-dark .ant-menu-item:hover,.ant-menu-dark .ant-menu-submenu-active,.ant-menu-dark .ant-menu-submenu-open,.ant-menu-dark .ant-menu-submenu-selected,.ant-menu-dark .ant-menu-submenu-title:hover{color:#fff;background-color:transparent}.ant-menu-dark .ant-menu-item-active>a,.ant-menu-dark .ant-menu-item:hover>a,.ant-menu-dark .ant-menu-submenu-active>a,.ant-menu-dark .ant-menu-submenu-open>a,.ant-menu-dark .ant-menu-submenu-selected>a,.ant-menu-dark .ant-menu-submenu-title:hover>a{color:#fff}.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow{opacity:1}.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:#fff}.ant-menu-dark .ant-menu-item:hover{background-color:transparent}.ant-menu-dark .ant-menu-item-selected{color:#fff;border-right:0}.ant-menu-dark .ant-menu-item-selected:after{border-right:0}.ant-menu-dark .ant-menu-item-selected .anticon,.ant-menu-dark .ant-menu-item-selected .anticon+span,.ant-menu-dark .ant-menu-item-selected>a,.ant-menu-dark .ant-menu-item-selected>a:hover{color:#fff}.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected,.ant-menu.ant-menu-dark .ant-menu-item-selected{background-color:#1890ff}.ant-menu-dark .ant-menu-item-disabled,.ant-menu-dark .ant-menu-item-disabled>a,.ant-menu-dark .ant-menu-submenu-disabled,.ant-menu-dark .ant-menu-submenu-disabled>a{color:hsla(0,0%,100%,.35)!important;opacity:.8}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title{color:hsla(0,0%,100%,.35)!important}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:hsla(0,0%,100%,.35)!important}.ant-message{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:fixed;top:16px;left:0;z-index:1010;width:100%;pointer-events:none}.ant-message-notice{padding:8px;text-align:center}.ant-message-notice:first-child{margin-top:-8px}.ant-message-notice-content{display:inline-block;padding:10px 16px;background:#fff;border-radius:4px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15);pointer-events:all}.ant-message-success .anticon{color:#52c41a}.ant-message-error .anticon{color:#f5222d}.ant-message-warning .anticon{color:#faad14}.ant-message-info .anticon,.ant-message-loading .anticon{color:#1890ff}.ant-message .anticon{position:relative;top:1px;margin-right:8px;font-size:16px}.ant-message-notice.move-up-leave.move-up-leave-active{overflow:hidden;-webkit-animation-name:MessageMoveOut;animation-name:MessageMoveOut;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1}to{max-height:0;padding:0;opacity:0}}@keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1}to{max-height:0;padding:0;opacity:0}}.ant-modal{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;top:100px;width:auto;margin:0 auto;padding-bottom:24px;pointer-events:none}.ant-modal-wrap{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;overflow:auto;outline:0;-webkit-overflow-scrolling:touch}.ant-modal-title{margin:0;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;line-height:22px;word-wrap:break-word}.ant-modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:0;border-radius:4px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15);pointer-events:auto}.ant-modal-close{position:absolute;top:0;right:0;z-index:10;padding:0;color:rgba(0,0,0,.45);font-weight:700;line-height:1;text-decoration:none;background:transparent;border:0;outline:0;cursor:pointer;-webkit-transition:color .3s;transition:color .3s}.ant-modal-close-x{display:block;width:56px;height:56px;font-size:16px;font-style:normal;line-height:56px;text-align:center;text-transform:none;text-rendering:auto}.ant-modal-close:focus,.ant-modal-close:hover{color:rgba(0,0,0,.75);text-decoration:none}.ant-modal-header{padding:16px 24px;color:rgba(0,0,0,.65);background:#fff;border-bottom:1px solid #e8e8e8;border-radius:4px 4px 0 0}.ant-modal-body{padding:24px;font-size:14px;line-height:1.5;word-wrap:break-word}.ant-modal-footer{padding:10px 16px;text-align:right;background:transparent;border-top:1px solid #e8e8e8;border-radius:0 0 4px 4px}.ant-modal-footer button+button{margin-bottom:0;margin-left:8px}.ant-modal.zoom-appear,.ant-modal.zoom-enter{-webkit-transform:none;transform:none;opacity:0;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;height:100%;background-color:rgba(0,0,0,.45);filter:alpha(opacity=50)}.ant-modal-mask-hidden{display:none}.ant-modal-open{overflow:hidden}.ant-modal-centered{text-align:center}.ant-modal-centered:before{display:inline-block;width:0;height:100%;vertical-align:middle;content:""}.ant-modal-centered .ant-modal{top:0;display:inline-block;text-align:left;vertical-align:middle}@media (max-width:767px){.ant-modal{max-width:calc(100vw - 16px);margin:8px auto}.ant-modal-centered .ant-modal{-webkit-box-flex:1;-ms-flex:1;flex:1}}.ant-modal-confirm .ant-modal-header{display:none}.ant-modal-confirm .ant-modal-body{padding:32px 32px 24px}.ant-modal-confirm-body-wrapper{zoom:1}.ant-modal-confirm-body-wrapper:after,.ant-modal-confirm-body-wrapper:before{display:table;content:""}.ant-modal-confirm-body-wrapper:after{clear:both}.ant-modal-confirm-body .ant-modal-confirm-title{display:block;overflow:hidden;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;line-height:1.4}.ant-modal-confirm-body .ant-modal-confirm-content{margin-top:8px;color:rgba(0,0,0,.65);font-size:14px}.ant-modal-confirm-body>.anticon{float:left;margin-right:16px;font-size:22px}.ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-left:38px}.ant-modal-confirm .ant-modal-confirm-btns{float:right;margin-top:24px}.ant-modal-confirm .ant-modal-confirm-btns button+button{margin-bottom:0;margin-left:8px}.ant-modal-confirm-error .ant-modal-confirm-body>.anticon{color:#f5222d}.ant-modal-confirm-confirm .ant-modal-confirm-body>.anticon,.ant-modal-confirm-warning .ant-modal-confirm-body>.anticon{color:#faad14}.ant-modal-confirm-info .ant-modal-confirm-body>.anticon{color:#1890ff}.ant-modal-confirm-success .ant-modal-confirm-body>.anticon{color:#52c41a}.ant-notification{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:fixed;z-index:1010;width:384px;max-width:calc(100vw - 32px);margin-right:24px}.ant-notification-bottomLeft,.ant-notification-topLeft{margin-right:0;margin-left:24px}.ant-notification-bottomLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-bottomLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification-topLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-topLeft .ant-notification-fade-enter.ant-notification-fade-enter-active{-webkit-animation-name:NotificationLeftFadeIn;animation-name:NotificationLeftFadeIn}.ant-notification-close-icon{font-size:14px;cursor:pointer}.ant-notification-notice{position:relative;margin-bottom:16px;padding:16px 24px;overflow:hidden;line-height:1.5;background:#fff;border-radius:4px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15)}.ant-notification-notice-message{display:inline-block;margin-bottom:8px;color:rgba(0,0,0,.85);font-size:16px;line-height:24px}.ant-notification-notice-message-single-line-auto-margin{display:block;width:calc(264px - 100%);max-width:4px;background-color:transparent;pointer-events:none}.ant-notification-notice-message-single-line-auto-margin:before{display:block;content:""}.ant-notification-notice-description{font-size:14px}.ant-notification-notice-closable .ant-notification-notice-message{padding-right:24px}.ant-notification-notice-with-icon .ant-notification-notice-message{margin-bottom:4px;margin-left:48px;font-size:16px}.ant-notification-notice-with-icon .ant-notification-notice-description{margin-left:48px;font-size:14px}.ant-notification-notice-icon{position:absolute;margin-left:4px;font-size:24px;line-height:24px}.anticon.ant-notification-notice-icon-success{color:#52c41a}.anticon.ant-notification-notice-icon-info{color:#1890ff}.anticon.ant-notification-notice-icon-warning{color:#faad14}.anticon.ant-notification-notice-icon-error{color:#f5222d}.ant-notification-notice-close{position:absolute;top:16px;right:22px;color:rgba(0,0,0,.45);outline:none}.ant-notification-notice-close:hover{color:rgba(0,0,0,.67)}.ant-notification-notice-btn{float:right;margin-top:16px}.ant-notification .notification-fade-effect{-webkit-animation-duration:.24s;animation-duration:.24s;-webkit-animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-timing-function:cubic-bezier(.645,.045,.355,1);-webkit-animation-fill-mode:both;animation-fill-mode:both}.ant-notification-fade-appear,.ant-notification-fade-enter{opacity:0;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-notification-fade-appear,.ant-notification-fade-enter,.ant-notification-fade-leave{-webkit-animation-duration:.24s;animation-duration:.24s;-webkit-animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-timing-function:cubic-bezier(.645,.045,.355,1);-webkit-animation-fill-mode:both;animation-fill-mode:both}.ant-notification-fade-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-fade-enter.ant-notification-fade-enter-active{-webkit-animation-name:NotificationFadeIn;animation-name:NotificationFadeIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-notification-fade-leave.ant-notification-fade-leave-active{-webkit-animation-name:NotificationFadeOut;animation-name:NotificationFadeOut;-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes NotificationFadeIn{0%{left:384px;opacity:0}to{left:0;opacity:1}}@keyframes NotificationFadeIn{0%{left:384px;opacity:0}to{left:0;opacity:1}}@-webkit-keyframes NotificationLeftFadeIn{0%{right:384px;opacity:0}to{right:0;opacity:1}}@keyframes NotificationLeftFadeIn{0%{right:384px;opacity:0}to{right:0;opacity:1}}@-webkit-keyframes NotificationFadeOut{0%{max-height:150px;margin-bottom:16px;padding-top:16px 24px;padding-bottom:16px 24px;opacity:1}to{max-height:0;margin-bottom:0;padding-top:0;padding-bottom:0;opacity:0}}@keyframes NotificationFadeOut{0%{max-height:150px;margin-bottom:16px;padding-top:16px 24px;padding-bottom:16px 24px;opacity:1}to{max-height:0;margin-bottom:0;padding-top:0;padding-bottom:0;opacity:0}}.ant-page-header{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;padding:16px 24px;background-color:#fff}.ant-page-header-ghost{background-color:inherit}.ant-page-header.has-breadcrumb{padding-top:12px}.ant-page-header.has-footer{padding-bottom:0}.ant-page-header-back{float:left;margin:8px 0;margin-right:16px;font-size:16px;line-height:1}.ant-page-header-back-button{color:#1890ff;text-decoration:none;outline:none;-webkit-transition:color .3s;transition:color .3s;color:#000;cursor:pointer}.ant-page-header-back-button:focus,.ant-page-header-back-button:hover{color:#40a9ff}.ant-page-header-back-button:active{color:#096dd9}.ant-page-header .ant-divider-vertical{height:14px;margin:0 12px;vertical-align:middle}.ant-breadcrumb+.ant-page-header-heading{margin-top:8px}.ant-page-header-heading{width:100%;overflow:hidden}.ant-page-header-heading-title{display:block;float:left;margin-bottom:0;padding-right:12px;color:rgba(0,0,0,.85);font-weight:600;font-size:20px;line-height:32px}.ant-page-header-heading .ant-avatar{float:left;margin-right:12px}.ant-page-header-heading-sub-title{float:left;margin:5px 0;margin-right:12px;color:rgba(0,0,0,.45);font-size:14px;line-height:22px}.ant-page-header-heading-tags{float:left;margin:4px 0}.ant-page-header-heading-extra{float:right}.ant-page-header-heading-extra>*{margin-left:8px}.ant-page-header-heading-extra>:first-child{margin-left:0}.ant-page-header-content{padding-top:12px;overflow:hidden}.ant-page-header-footer{margin-top:16px}.ant-page-header-footer .ant-tabs-bar{margin-bottom:1px;border-bottom:0}.ant-page-header-footer .ant-tabs-bar .ant-tabs-nav .ant-tabs-tab{padding:8px;font-size:16px}@media (max-width:576px){.ant-page-header-heading-extra{display:block;float:unset;width:100%;padding-top:12px;overflow:hidden}}.ant-pagination{-webkit-box-sizing:border-box;box-sizing:border-box;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.ant-pagination,.ant-pagination ol,.ant-pagination ul{margin:0;padding:0;list-style:none}.ant-pagination:after{display:block;clear:both;height:0;overflow:hidden;visibility:hidden;content:" "}.ant-pagination-item,.ant-pagination-total-text{display:inline-block;height:32px;margin-right:8px;line-height:30px;vertical-align:middle}.ant-pagination-item{min-width:32px;font-family:Arial;text-align:center;list-style:none;background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;outline:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-pagination-item a{display:block;padding:0 6px;color:rgba(0,0,0,.65);-webkit-transition:none;transition:none}.ant-pagination-item a:hover{text-decoration:none}.ant-pagination-item:focus,.ant-pagination-item:hover{border-color:#1890ff;-webkit-transition:all .3s;transition:all .3s}.ant-pagination-item:focus a,.ant-pagination-item:hover a{color:#1890ff}.ant-pagination-item-active{font-weight:500;background:#fff;border-color:#1890ff}.ant-pagination-item-active a{color:#1890ff}.ant-pagination-item-active:focus,.ant-pagination-item-active:hover{border-color:#40a9ff}.ant-pagination-item-active:focus a,.ant-pagination-item-active:hover a{color:#40a9ff}.ant-pagination-jump-next,.ant-pagination-jump-prev{outline:0}.ant-pagination-jump-next .ant-pagination-item-container,.ant-pagination-jump-prev .ant-pagination-item-container{position:relative}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon{display:inline-block;font-size:12px;font-size:12px\9;-webkit-transform:scale(1) rotate(0deg);transform:scale(1) rotate(0deg);color:#1890ff;letter-spacing:-1px;opacity:0;-webkit-transition:all .2s;transition:all .2s}:root .ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon,:root .ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon{font-size:12px}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon-svg,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon-svg{top:0;right:0;bottom:0;left:0;margin:auto}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-ellipsis,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-ellipsis{position:absolute;top:0;right:0;bottom:0;left:0;display:block;margin:auto;color:rgba(0,0,0,.25);letter-spacing:2px;text-align:center;text-indent:.13em;opacity:1;-webkit-transition:all .2s;transition:all .2s}.ant-pagination-jump-next:focus .ant-pagination-item-link-icon,.ant-pagination-jump-next:hover .ant-pagination-item-link-icon,.ant-pagination-jump-prev:focus .ant-pagination-item-link-icon,.ant-pagination-jump-prev:hover .ant-pagination-item-link-icon{opacity:1}.ant-pagination-jump-next:focus .ant-pagination-item-ellipsis,.ant-pagination-jump-next:hover .ant-pagination-item-ellipsis,.ant-pagination-jump-prev:focus .ant-pagination-item-ellipsis,.ant-pagination-jump-prev:hover .ant-pagination-item-ellipsis{opacity:0}.ant-pagination-jump-next,.ant-pagination-jump-prev,.ant-pagination-prev{margin-right:8px}.ant-pagination-jump-next,.ant-pagination-jump-prev,.ant-pagination-next,.ant-pagination-prev{display:inline-block;min-width:32px;height:32px;color:rgba(0,0,0,.65);font-family:Arial;line-height:32px;text-align:center;vertical-align:middle;list-style:none;border-radius:4px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-pagination-next,.ant-pagination-prev{outline:0}.ant-pagination-next a,.ant-pagination-prev a{color:rgba(0,0,0,.65);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-pagination-next:hover a,.ant-pagination-prev:hover a{border-color:#40a9ff}.ant-pagination-next .ant-pagination-item-link,.ant-pagination-prev .ant-pagination-item-link{display:block;height:100%;font-size:12px;text-align:center;background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;outline:none;-webkit-transition:all .3s;transition:all .3s}.ant-pagination-next:focus .ant-pagination-item-link,.ant-pagination-next:hover .ant-pagination-item-link,.ant-pagination-prev:focus .ant-pagination-item-link,.ant-pagination-prev:hover .ant-pagination-item-link{color:#1890ff;border-color:#1890ff}.ant-pagination-disabled,.ant-pagination-disabled:focus,.ant-pagination-disabled:hover{cursor:not-allowed}.ant-pagination-disabled .ant-pagination-item-link,.ant-pagination-disabled:focus .ant-pagination-item-link,.ant-pagination-disabled:focus a,.ant-pagination-disabled:hover .ant-pagination-item-link,.ant-pagination-disabled:hover a,.ant-pagination-disabled a{color:rgba(0,0,0,.25);border-color:#d9d9d9;cursor:not-allowed}.ant-pagination-slash{margin:0 10px 0 5px}.ant-pagination-options{display:inline-block;margin-left:16px;vertical-align:middle}.ant-pagination-options-size-changer.ant-select{display:inline-block;width:auto;margin-right:8px}.ant-pagination-options-quick-jumper{display:inline-block;height:32px;line-height:32px;vertical-align:top}.ant-pagination-options-quick-jumper input{position:relative;display:inline-block;width:100%;height:32px;padding:4px 11px;color:rgba(0,0,0,.65);font-size:14px;line-height:1.5;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:4px;-webkit-transition:all .3s;transition:all .3s;width:50px;margin:0 8px}.ant-pagination-options-quick-jumper input::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-pagination-options-quick-jumper input:-ms-input-placeholder{color:#bfbfbf}.ant-pagination-options-quick-jumper input::-webkit-input-placeholder{color:#bfbfbf}.ant-pagination-options-quick-jumper input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:-ms-input-placeholder{text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:placeholder-shown{text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:focus,.ant-pagination-options-quick-jumper input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-pagination-options-quick-jumper input:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-pagination-options-quick-jumper input-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-pagination-options-quick-jumper input-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-pagination-options-quick-jumper input[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-pagination-options-quick-jumper input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}textarea.ant-pagination-options-quick-jumper input{max-width:100%;height:auto;min-height:32px;line-height:1.5;vertical-align:bottom;-webkit-transition:all .3s,height 0s;transition:all .3s,height 0s}.ant-pagination-options-quick-jumper input-lg{height:40px;padding:6px 11px;font-size:16px}.ant-pagination-options-quick-jumper input-sm{height:24px;padding:1px 7px}.ant-pagination-simple .ant-pagination-next,.ant-pagination-simple .ant-pagination-prev{height:24px;line-height:24px;vertical-align:top}.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link,.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link{height:24px;border:0}.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link:after,.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link:after{height:24px;line-height:24px}.ant-pagination-simple .ant-pagination-simple-pager{display:inline-block;height:24px;margin-right:8px}.ant-pagination-simple .ant-pagination-simple-pager input{-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;margin-right:8px;padding:0 6px;text-align:center;background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;outline:none;-webkit-transition:border-color .3s;transition:border-color .3s}.ant-pagination-simple .ant-pagination-simple-pager input:hover{border-color:#1890ff}.ant-pagination.mini .ant-pagination-simple-pager,.ant-pagination.mini .ant-pagination-total-text{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-item{min-width:24px;height:24px;margin:0;line-height:22px}.ant-pagination.mini .ant-pagination-item:not(.ant-pagination-item-active){background:transparent;border-color:transparent}.ant-pagination.mini .ant-pagination-next,.ant-pagination.mini .ant-pagination-prev{min-width:24px;height:24px;margin:0;line-height:24px}.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link,.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link{background:transparent;border-color:transparent}.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link:after,.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link:after{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-jump-next,.ant-pagination.mini .ant-pagination-jump-prev{height:24px;margin-right:0;line-height:24px}.ant-pagination.mini .ant-pagination-options{margin-left:2px}.ant-pagination.mini .ant-pagination-options-quick-jumper{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-options-quick-jumper input{height:24px;padding:1px 7px;width:44px}.ant-pagination.ant-pagination-disabled{cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item{background:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item a{color:rgba(0,0,0,.25);background:transparent;border:none;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active{background:#dbdbdb;border-color:transparent}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active a{color:#fff}.ant-pagination.ant-pagination-disabled .ant-pagination-item-link,.ant-pagination.ant-pagination-disabled .ant-pagination-item-link:focus,.ant-pagination.ant-pagination-disabled .ant-pagination-item-link:hover{color:rgba(0,0,0,.45);background:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-jump-next:focus .ant-pagination-item-link-icon,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-next:hover .ant-pagination-item-link-icon,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-prev:focus .ant-pagination-item-link-icon,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-prev:hover .ant-pagination-item-link-icon{opacity:0}.ant-pagination.ant-pagination-disabled .ant-pagination-jump-next:focus .ant-pagination-item-ellipsis,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-next:hover .ant-pagination-item-ellipsis,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-prev:focus .ant-pagination-item-ellipsis,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-prev:hover .ant-pagination-item-ellipsis{opacity:1}@media only screen and (max-width:992px){.ant-pagination-item-after-jump-prev,.ant-pagination-item-before-jump-next{display:none}}@media only screen and (max-width:576px){.ant-pagination-options{display:none}}.ant-popover{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;top:0;left:0;z-index:1030;font-weight:400;white-space:normal;text-align:left;cursor:auto;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ant-popover:after{position:absolute;background:hsla(0,0%,100%,.01);content:""}.ant-popover-hidden{display:none}.ant-popover-placement-top,.ant-popover-placement-topLeft,.ant-popover-placement-topRight{padding-bottom:10px}.ant-popover-placement-right,.ant-popover-placement-rightBottom,.ant-popover-placement-rightTop{padding-left:10px}.ant-popover-placement-bottom,.ant-popover-placement-bottomLeft,.ant-popover-placement-bottomRight{padding-top:10px}.ant-popover-placement-left,.ant-popover-placement-leftBottom,.ant-popover-placement-leftTop{padding-right:10px}.ant-popover-inner{background-color:#fff;background-clip:padding-box;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15);-webkit-box-shadow:0 0 8px rgba(0,0,0,.15)\9;box-shadow:0 0 8px rgba(0,0,0,.15)\9}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.ant-popover-inner{-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}}.ant-popover-title{min-width:177px;min-height:32px;margin:0;padding:5px 16px 4px;color:rgba(0,0,0,.85);font-weight:500;border-bottom:1px solid #e8e8e8}.ant-popover-inner-content{padding:12px 16px;color:rgba(0,0,0,.65)}.ant-popover-message{position:relative;padding:4px 0 12px;color:rgba(0,0,0,.65);font-size:14px}.ant-popover-message>.anticon{position:absolute;top:8px;color:#faad14;font-size:14px}.ant-popover-message-title{padding-left:22px}.ant-popover-buttons{margin-bottom:4px;text-align:right}.ant-popover-buttons button{margin-left:8px}.ant-popover-arrow{position:absolute;display:block;width:8.48528137px;height:8.48528137px;background:transparent;border-style:solid;border-width:4.24264069px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ant-popover-placement-top>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-topLeft>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-topRight>.ant-popover-content>.ant-popover-arrow{bottom:6.2px;border-top-color:transparent;border-right-color:#fff;border-bottom-color:#fff;border-left-color:transparent;-webkit-box-shadow:3px 3px 7px rgba(0,0,0,.07);box-shadow:3px 3px 7px rgba(0,0,0,.07)}.ant-popover-placement-top>.ant-popover-content>.ant-popover-arrow{left:50%;-webkit-transform:translateX(-50%) rotate(45deg);transform:translateX(-50%) rotate(45deg)}.ant-popover-placement-topLeft>.ant-popover-content>.ant-popover-arrow{left:16px}.ant-popover-placement-topRight>.ant-popover-content>.ant-popover-arrow{right:16px}.ant-popover-placement-right>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-rightBottom>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-rightTop>.ant-popover-content>.ant-popover-arrow{left:6px;border-top-color:transparent;border-right-color:transparent;border-bottom-color:#fff;border-left-color:#fff;-webkit-box-shadow:-3px 3px 7px rgba(0,0,0,.07);box-shadow:-3px 3px 7px rgba(0,0,0,.07)}.ant-popover-placement-right>.ant-popover-content>.ant-popover-arrow{top:50%;-webkit-transform:translateY(-50%) rotate(45deg);transform:translateY(-50%) rotate(45deg)}.ant-popover-placement-rightTop>.ant-popover-content>.ant-popover-arrow{top:12px}.ant-popover-placement-rightBottom>.ant-popover-content>.ant-popover-arrow{bottom:12px}.ant-popover-placement-bottom>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-bottomLeft>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-bottomRight>.ant-popover-content>.ant-popover-arrow{top:6px;border-top-color:#fff;border-right-color:transparent;border-bottom-color:transparent;border-left-color:#fff;-webkit-box-shadow:-2px -2px 5px rgba(0,0,0,.06);box-shadow:-2px -2px 5px rgba(0,0,0,.06)}.ant-popover-placement-bottom>.ant-popover-content>.ant-popover-arrow{left:50%;-webkit-transform:translateX(-50%) rotate(45deg);transform:translateX(-50%) rotate(45deg)}.ant-popover-placement-bottomLeft>.ant-popover-content>.ant-popover-arrow{left:16px}.ant-popover-placement-bottomRight>.ant-popover-content>.ant-popover-arrow{right:16px}.ant-popover-placement-left>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-leftBottom>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-leftTop>.ant-popover-content>.ant-popover-arrow{right:6px;border-top-color:#fff;border-right-color:#fff;border-bottom-color:transparent;border-left-color:transparent;-webkit-box-shadow:3px -3px 7px rgba(0,0,0,.07);box-shadow:3px -3px 7px rgba(0,0,0,.07)}.ant-popover-placement-left>.ant-popover-content>.ant-popover-arrow{top:50%;-webkit-transform:translateY(-50%) rotate(45deg);transform:translateY(-50%) rotate(45deg)}.ant-popover-placement-leftTop>.ant-popover-content>.ant-popover-arrow{top:12px}.ant-popover-placement-leftBottom>.ant-popover-content>.ant-popover-arrow{bottom:12px}.ant-progress{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block}.ant-progress-line{position:relative;width:100%;font-size:14px}.ant-progress-small.ant-progress-line,.ant-progress-small.ant-progress-line .ant-progress-text .anticon{font-size:12px}.ant-progress-outer{display:inline-block;width:100%;margin-right:0;padding-right:0}.ant-progress-show-info .ant-progress-outer{margin-right:calc(-2em - 8px);padding-right:calc(2em + 8px)}.ant-progress-inner{position:relative;display:inline-block;width:100%;overflow:hidden;vertical-align:middle;background-color:#f5f5f5;border-radius:100px}.ant-progress-circle-trail{stroke:#f5f5f5}.ant-progress-circle-path{-webkit-animation:ant-progress-appear .3s;animation:ant-progress-appear .3s}.ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#1890ff}.ant-progress-bg,.ant-progress-success-bg{position:relative;background-color:#1890ff;border-radius:100px;-webkit-transition:all .4s cubic-bezier(.08,.82,.17,1) 0s;transition:all .4s cubic-bezier(.08,.82,.17,1) 0s}.ant-progress-success-bg{position:absolute;top:0;left:0;background-color:#52c41a}.ant-progress-text{display:inline-block;width:2em;margin-left:8px;color:rgba(0,0,0,.45);font-size:1em;line-height:1;white-space:nowrap;text-align:left;vertical-align:middle;word-break:normal}.ant-progress-text .anticon{font-size:14px}.ant-progress-status-active .ant-progress-bg:before{position:absolute;top:0;right:0;bottom:0;left:0;background:#fff;border-radius:10px;opacity:0;-webkit-animation:ant-progress-active 2.4s cubic-bezier(.23,1,.32,1) infinite;animation:ant-progress-active 2.4s cubic-bezier(.23,1,.32,1) infinite;content:""}.ant-progress-status-exception .ant-progress-bg{background-color:#f5222d}.ant-progress-status-exception .ant-progress-text{color:#f5222d}.ant-progress-status-exception .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#f5222d}.ant-progress-status-success .ant-progress-bg{background-color:#52c41a}.ant-progress-status-success .ant-progress-text{color:#52c41a}.ant-progress-status-success .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#52c41a}.ant-progress-circle .ant-progress-inner{position:relative;line-height:1;background-color:transparent}.ant-progress-circle .ant-progress-text{position:absolute;top:50%;left:50%;width:100%;margin:0;padding:0;color:rgba(0,0,0,.65);line-height:1;white-space:normal;text-align:center;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ant-progress-circle .ant-progress-text .anticon{font-size:1.16666667em}.ant-progress-circle.ant-progress-status-exception .ant-progress-text{color:#f5222d}.ant-progress-circle.ant-progress-status-success .ant-progress-text{color:#52c41a}@-webkit-keyframes ant-progress-active{0%{width:0;opacity:.1}20%{width:0;opacity:.5}to{width:100%;opacity:0}}@keyframes ant-progress-active{0%{width:0;opacity:.1}20%{width:0;opacity:.5}to{width:100%;opacity:0}}.ant-radio-group{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block}.ant-radio-wrapper{margin:0;margin-right:8px}.ant-radio,.ant-radio-wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;white-space:nowrap;cursor:pointer}.ant-radio{margin:0;line-height:1;vertical-align:sub;outline:none}.ant-radio-input:focus+.ant-radio-inner,.ant-radio-wrapper:hover .ant-radio,.ant-radio:hover .ant-radio-inner{border-color:#1890ff}.ant-radio-input:focus+.ant-radio-inner{-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.08);box-shadow:0 0 0 3px rgba(24,144,255,.08)}.ant-radio-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:50%;visibility:hidden;-webkit-animation:antRadioEffect .36s ease-in-out;animation:antRadioEffect .36s ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both;content:""}.ant-radio-wrapper:hover .ant-radio:after,.ant-radio:hover:after{visibility:visible}.ant-radio-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;background-color:#fff;border-color:#d9d9d9;border-style:solid;border-width:1px;border-radius:100px;-webkit-transition:all .3s;transition:all .3s}.ant-radio-inner:after{position:absolute;top:3px;left:3px;display:table;width:8px;height:8px;background-color:#1890ff;border-top:0;border-left:0;border-radius:8px;-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-transition:all .3s cubic-bezier(.78,.14,.15,.86);transition:all .3s cubic-bezier(.78,.14,.15,.86);content:" "}.ant-radio-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;cursor:pointer;opacity:0}.ant-radio-checked .ant-radio-inner{border-color:#1890ff}.ant-radio-checked .ant-radio-inner:after{-webkit-transform:scale(1);transform:scale(1);opacity:1;-webkit-transition:all .3s cubic-bezier(.78,.14,.15,.86);transition:all .3s cubic-bezier(.78,.14,.15,.86)}.ant-radio-disabled .ant-radio-inner{background-color:#f5f5f5;border-color:#d9d9d9!important;cursor:not-allowed}.ant-radio-disabled .ant-radio-inner:after{background-color:rgba(0,0,0,.2)}.ant-radio-disabled .ant-radio-input{cursor:not-allowed}.ant-radio-disabled+span{color:rgba(0,0,0,.25);cursor:not-allowed}span.ant-radio+*{padding-right:8px;padding-left:8px}.ant-radio-button-wrapper{position:relative;display:inline-block;height:32px;margin:0;padding:0 15px;color:rgba(0,0,0,.65);line-height:30px;background:#fff;border:1px solid #d9d9d9;border-top-width:1.02px;border-left:0;cursor:pointer;-webkit-transition:color .3s,background .3s,border-color .3s,-webkit-box-shadow .3s;transition:color .3s,background .3s,border-color .3s,-webkit-box-shadow .3s;transition:color .3s,background .3s,border-color .3s,box-shadow .3s;transition:color .3s,background .3s,border-color .3s,box-shadow .3s,-webkit-box-shadow .3s}.ant-radio-button-wrapper a{color:rgba(0,0,0,.65)}.ant-radio-button-wrapper>.ant-radio-button{display:block;width:0;height:0;margin-left:0}.ant-radio-group-large .ant-radio-button-wrapper{height:40px;font-size:16px;line-height:38px}.ant-radio-group-small .ant-radio-button-wrapper{height:24px;padding:0 7px;line-height:22px}.ant-radio-button-wrapper:not(:first-child):before{position:absolute;top:-1px;left:-1px;display:block;-webkit-box-sizing:content-box;box-sizing:content-box;width:1px;height:100%;padding:1px 0;background-color:#d9d9d9;-webkit-transition:background-color .3s;transition:background-color .3s;content:""}.ant-radio-button-wrapper:first-child{border-left:1px solid #d9d9d9;border-radius:4px 0 0 4px}.ant-radio-button-wrapper:last-child{border-radius:0 4px 4px 0}.ant-radio-button-wrapper:first-child:last-child{border-radius:4px}.ant-radio-button-wrapper:hover{position:relative;color:#1890ff}.ant-radio-button-wrapper:focus-within{-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.08);box-shadow:0 0 0 3px rgba(24,144,255,.08)}.ant-radio-button-wrapper .ant-radio-inner,.ant-radio-button-wrapper input[type=checkbox],.ant-radio-button-wrapper input[type=radio]{width:0;height:0;opacity:0;pointer-events:none}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){z-index:1;color:#1890ff;background:#fff;border-color:#1890ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):before{background-color:#1890ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):first-child{border-color:#1890ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#40a9ff;border-color:#40a9ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover:before{background-color:#40a9ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#096dd9;border-color:#096dd9}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active:before{background-color:#096dd9}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within{-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.08);box-shadow:0 0 0 3px rgba(24,144,255,.08)}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){color:#fff;background:#1890ff;border-color:#1890ff}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#fff;background:#40a9ff;border-color:#40a9ff}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#fff;background:#096dd9;border-color:#096dd9}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within{-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.08);box-shadow:0 0 0 3px rgba(24,144,255,.08)}.ant-radio-button-wrapper-disabled{cursor:not-allowed}.ant-radio-button-wrapper-disabled,.ant-radio-button-wrapper-disabled:first-child,.ant-radio-button-wrapper-disabled:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9}.ant-radio-button-wrapper-disabled:first-child{border-left-color:#d9d9d9}.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked{color:#fff;background-color:#e6e6e6;border-color:#d9d9d9;-webkit-box-shadow:none;box-shadow:none}@-webkit-keyframes antRadioEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}@keyframes antRadioEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}@supports (-moz-appearance:meterbar) and (background-blend-mode:difference,normal){.ant-radio{vertical-align:text-bottom}}.ant-rate{-webkit-box-sizing:border-box;box-sizing:border-box;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block;margin:0;padding:0;color:#fadb14;font-size:20px;line-height:unset;list-style:none;outline:none}.ant-rate-disabled .ant-rate-star{cursor:default}.ant-rate-disabled .ant-rate-star:hover{-webkit-transform:scale(1);transform:scale(1)}.ant-rate-star{position:relative;display:inline-block;margin:0;padding:0;color:inherit;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-rate-star:not(:last-child){margin-right:8px}.ant-rate-star>div:focus{outline:0}.ant-rate-star>div:focus,.ant-rate-star>div:hover{-webkit-transform:scale(1.1);transform:scale(1.1)}.ant-rate-star-first,.ant-rate-star-second{color:#e8e8e8;-webkit-transition:all .3s;transition:all .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-rate-star-first .anticon,.ant-rate-star-second .anticon{vertical-align:middle}.ant-rate-star-first{position:absolute;top:0;left:0;width:50%;height:100%;overflow:hidden;opacity:0}.ant-rate-star-half .ant-rate-star-first,.ant-rate-star-half .ant-rate-star-second{opacity:1}.ant-rate-star-full .ant-rate-star-second,.ant-rate-star-half .ant-rate-star-first{color:inherit}.ant-rate-text{display:inline-block;margin-left:8px;font-size:14px}.ant-result{padding:48px 32px}.ant-result-success .ant-result-icon>.anticon{color:#52c41a}.ant-result-error .ant-result-icon>.anticon{color:#f5222d}.ant-result-info .ant-result-icon>.anticon{color:#1890ff}.ant-result-warning .ant-result-icon>.anticon{color:#faad14}.ant-result-image{width:250px;height:295px;margin:auto}.ant-result-icon{margin-bottom:24px;text-align:center}.ant-result-icon>.anticon{font-size:72px}.ant-result-title{color:rgba(0,0,0,.85);font-size:24px;line-height:1.8;text-align:center}.ant-result-subtitle{color:rgba(0,0,0,.45);font-size:14px;line-height:1.6;text-align:center}.ant-result-extra{margin-top:32px;text-align:center}.ant-result-extra>*{margin-right:8px}.ant-result-extra>:last-child{margin-right:0}.ant-result-content{margin-top:24px;padding:24px 40px;background-color:#fafafa}.ant-select{-webkit-box-sizing:border-box;box-sizing:border-box;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;outline:0}.ant-select,.ant-select ol,.ant-select ul{margin:0;padding:0;list-style:none}.ant-select>ul>li>a{padding:0;background-color:#fff}.ant-select-arrow{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:50%;right:11px;margin-top:-6px;color:rgba(0,0,0,.25);font-size:12px;line-height:1;-webkit-transform-origin:50% 50%;transform-origin:50% 50%}.ant-select-arrow>*{line-height:1}.ant-select-arrow svg{display:inline-block}.ant-select-arrow:before{display:none}.ant-select-arrow .ant-select-arrow-icon{display:block}.ant-select-arrow .ant-select-arrow-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-select-selection{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;border:1px solid #d9d9d9;border-top-width:1.02px;border-radius:4px;outline:none;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-select-selection:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-select-focused .ant-select-selection,.ant-select-selection:active,.ant-select-selection:focus{border-color:#40a9ff;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-select-selection__clear{position:absolute;top:50%;right:11px;z-index:1;display:inline-block;width:12px;height:12px;margin-top:-6px;color:rgba(0,0,0,.25);font-size:12px;font-style:normal;line-height:12px;text-align:center;text-transform:none;background:#fff;cursor:pointer;opacity:0;-webkit-transition:color .3s ease,opacity .15s ease;transition:color .3s ease,opacity .15s ease;text-rendering:auto}.ant-select-selection__clear:before{display:block}.ant-select-selection__clear:hover{color:rgba(0,0,0,.45)}.ant-select-selection:hover .ant-select-selection__clear{opacity:1}.ant-select-selection-selected-value{float:left;max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-select-no-arrow .ant-select-selection-selected-value{padding-right:0}.ant-select-disabled{color:rgba(0,0,0,.25)}.ant-select-disabled .ant-select-selection{background:#f5f5f5;cursor:not-allowed}.ant-select-disabled .ant-select-selection:active,.ant-select-disabled .ant-select-selection:focus,.ant-select-disabled .ant-select-selection:hover{border-color:#d9d9d9;-webkit-box-shadow:none;box-shadow:none}.ant-select-disabled .ant-select-selection__clear{display:none;visibility:hidden;pointer-events:none}.ant-select-disabled .ant-select-selection--multiple .ant-select-selection__choice{padding-right:10px;color:rgba(0,0,0,.33);background:#f5f5f5}.ant-select-disabled .ant-select-selection--multiple .ant-select-selection__choice__remove{display:none}.ant-select-selection--single{position:relative;height:32px;cursor:pointer}.ant-select-selection--single .ant-select-selection__rendered{margin-right:24px}.ant-select-no-arrow .ant-select-selection__rendered{margin-right:11px}.ant-select-selection__rendered{position:relative;display:block;margin-right:11px;margin-left:11px;line-height:30px}.ant-select-selection__rendered:after{display:inline-block;width:0;visibility:hidden;content:".";pointer-events:none}.ant-select-lg{font-size:16px}.ant-select-lg .ant-select-selection--single{height:40px}.ant-select-lg .ant-select-selection__rendered{line-height:38px}.ant-select-lg .ant-select-selection--multiple{min-height:40px}.ant-select-lg .ant-select-selection--multiple .ant-select-selection__rendered li{height:32px;line-height:32px}.ant-select-lg .ant-select-selection--multiple .ant-select-arrow,.ant-select-lg .ant-select-selection--multiple .ant-select-selection__clear{top:20px}.ant-select-sm .ant-select-selection--single{height:24px}.ant-select-sm .ant-select-selection__rendered{margin-left:7px;line-height:22px}.ant-select-sm .ant-select-selection--multiple{min-height:24px}.ant-select-sm .ant-select-selection--multiple .ant-select-selection__rendered li{height:16px;line-height:14px}.ant-select-sm .ant-select-selection--multiple .ant-select-arrow,.ant-select-sm .ant-select-selection--multiple .ant-select-selection__clear{top:12px}.ant-select-sm .ant-select-arrow,.ant-select-sm .ant-select-selection__clear{right:8px}.ant-select-disabled .ant-select-selection__choice__remove{color:rgba(0,0,0,.25);cursor:default}.ant-select-disabled .ant-select-selection__choice__remove:hover{color:rgba(0,0,0,.25)}.ant-select-search__field__wrap{position:relative;display:inline-block}.ant-select-search__field__placeholder,.ant-select-selection__placeholder{position:absolute;top:50%;right:9px;left:0;max-width:100%;height:20px;margin-top:-10px;overflow:hidden;color:#bfbfbf;line-height:20px;white-space:nowrap;text-align:left;text-overflow:ellipsis}.ant-select-search__field__placeholder{left:12px}.ant-select-search__field__mirror{position:absolute;top:0;left:0;white-space:pre;opacity:0;pointer-events:none}.ant-select-search--inline{position:absolute;width:100%;height:100%}.ant-select-search--inline .ant-select-search__field__wrap{width:100%;height:100%}.ant-select-search--inline .ant-select-search__field{width:100%;height:100%;font-size:100%;line-height:1;background:transparent;border-width:0;border-radius:4px;outline:0}.ant-select-search--inline>i{float:right}.ant-select-selection--multiple{min-height:32px;padding-bottom:3px;cursor:text;zoom:1}.ant-select-selection--multiple:after,.ant-select-selection--multiple:before{display:table;content:""}.ant-select-selection--multiple:after{clear:both}.ant-select-selection--multiple .ant-select-search--inline{position:static;float:left;width:auto;max-width:100%;padding:0}.ant-select-selection--multiple .ant-select-search--inline .ant-select-search__field{width:.75em;max-width:100%;padding:1px}.ant-select-selection--multiple .ant-select-selection__rendered{height:auto;margin-bottom:-3px;margin-left:5px}.ant-select-selection--multiple .ant-select-selection__placeholder{margin-left:6px}.ant-select-selection--multiple .ant-select-selection__rendered>ul>li,.ant-select-selection--multiple>ul>li{height:24px;margin-top:3px;line-height:22px}.ant-select-selection--multiple .ant-select-selection__choice{position:relative;float:left;max-width:99%;margin-right:4px;padding:0 20px 0 10px;overflow:hidden;color:rgba(0,0,0,.65);background-color:#fafafa;border:1px solid #e8e8e8;border-radius:2px;cursor:default;-webkit-transition:padding .3s cubic-bezier(.645,.045,.355,1);transition:padding .3s cubic-bezier(.645,.045,.355,1)}.ant-select-selection--multiple .ant-select-selection__choice__disabled{padding:0 10px}.ant-select-selection--multiple .ant-select-selection__choice__content{display:inline-block;max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-transition:margin .3s cubic-bezier(.645,.045,.355,1);transition:margin .3s cubic-bezier(.645,.045,.355,1)}.ant-select-selection--multiple .ant-select-selection__choice__remove{color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;right:4px;color:rgba(0,0,0,.45);font-weight:700;line-height:inherit;cursor:pointer;-webkit-transition:all .3s;transition:all .3s;display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}.ant-select-selection--multiple .ant-select-selection__choice__remove>*{line-height:1}.ant-select-selection--multiple .ant-select-selection__choice__remove svg{display:inline-block}.ant-select-selection--multiple .ant-select-selection__choice__remove:before{display:none}.ant-select-selection--multiple .ant-select-selection__choice__remove .ant-select-selection--multiple .ant-select-selection__choice__remove-icon{display:block}:root .ant-select-selection--multiple .ant-select-selection__choice__remove{font-size:12px}.ant-select-selection--multiple .ant-select-selection__choice__remove:hover{color:rgba(0,0,0,.75)}.ant-select-selection--multiple .ant-select-arrow,.ant-select-selection--multiple .ant-select-selection__clear{top:16px}.ant-select-allow-clear .ant-select-selection--multiple .ant-select-selection__rendered,.ant-select-show-arrow .ant-select-selection--multiple .ant-select-selection__rendered{margin-right:20px}.ant-select-open .ant-select-arrow-icon svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.ant-select-open .ant-select-selection{border-color:#40a9ff;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-select-combobox .ant-select-arrow{display:none}.ant-select-combobox .ant-select-search--inline{float:none;width:100%;height:100%}.ant-select-combobox .ant-select-search__field__wrap{width:100%;height:100%}.ant-select-combobox .ant-select-search__field{position:relative;z-index:1;width:100%;height:100%;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1),height 0s;transition:all .3s cubic-bezier(.645,.045,.355,1),height 0s}.ant-select-combobox.ant-select-allow-clear .ant-select-selection:hover .ant-select-selection__rendered,.ant-select-combobox.ant-select-show-arrow .ant-select-selection:hover .ant-select-selection__rendered{margin-right:20px}.ant-select-dropdown{margin:0;padding:0;color:rgba(0,0,0,.65);font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:14px;font-variant:normal;background-color:#fff;border-radius:4px;outline:none;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-select-dropdown.slide-up-appear.slide-up-appear-active.ant-select-dropdown-placement-bottomLeft,.ant-select-dropdown.slide-up-enter.slide-up-enter-active.ant-select-dropdown-placement-bottomLeft{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn}.ant-select-dropdown.slide-up-appear.slide-up-appear-active.ant-select-dropdown-placement-topLeft,.ant-select-dropdown.slide-up-enter.slide-up-enter-active.ant-select-dropdown-placement-topLeft{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn}.ant-select-dropdown.slide-up-leave.slide-up-leave-active.ant-select-dropdown-placement-bottomLeft{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut}.ant-select-dropdown.slide-up-leave.slide-up-leave-active.ant-select-dropdown-placement-topLeft{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut}.ant-select-dropdown-hidden{display:none}.ant-select-dropdown-menu{max-height:250px;margin-bottom:0;padding:4px 0;padding-left:0;overflow:auto;list-style:none;outline:none}.ant-select-dropdown-menu-item-group-list{margin:0;padding:0}.ant-select-dropdown-menu-item-group-list>.ant-select-dropdown-menu-item{padding-left:20px}.ant-select-dropdown-menu-item-group-title{height:32px;padding:0 12px;color:rgba(0,0,0,.45);font-size:12px;line-height:32px}.ant-select-dropdown-menu-item-group-list .ant-select-dropdown-menu-item:first-child:not(:last-child),.ant-select-dropdown-menu-item-group:not(:last-child) .ant-select-dropdown-menu-item-group-list .ant-select-dropdown-menu-item:last-child{border-radius:0}.ant-select-dropdown-menu-item{position:relative;display:block;padding:5px 12px;overflow:hidden;color:rgba(0,0,0,.65);font-weight:400;font-size:14px;line-height:22px;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;-webkit-transition:background .3s ease;transition:background .3s ease}.ant-select-dropdown-menu-item:hover:not(.ant-select-dropdown-menu-item-disabled){background-color:#e6f7ff}.ant-select-dropdown-menu-item-selected{color:rgba(0,0,0,.65);font-weight:600;background-color:#fafafa}.ant-select-dropdown-menu-item-disabled,.ant-select-dropdown-menu-item-disabled:hover{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-select-dropdown-menu-item-active:not(.ant-select-dropdown-menu-item-disabled){background-color:#e6f7ff}.ant-select-dropdown-menu-item-divider{height:1px;margin:1px 0;overflow:hidden;line-height:0;background-color:#e8e8e8}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item{padding-right:32px}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item .ant-select-selected-icon{position:absolute;top:50%;right:12px;color:transparent;font-weight:700;font-size:12px;text-shadow:0 .1px 0,.1px 0 0,0 -.1px 0,-.1px 0;-webkit-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:all .2s;transition:all .2s}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item:hover .ant-select-selected-icon{color:rgba(0,0,0,.87)}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-disabled .ant-select-selected-icon{display:none}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-selected .ant-select-selected-icon,.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-selected:hover .ant-select-selected-icon{display:inline-block;color:#1890ff}.ant-select-dropdown--empty.ant-select-dropdown--multiple .ant-select-dropdown-menu-item{padding-right:12px}.ant-select-dropdown-container-open .ant-select-dropdown,.ant-select-dropdown-open .ant-select-dropdown{display:block}.ant-skeleton{display:table;width:100%}.ant-skeleton-header{display:table-cell;padding-right:16px;vertical-align:top}.ant-skeleton-header .ant-skeleton-avatar{display:inline-block;vertical-align:top;background:#f2f2f2;width:32px;height:32px;line-height:32px}.ant-skeleton-header .ant-skeleton-avatar.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-header .ant-skeleton-avatar-lg{width:40px;height:40px;line-height:40px}.ant-skeleton-header .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-header .ant-skeleton-avatar-sm{width:24px;height:24px;line-height:24px}.ant-skeleton-header .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-content{display:table-cell;width:100%;vertical-align:top}.ant-skeleton-content .ant-skeleton-title{width:100%;height:16px;margin-top:16px;background:#f2f2f2}.ant-skeleton-content .ant-skeleton-title+.ant-skeleton-paragraph{margin-top:24px}.ant-skeleton-content .ant-skeleton-paragraph{padding:0}.ant-skeleton-content .ant-skeleton-paragraph>li{width:100%;height:16px;list-style:none;background:#f2f2f2}.ant-skeleton-content .ant-skeleton-paragraph>li:last-child:not(:first-child):not(:nth-child(2)){width:61%}.ant-skeleton-content .ant-skeleton-paragraph>li+li{margin-top:16px}.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title{margin-top:12px}.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title+.ant-skeleton-paragraph{margin-top:28px}.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar,.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph>li,.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title{background:-webkit-gradient(linear,left top,right top,color-stop(25%,#f2f2f2),color-stop(37%,#e6e6e6),color-stop(63%,#f2f2f2));background:linear-gradient(90deg,#f2f2f2 25%,#e6e6e6 37%,#f2f2f2 63%);background-size:400% 100%;-webkit-animation:ant-skeleton-loading 1.4s ease infinite;animation:ant-skeleton-loading 1.4s ease infinite}@-webkit-keyframes ant-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes ant-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.ant-slider{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;height:12px;margin:14px 6px 10px;padding:4px 0;cursor:pointer;-ms-touch-action:none;touch-action:none}.ant-slider-vertical{width:12px;height:100%;margin:6px 10px;padding:0 4px}.ant-slider-vertical .ant-slider-rail{width:4px;height:100%}.ant-slider-vertical .ant-slider-track{width:4px}.ant-slider-vertical .ant-slider-handle{margin-top:-6px;margin-left:-5px}.ant-slider-vertical .ant-slider-mark{top:0;left:12px;width:18px;height:100%}.ant-slider-vertical .ant-slider-mark-text{left:4px;white-space:nowrap}.ant-slider-vertical .ant-slider-step{width:4px;height:100%}.ant-slider-vertical .ant-slider-dot{top:auto;left:2px;margin-bottom:-4px}.ant-slider-tooltip .ant-tooltip-inner{min-width:unset}.ant-slider-with-marks{margin-bottom:28px}.ant-slider-rail{width:100%;background-color:#f5f5f5;border-radius:2px}.ant-slider-rail,.ant-slider-track{position:absolute;height:4px;-webkit-transition:background-color .3s;transition:background-color .3s}.ant-slider-track{background-color:#91d5ff;border-radius:4px}.ant-slider-handle{position:absolute;width:14px;height:14px;margin-top:-5px;background-color:#fff;border:2px solid #91d5ff;border-radius:50%;-webkit-box-shadow:0;box-shadow:0;cursor:pointer;-webkit-transition:border-color .3s,-webkit-box-shadow .6s,-webkit-transform .3s cubic-bezier(.18,.89,.32,1.28);transition:border-color .3s,-webkit-box-shadow .6s,-webkit-transform .3s cubic-bezier(.18,.89,.32,1.28);transition:border-color .3s,box-shadow .6s,transform .3s cubic-bezier(.18,.89,.32,1.28);transition:border-color .3s,box-shadow .6s,transform .3s cubic-bezier(.18,.89,.32,1.28),-webkit-box-shadow .6s,-webkit-transform .3s cubic-bezier(.18,.89,.32,1.28)}.ant-slider-handle:focus{border-color:#46a6ff;outline:none;-webkit-box-shadow:0 0 0 5px rgba(24,144,255,.2);box-shadow:0 0 0 5px rgba(24,144,255,.2)}.ant-slider-handle.ant-tooltip-open{border-color:#1890ff}.ant-slider:hover .ant-slider-rail{background-color:#e1e1e1}.ant-slider:hover .ant-slider-track{background-color:#69c0ff}.ant-slider:hover .ant-slider-handle:not(.ant-tooltip-open){border-color:#69c0ff}.ant-slider-mark{position:absolute;top:14px;left:0;width:100%;font-size:14px}.ant-slider-mark-text{position:absolute;display:inline-block;color:rgba(0,0,0,.45);text-align:center;word-break:keep-all;cursor:pointer}.ant-slider-mark-text-active{color:rgba(0,0,0,.65)}.ant-slider-step{position:absolute;width:100%;height:4px;background:transparent}.ant-slider-dot{position:absolute;top:-2px;width:8px;height:8px;background-color:#fff;border:2px solid #e8e8e8;border-radius:50%;cursor:pointer}.ant-slider-dot,.ant-slider-dot:first-child,.ant-slider-dot:last-child{margin-left:-4px}.ant-slider-dot-active{border-color:#8cc8ff}.ant-slider-disabled{cursor:not-allowed}.ant-slider-disabled .ant-slider-track{background-color:rgba(0,0,0,.25)!important}.ant-slider-disabled .ant-slider-dot,.ant-slider-disabled .ant-slider-handle{background-color:#fff;border-color:rgba(0,0,0,.25)!important;-webkit-box-shadow:none;box-shadow:none;cursor:not-allowed}.ant-slider-disabled .ant-slider-dot,.ant-slider-disabled .ant-slider-mark-text{cursor:not-allowed!important}.ant-space{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.ant-space-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ant-space-align-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ant-space-align-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.ant-space-align-end{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.ant-space-align-baseline{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.ant-spin{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;display:none;color:#1890ff;text-align:center;vertical-align:middle;opacity:0;-webkit-transition:-webkit-transform .3s cubic-bezier(.78,.14,.15,.86);transition:-webkit-transform .3s cubic-bezier(.78,.14,.15,.86);transition:transform .3s cubic-bezier(.78,.14,.15,.86);transition:transform .3s cubic-bezier(.78,.14,.15,.86),-webkit-transform .3s cubic-bezier(.78,.14,.15,.86)}.ant-spin-spinning{position:static;display:inline-block;opacity:1}.ant-spin-nested-loading{position:relative}.ant-spin-nested-loading>div>.ant-spin{position:absolute;top:0;left:0;z-index:4;display:block;width:100%;height:100%;max-height:400px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-dot{position:absolute;top:50%;left:50%;margin:-10px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-text{position:absolute;top:50%;width:100%;padding-top:5px;text-shadow:0 1px 2px #fff}.ant-spin-nested-loading>div>.ant-spin.ant-spin-show-text .ant-spin-dot{margin-top:-20px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-dot{margin:-7px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-text{padding-top:2px}.ant-spin-nested-loading>div>.ant-spin-sm.ant-spin-show-text .ant-spin-dot{margin-top:-17px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-dot{margin:-16px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-text{padding-top:11px}.ant-spin-nested-loading>div>.ant-spin-lg.ant-spin-show-text .ant-spin-dot{margin-top:-26px}.ant-spin-container{position:relative;-webkit-transition:opacity .3s;transition:opacity .3s}.ant-spin-container:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;display:none\9;width:100%;height:100%;background:#fff;opacity:0;-webkit-transition:all .3s;transition:all .3s;content:"";pointer-events:none}.ant-spin-blur{clear:both;overflow:hidden;opacity:.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.ant-spin-blur:after{opacity:.4;pointer-events:auto}.ant-spin-tip{color:rgba(0,0,0,.45)}.ant-spin-dot{position:relative;display:inline-block;font-size:20px;width:1em;height:1em}.ant-spin-dot-item{position:absolute;display:block;width:9px;height:9px;background-color:#1890ff;border-radius:100%;-webkit-transform:scale(.75);transform:scale(.75);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;opacity:.3;-webkit-animation:antSpinMove 1s linear infinite alternate;animation:antSpinMove 1s linear infinite alternate}.ant-spin-dot-item:first-child{top:0;left:0}.ant-spin-dot-item:nth-child(2){top:0;right:0;-webkit-animation-delay:.4s;animation-delay:.4s}.ant-spin-dot-item:nth-child(3){right:0;bottom:0;-webkit-animation-delay:.8s;animation-delay:.8s}.ant-spin-dot-item:nth-child(4){bottom:0;left:0;-webkit-animation-delay:1.2s;animation-delay:1.2s}.ant-spin-dot-spin{-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-animation:antRotate 1.2s linear infinite;animation:antRotate 1.2s linear infinite}.ant-spin-sm .ant-spin-dot{font-size:14px}.ant-spin-sm .ant-spin-dot i{width:6px;height:6px}.ant-spin-lg .ant-spin-dot{font-size:32px}.ant-spin-lg .ant-spin-dot i{width:14px;height:14px}.ant-spin.ant-spin-show-text .ant-spin-text{display:block}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.ant-spin-blur{background:#fff;opacity:.5}}@-webkit-keyframes antSpinMove{to{opacity:1}}@keyframes antSpinMove{to{opacity:1}}@-webkit-keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}.ant-statistic{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.ant-statistic-title{margin-bottom:4px;color:rgba(0,0,0,.45);font-size:14px}.ant-statistic-content{color:rgba(0,0,0,.85);font-size:24px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.ant-statistic-content-value-decimal{font-size:16px}.ant-statistic-content-prefix,.ant-statistic-content-suffix{display:inline-block}.ant-statistic-content-prefix{margin-right:4px}.ant-statistic-content-suffix{margin-left:4px;font-size:16px}.ant-steps{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;font-size:0}.ant-steps-item{position:relative;display:inline-block;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;vertical-align:top}.ant-steps-item-container{outline:none}.ant-steps-item:last-child{-webkit-box-flex:0;-ms-flex:none;flex:none}.ant-steps-item:last-child>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after,.ant-steps-item:last-child>.ant-steps-item-container>.ant-steps-item-tail{display:none}.ant-steps-item-content,.ant-steps-item-icon{display:inline-block;vertical-align:top}.ant-steps-item-icon{width:32px;height:32px;margin-right:8px;font-size:16px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;line-height:32px;text-align:center;border:1px solid rgba(0,0,0,.25);border-radius:32px;-webkit-transition:background-color .3s,border-color .3s;transition:background-color .3s,border-color .3s}.ant-steps-item-icon>.ant-steps-icon{position:relative;top:-1px;color:#1890ff;line-height:1}.ant-steps-item-tail{position:absolute;top:12px;left:0;width:100%;padding:0 10px}.ant-steps-item-tail:after{display:inline-block;width:100%;height:1px;background:#e8e8e8;border-radius:1px;-webkit-transition:background .3s;transition:background .3s;content:""}.ant-steps-item-title{position:relative;display:inline-block;padding-right:16px;color:rgba(0,0,0,.65);font-size:16px;line-height:32px}.ant-steps-item-title:after{position:absolute;top:16px;left:100%;display:block;width:9999px;height:1px;background:#e8e8e8;content:""}.ant-steps-item-subtitle{display:inline;margin-left:8px;font-weight:400}.ant-steps-item-description,.ant-steps-item-subtitle{color:rgba(0,0,0,.45);font-size:14px}.ant-steps-item-wait .ant-steps-item-icon{background-color:#fff;border-color:rgba(0,0,0,.25)}.ant-steps-item-wait .ant-steps-item-icon>.ant-steps-icon{color:rgba(0,0,0,.25)}.ant-steps-item-wait .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:rgba(0,0,0,.25)}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:rgba(0,0,0,.45)}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#e8e8e8}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:rgba(0,0,0,.45)}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#e8e8e8}.ant-steps-item-process .ant-steps-item-icon{background-color:#fff;border-color:#1890ff}.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon{color:#1890ff}.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#1890ff}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:rgba(0,0,0,.85)}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#e8e8e8}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:rgba(0,0,0,.65)}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#e8e8e8}.ant-steps-item-process .ant-steps-item-icon{background:#1890ff}.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon{color:#fff}.ant-steps-item-process .ant-steps-item-title{font-weight:500}.ant-steps-item-finish .ant-steps-item-icon{background-color:#fff;border-color:#1890ff}.ant-steps-item-finish .ant-steps-item-icon>.ant-steps-icon{color:#1890ff}.ant-steps-item-finish .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#1890ff}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:rgba(0,0,0,.65)}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#1890ff}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:rgba(0,0,0,.45)}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#1890ff}.ant-steps-item-error .ant-steps-item-icon{background-color:#fff;border-color:#f5222d}.ant-steps-item-error .ant-steps-item-icon>.ant-steps-icon{color:#f5222d}.ant-steps-item-error .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#f5222d}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:#f5222d}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#e8e8e8}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:#f5222d}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#e8e8e8}.ant-steps-item.ant-steps-next-error .ant-steps-item-title:after{background:#f5222d}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]{cursor:pointer}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-description,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-icon .ant-steps-icon,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-title{-webkit-transition:color .3s;transition:color .3s}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-description,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-subtitle,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-title{color:#1890ff}.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process)>.ant-steps-item-container[role=button]:hover .ant-steps-item-icon{border-color:#1890ff}.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process)>.ant-steps-item-container[role=button]:hover .ant-steps-item-icon .ant-steps-icon{color:#1890ff}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{margin-right:16px;white-space:nowrap}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child{margin-right:0}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title{padding-right:0}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-tail{display:none}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-description{max-width:140px;white-space:normal}.ant-steps-item-custom .ant-steps-item-icon{height:auto;background:none;border:0}.ant-steps-item-custom .ant-steps-item-icon>.ant-steps-icon{top:0;left:.5px;width:32px;height:32px;font-size:24px;line-height:32px}.ant-steps-item-custom.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon{color:#1890ff}.ant-steps:not(.ant-steps-vertical) .ant-steps-item-custom .ant-steps-item-icon{width:auto}.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{margin-right:12px}.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child{margin-right:0}.ant-steps-small .ant-steps-item-icon{width:24px;height:24px;font-size:12px;line-height:24px;text-align:center;border-radius:24px}.ant-steps-small .ant-steps-item-title{padding-right:12px;font-size:14px;line-height:24px}.ant-steps-small .ant-steps-item-title:after{top:12px}.ant-steps-small .ant-steps-item-description{color:rgba(0,0,0,.45);font-size:14px}.ant-steps-small .ant-steps-item-tail{top:8px}.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon{width:inherit;height:inherit;line-height:inherit;background:none;border:0;border-radius:0}.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon>.ant-steps-icon{font-size:24px;line-height:24px;-webkit-transform:none;transform:none}.ant-steps-vertical{display:block}.ant-steps-vertical .ant-steps-item{display:block;overflow:visible}.ant-steps-vertical .ant-steps-item-icon{float:left;margin-right:16px}.ant-steps-vertical .ant-steps-item-content{display:block;min-height:48px;overflow:hidden}.ant-steps-vertical .ant-steps-item-title{line-height:32px}.ant-steps-vertical .ant-steps-item-description{padding-bottom:12px}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{position:absolute;top:0;left:16px;width:1px;height:100%;padding:38px 0 6px}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail:after{width:1px;height:100%}.ant-steps-vertical>.ant-steps-item:not(:last-child)>.ant-steps-item-container>.ant-steps-item-tail{display:block}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{display:none}.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail{position:absolute;top:0;left:12px;padding:30px 0 6px}.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-title{line-height:24px}@media (max-width:480px){.ant-steps-horizontal.ant-steps-label-horizontal{display:block}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item{display:block;overflow:visible}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-icon{float:left;margin-right:16px}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-content{display:block;min-height:48px;overflow:hidden}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-title{line-height:32px}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-description{padding-bottom:12px}.ant-steps-horizontal.ant-steps-label-horizontal>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{position:absolute;top:0;left:16px;width:1px;height:100%;padding:38px 0 6px}.ant-steps-horizontal.ant-steps-label-horizontal>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail:after{width:1px;height:100%}.ant-steps-horizontal.ant-steps-label-horizontal>.ant-steps-item:not(:last-child)>.ant-steps-item-container>.ant-steps-item-tail{display:block}.ant-steps-horizontal.ant-steps-label-horizontal>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{display:none}.ant-steps-horizontal.ant-steps-label-horizontal.ant-steps-small .ant-steps-item-container .ant-steps-item-tail{position:absolute;top:0;left:12px;padding:30px 0 6px}.ant-steps-horizontal.ant-steps-label-horizontal.ant-steps-small .ant-steps-item-container .ant-steps-item-title{line-height:24px}}.ant-steps-label-vertical .ant-steps-item{overflow:visible}.ant-steps-label-vertical .ant-steps-item-tail{margin-left:58px;padding:3.5px 24px}.ant-steps-label-vertical .ant-steps-item-content{display:block;width:116px;margin-top:8px;text-align:center}.ant-steps-label-vertical .ant-steps-item-icon{display:inline-block;margin-left:42px}.ant-steps-label-vertical .ant-steps-item-title{padding-right:0}.ant-steps-label-vertical .ant-steps-item-title:after{display:none}.ant-steps-label-vertical .ant-steps-item-subtitle{display:block;margin-bottom:4px;margin-left:0;line-height:1.5}.ant-steps-label-vertical.ant-steps-small:not(.ant-steps-dot) .ant-steps-item-icon{margin-left:46px}.ant-steps-dot .ant-steps-item-title,.ant-steps-dot.ant-steps-small .ant-steps-item-title{line-height:1.5}.ant-steps-dot .ant-steps-item-tail,.ant-steps-dot.ant-steps-small .ant-steps-item-tail{top:2px;width:100%;margin:0 0 0 70px;padding:0}.ant-steps-dot .ant-steps-item-tail:after,.ant-steps-dot.ant-steps-small .ant-steps-item-tail:after{width:calc(100% - 20px);height:3px;margin-left:12px}.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot{left:2px}.ant-steps-dot .ant-steps-item-icon,.ant-steps-dot.ant-steps-small .ant-steps-item-icon{width:8px;height:8px;margin-left:67px;padding-right:0;line-height:8px;background:transparent;border:0}.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot{position:relative;float:left;width:100%;height:100%;border-radius:100px;-webkit-transition:all .3s;transition:all .3s}.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot:after,.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot:after{position:absolute;top:-12px;left:-26px;width:60px;height:32px;background:rgba(0,0,0,.001);content:""}.ant-steps-dot .ant-steps-item-content,.ant-steps-dot.ant-steps-small .ant-steps-item-content{width:140px}.ant-steps-dot .ant-steps-item-process .ant-steps-item-icon,.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-item-icon{width:10px;height:10px;line-height:10px}.ant-steps-dot .ant-steps-item-process .ant-steps-item-icon .ant-steps-icon-dot,.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-item-icon .ant-steps-icon-dot{top:-1px}.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon{margin-top:8px;margin-left:0}.ant-steps-vertical.ant-steps-dot .ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{top:2px;left:-9px;margin:0;padding:22px 0 4px}.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot{left:0}.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-icon-dot{left:-2px}.ant-steps-navigation{padding-top:12px}.ant-steps-navigation.ant-steps-small .ant-steps-item-container{margin-left:-12px}.ant-steps-navigation .ant-steps-item{overflow:visible;text-align:center}.ant-steps-navigation .ant-steps-item-container{display:inline-block;height:100%;margin-left:-16px;padding-bottom:12px;text-align:left;-webkit-transition:opacity .3s;transition:opacity .3s}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-content{max-width:auto}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title{max-width:100%;padding-right:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title:after{display:none}.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role=button]{cursor:pointer}.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role=button]:hover{opacity:.85}.ant-steps-navigation .ant-steps-item:last-child{-webkit-box-flex:1;-ms-flex:1;flex:1}.ant-steps-navigation .ant-steps-item:last-child:after{display:none}.ant-steps-navigation .ant-steps-item:after{position:absolute;top:50%;left:100%;display:inline-block;width:12px;height:12px;margin-top:-14px;margin-left:-2px;border:1px solid rgba(0,0,0,.25);border-bottom:none;border-left:none;-webkit-transform:rotate(45deg);transform:rotate(45deg);content:""}.ant-steps-navigation .ant-steps-item:before{position:absolute;bottom:0;left:50%;display:inline-block;width:0;height:3px;background-color:#1890ff;-webkit-transition:width .3s,left .3s;transition:width .3s,left .3s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out;content:""}.ant-steps-navigation .ant-steps-item.ant-steps-item-active:before{left:0;width:100%}@media (max-width:480px){.ant-steps-navigation>.ant-steps-item{margin-right:0!important}.ant-steps-navigation>.ant-steps-item:before{display:none}.ant-steps-navigation>.ant-steps-item.ant-steps-item-active:before{top:0;right:0;left:unset;display:block;width:3px;height:calc(100% - 24px)}.ant-steps-navigation>.ant-steps-item:after{position:relative;top:-2px;left:50%;display:block;width:8px;height:8px;margin-bottom:8px;text-align:center;-webkit-transform:rotate(135deg);transform:rotate(135deg)}.ant-steps-navigation>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{visibility:hidden}}.ant-steps-flex-not-supported.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item{margin-left:-16px;padding-left:16px;background:#fff}.ant-steps-flex-not-supported.ant-steps-horizontal.ant-steps-label-horizontal.ant-steps-small .ant-steps-item{margin-left:-12px;padding-left:12px}.ant-steps-flex-not-supported.ant-steps-dot .ant-steps-item:last-child{overflow:hidden}.ant-steps-flex-not-supported.ant-steps-dot .ant-steps-item:last-child .ant-steps-icon-dot:after{right:-200px;width:200px}.ant-steps-flex-not-supported.ant-steps-dot .ant-steps-item .ant-steps-icon-dot:after,.ant-steps-flex-not-supported.ant-steps-dot .ant-steps-item .ant-steps-icon-dot:before{position:absolute;top:0;left:-10px;width:10px;height:8px;background:#fff;content:""}.ant-steps-flex-not-supported.ant-steps-dot .ant-steps-item .ant-steps-icon-dot:after{right:-10px;left:auto}.ant-steps-flex-not-supported.ant-steps-dot .ant-steps-item-wait .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#ccc}.ant-switch{margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:44px;height:22px;line-height:20px;vertical-align:middle;background-color:rgba(0,0,0,.25);border:1px solid transparent;border-radius:100px;cursor:pointer;-webkit-transition:all .36s;transition:all .36s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-switch-inner{display:block;margin-right:6px;margin-left:24px;color:#fff;font-size:12px}.ant-switch-loading-icon,.ant-switch:after{position:absolute;top:1px;left:1px;width:18px;height:18px;background-color:#fff;border-radius:18px;cursor:pointer;-webkit-transition:all .36s cubic-bezier(.78,.14,.15,.86);transition:all .36s cubic-bezier(.78,.14,.15,.86);content:" "}.ant-switch:after{-webkit-box-shadow:0 2px 4px 0 rgba(0,35,11,.2);box-shadow:0 2px 4px 0 rgba(0,35,11,.2)}.ant-switch:not(.ant-switch-disabled):active:after,.ant-switch:not(.ant-switch-disabled):active:before{width:24px}.ant-switch-loading-icon{z-index:1;display:none;font-size:12px;background:transparent}.ant-switch-loading-icon svg{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.ant-switch-loading .ant-switch-loading-icon{display:inline-block;color:rgba(0,0,0,.65)}.ant-switch-checked.ant-switch-loading .ant-switch-loading-icon{color:#1890ff}.ant-switch:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-switch:focus:hover{-webkit-box-shadow:none;box-shadow:none}.ant-switch-small{min-width:28px;height:16px;line-height:14px}.ant-switch-small .ant-switch-inner{margin-right:3px;margin-left:18px;font-size:12px}.ant-switch-small:after{width:12px;height:12px}.ant-switch-small:active:after,.ant-switch-small:active:before{width:16px}.ant-switch-small .ant-switch-loading-icon{width:12px;height:12px}.ant-switch-small.ant-switch-checked .ant-switch-inner{margin-right:18px;margin-left:3px}.ant-switch-small.ant-switch-checked .ant-switch-loading-icon{left:100%;margin-left:-13px}.ant-switch-small.ant-switch-loading .ant-switch-loading-icon{font-weight:700;-webkit-transform:scale(.66667);transform:scale(.66667)}.ant-switch-checked{background-color:#1890ff}.ant-switch-checked .ant-switch-inner{margin-right:24px;margin-left:6px}.ant-switch-checked:after{left:100%;margin-left:-1px;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.ant-switch-checked .ant-switch-loading-icon{left:100%;margin-left:-19px}.ant-switch-disabled,.ant-switch-loading{cursor:not-allowed;opacity:.4}.ant-switch-disabled *,.ant-switch-disabled:after,.ant-switch-disabled:before,.ant-switch-loading *,.ant-switch-loading:after,.ant-switch-loading:before{cursor:not-allowed}@-webkit-keyframes AntSwitchSmallLoadingCircle{0%{-webkit-transform:rotate(0deg) scale(.66667);transform:rotate(0deg) scale(.66667);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}to{-webkit-transform:rotate(1turn) scale(.66667);transform:rotate(1turn) scale(.66667);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}}@keyframes AntSwitchSmallLoadingCircle{0%{-webkit-transform:rotate(0deg) scale(.66667);transform:rotate(0deg) scale(.66667);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}to{-webkit-transform:rotate(1turn) scale(.66667);transform:rotate(1turn) scale(.66667);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}}.ant-table-wrapper{zoom:1}.ant-table-wrapper:after,.ant-table-wrapper:before{display:table;content:""}.ant-table-wrapper:after{clear:both}.ant-table{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;clear:both}.ant-table-body{-webkit-transition:opacity .3s;transition:opacity .3s}.ant-table-empty .ant-table-body{overflow-x:auto!important;overflow-y:hidden!important}.ant-table table{width:100%;text-align:left;border-radius:4px 4px 0 0;border-collapse:separate;border-spacing:0}.ant-table-layout-fixed table{table-layout:fixed}.ant-table-thead>tr>th{color:rgba(0,0,0,.85);font-weight:500;text-align:left;background:#fafafa;border-bottom:1px solid #e8e8e8;-webkit-transition:background .3s ease;transition:background .3s ease}.ant-table-thead>tr>th[colspan]:not([colspan="1"]){text-align:center}.ant-table-thead>tr>th .ant-table-filter-icon,.ant-table-thead>tr>th .anticon-filter{position:absolute;top:0;right:0;width:28px;height:100%;color:#bfbfbf;font-size:12px;text-align:center;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-table-thead>tr>th .ant-table-filter-icon>svg,.ant-table-thead>tr>th .anticon-filter>svg{position:absolute;top:50%;left:50%;margin-top:-5px;margin-left:-6px}.ant-table-thead>tr>th .ant-table-filter-selected.anticon{color:#1890ff}.ant-table-thead>tr>th .ant-table-column-sorter{display:table-cell;vertical-align:middle}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner{height:1em;margin-top:.35em;margin-left:.57142857em;color:#bfbfbf;line-height:1em;text-align:center;-webkit-transition:all .3s;transition:all .3s}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-down,.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-up{display:inline-block;font-size:12px;font-size:11px\9;-webkit-transform:scale(.91666667) rotate(0deg);transform:scale(.91666667) rotate(0deg);display:block;height:1em;line-height:1em;-webkit-transition:all .3s;transition:all .3s}:root .ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-down,:root .ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-up{font-size:12px}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-down.on,.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-up.on{color:#1890ff}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner-full{margin-top:-.15em}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner-full .ant-table-column-sorter-down,.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner-full .ant-table-column-sorter-up{height:.5em;line-height:.5em}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner-full .ant-table-column-sorter-down{margin-top:.125em}.ant-table-thead>tr>th.ant-table-column-has-actions{position:relative;background-clip:padding-box;-webkit-background-clip:border-box}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters{padding-right:30px!important}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters .ant-table-filter-icon.ant-table-filter-open,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters .anticon-filter.ant-table-filter-open,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters:hover .ant-table-filter-icon:hover,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters:hover .anticon-filter:hover{color:rgba(0,0,0,.45);background:#e5e5e5}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters:hover .ant-table-filter-icon:active,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters:hover .anticon-filter:active{color:rgba(0,0,0,.65)}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters{cursor:pointer}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:hover,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:hover .ant-table-filter-icon,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:hover .anticon-filter{background:#f2f2f2}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:active .ant-table-column-sorter-down:not(.on),.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:active .ant-table-column-sorter-up:not(.on){color:rgba(0,0,0,.45)}.ant-table-thead>tr>th .ant-table-header-column{display:inline-block;max-width:100%;vertical-align:top}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters{display:table}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>.ant-table-column-title{display:table-cell;vertical-align:middle}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>:not(.ant-table-column-sorter){position:relative}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters:before{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;-webkit-transition:all .3s;transition:all .3s;content:""}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters:hover:before{background:rgba(0,0,0,.04)}.ant-table-thead>tr>th.ant-table-column-has-sorters{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-table-thead>tr:first-child>th:first-child{border-top-left-radius:4px}.ant-table-thead>tr:first-child>th:last-child{border-top-right-radius:4px}.ant-table-thead>tr:not(:last-child)>th[colspan]{border-bottom:0}.ant-table-tbody>tr>td{border-bottom:1px solid #e8e8e8;-webkit-transition:background .3s;transition:background .3s}.ant-table-tbody>tr.ant-table-row-hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)>td,.ant-table-tbody>tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)>td,.ant-table-thead>tr.ant-table-row-hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)>td,.ant-table-thead>tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)>td{background:#e6f7ff}.ant-table-tbody>tr.ant-table-row-selected>td.ant-table-column-sort,.ant-table-tbody>tr:hover.ant-table-row-selected>td,.ant-table-tbody>tr:hover.ant-table-row-selected>td.ant-table-column-sort,.ant-table-thead>tr.ant-table-row-selected>td.ant-table-column-sort,.ant-table-thead>tr:hover.ant-table-row-selected>td,.ant-table-thead>tr:hover.ant-table-row-selected>td.ant-table-column-sort{background:#fafafa}.ant-table-thead>tr:hover{background:none}.ant-table-footer{position:relative;padding:16px 16px;color:rgba(0,0,0,.85);background:#fafafa;border-top:1px solid #e8e8e8;border-radius:0 0 4px 4px}.ant-table-footer:before{position:absolute;top:-1px;left:0;width:100%;height:1px;background:#fafafa;content:""}.ant-table.ant-table-bordered .ant-table-footer{border:1px solid #e8e8e8}.ant-table-title{position:relative;top:1px;padding:16px 0;border-radius:4px 4px 0 0}.ant-table.ant-table-bordered .ant-table-title{padding-right:16px;padding-left:16px;border:1px solid #e8e8e8}.ant-table-title+.ant-table-content{position:relative;border-radius:4px 4px 0 0}.ant-table-bordered .ant-table-title+.ant-table-content,.ant-table-bordered .ant-table-title+.ant-table-content .ant-table-thead>tr:first-child>th,.ant-table-bordered .ant-table-title+.ant-table-content table,.ant-table-without-column-header .ant-table-title+.ant-table-content,.ant-table-without-column-header table{border-radius:0}.ant-table-without-column-header.ant-table-bordered.ant-table-empty .ant-table-placeholder{border-top:1px solid #e8e8e8;border-radius:4px}.ant-table-tbody>tr.ant-table-row-selected td{color:inherit;background:#fafafa}.ant-table-thead>tr>th.ant-table-column-sort{background:#f5f5f5}.ant-table-tbody>tr>td.ant-table-column-sort{background:rgba(0,0,0,.01)}.ant-table-tbody>tr>td,.ant-table-thead>tr>th{padding:16px 16px;overflow-wrap:break-word}.ant-table-expand-icon-th,.ant-table-row-expand-icon-cell{width:50px;min-width:50px;text-align:center}.ant-table-header{overflow:hidden;background:#fafafa}.ant-table-header table{border-radius:4px 4px 0 0}.ant-table-loading{position:relative}.ant-table-loading .ant-table-body{background:#fff;opacity:.5}.ant-table-loading .ant-table-spin-holder{position:absolute;top:50%;left:50%;height:20px;margin-left:-30px;line-height:20px}.ant-table-loading .ant-table-with-pagination{margin-top:-20px}.ant-table-loading .ant-table-without-pagination{margin-top:10px}.ant-table-bordered .ant-table-body>table,.ant-table-bordered .ant-table-fixed-left table,.ant-table-bordered .ant-table-fixed-right table,.ant-table-bordered .ant-table-header>table{border:1px solid #e8e8e8;border-right:0;border-bottom:0}.ant-table-bordered.ant-table-empty .ant-table-placeholder{border-right:1px solid #e8e8e8;border-left:1px solid #e8e8e8}.ant-table-bordered.ant-table-fixed-header .ant-table-header>table{border-bottom:0}.ant-table-bordered.ant-table-fixed-header .ant-table-body>table{border-top-left-radius:0;border-top-right-radius:0}.ant-table-bordered.ant-table-fixed-header .ant-table-body-inner>table,.ant-table-bordered.ant-table-fixed-header .ant-table-header+.ant-table-body>table{border-top:0}.ant-table-bordered .ant-table-thead>tr:not(:last-child)>th{border-bottom:1px solid #e8e8e8}.ant-table-bordered .ant-table-tbody>tr>td,.ant-table-bordered .ant-table-thead>tr>th{border-right:1px solid #e8e8e8}.ant-table-placeholder{position:relative;z-index:1;margin-top:-1px;padding:16px 16px;color:rgba(0,0,0,.25);font-size:14px;text-align:center;background:#fff;border-top:1px solid #e8e8e8;border-bottom:1px solid #e8e8e8;border-radius:0 0 4px 4px}.ant-table-pagination.ant-pagination{float:right;margin:16px 0}.ant-table-filter-dropdown{position:relative;min-width:96px;margin-left:-8px;background:#fff;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-table-filter-dropdown .ant-dropdown-menu{max-height:calc(100vh - 130px);overflow-x:hidden;border:0;border-radius:4px 4px 0 0;-webkit-box-shadow:none;box-shadow:none}.ant-table-filter-dropdown .ant-dropdown-menu-item>label+span{padding-right:0}.ant-table-filter-dropdown .ant-dropdown-menu-sub{border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-table-filter-dropdown .ant-dropdown-menu .ant-dropdown-submenu-contain-selected .ant-dropdown-menu-submenu-title:after{color:#1890ff;font-weight:700;text-shadow:0 0 2px #bae7ff}.ant-table-filter-dropdown .ant-dropdown-menu-item{overflow:hidden}.ant-table-filter-dropdown>.ant-dropdown-menu>.ant-dropdown-menu-item:last-child,.ant-table-filter-dropdown>.ant-dropdown-menu>.ant-dropdown-menu-submenu:last-child .ant-dropdown-menu-submenu-title{border-radius:0}.ant-table-filter-dropdown-btns{padding:7px 8px;overflow:hidden;border-top:1px solid #e8e8e8}.ant-table-filter-dropdown-link{color:#1890ff}.ant-table-filter-dropdown-link:hover{color:#40a9ff}.ant-table-filter-dropdown-link:active{color:#096dd9}.ant-table-filter-dropdown-link.confirm{float:left}.ant-table-filter-dropdown-link.clear{float:right}.ant-table-selection{white-space:nowrap}.ant-table-selection-select-all-custom{margin-right:4px!important}.ant-table-selection .anticon-down{color:#bfbfbf;-webkit-transition:all .3s;transition:all .3s}.ant-table-selection-menu{min-width:96px;margin-top:5px;margin-left:-30px;background:#fff;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-table-selection-menu .ant-action-down{color:#bfbfbf}.ant-table-selection-down{display:inline-block;padding:0;line-height:1;cursor:pointer}.ant-table-selection-down:hover .anticon-down{color:rgba(0,0,0,.6)}.ant-table-row-expand-icon{color:#1890ff;text-decoration:none;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;display:inline-block;width:17px;height:17px;color:inherit;line-height:13px;text-align:center;background:#fff;border:1px solid #e8e8e8;border-radius:2px;outline:none;-webkit-transition:all .3s;transition:all .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-table-row-expand-icon:focus,.ant-table-row-expand-icon:hover{color:#40a9ff}.ant-table-row-expand-icon:active{color:#096dd9}.ant-table-row-expand-icon:active,.ant-table-row-expand-icon:focus,.ant-table-row-expand-icon:hover{border-color:currentColor}.ant-table-row-expanded:after{content:"-"}.ant-table-row-collapsed:after{content:"+"}.ant-table-row-spaced{visibility:hidden}.ant-table-row-spaced:after{content:"."}.ant-table-row-cell-ellipsis,.ant-table-row-cell-ellipsis .ant-table-column-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-table-row-cell-ellipsis .ant-table-column-title{display:block}.ant-table-row-cell-break-word{word-wrap:break-word;word-break:break-word}tr.ant-table-expanded-row,tr.ant-table-expanded-row:hover{background:#fbfbfb}tr.ant-table-expanded-row td>.ant-table-wrapper{margin:-16px -16px -17px}.ant-table .ant-table-row-indent+.ant-table-row-expand-icon{margin-right:8px}.ant-table-scroll{overflow:auto;overflow-x:hidden}.ant-table-scroll table{min-width:100%}.ant-table-scroll table .ant-table-fixed-columns-in-body:not([colspan]){color:transparent}.ant-table-scroll table .ant-table-fixed-columns-in-body:not([colspan])>*{visibility:hidden}.ant-table-body-inner{height:100%}.ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body{position:relative;background:#fff}.ant-table-fixed-header .ant-table-body-inner{overflow:scroll}.ant-table-fixed-header .ant-table-scroll .ant-table-header{margin-bottom:-20px;padding-bottom:20px;overflow:scroll;opacity:.9999}.ant-table-fixed-header .ant-table-scroll .ant-table-header::-webkit-scrollbar{border:1px solid #e8e8e8;border-width:0 0 1px 0}.ant-table-hide-scrollbar{scrollbar-color:transparent transparent;min-width:unset}.ant-table-hide-scrollbar::-webkit-scrollbar{min-width:inherit;background-color:transparent}.ant-table-bordered.ant-table-fixed-header .ant-table-scroll .ant-table-header::-webkit-scrollbar{border:1px solid #e8e8e8;border-width:1px 1px 1px 0}.ant-table-bordered.ant-table-fixed-header .ant-table-scroll .ant-table-header.ant-table-hide-scrollbar .ant-table-thead>tr:only-child>th:last-child{border-right-color:transparent}.ant-table-fixed-left,.ant-table-fixed-right{position:absolute;top:0;z-index:1;overflow:hidden;border-radius:0;-webkit-transition:-webkit-box-shadow .3s ease;transition:-webkit-box-shadow .3s ease;transition:box-shadow .3s ease;transition:box-shadow .3s ease,-webkit-box-shadow .3s ease}.ant-table-fixed-left table,.ant-table-fixed-right table{width:auto;background:#fff}.ant-table-fixed-header .ant-table-fixed-left .ant-table-body-outer .ant-table-fixed,.ant-table-fixed-header .ant-table-fixed-right .ant-table-body-outer .ant-table-fixed{border-radius:0}.ant-table-fixed-left{left:0;-webkit-box-shadow:6px 0 6px -4px rgba(0,0,0,.15);box-shadow:6px 0 6px -4px rgba(0,0,0,.15)}.ant-table-fixed-left .ant-table-header{overflow-y:hidden}.ant-table-fixed-left .ant-table-body-inner{margin-right:-20px;padding-right:20px}.ant-table-fixed-header .ant-table-fixed-left .ant-table-body-inner{padding-right:0}.ant-table-fixed-left,.ant-table-fixed-left table{border-radius:4px 0 0 0}.ant-table-fixed-left .ant-table-thead>tr>th:last-child{border-top-right-radius:0}.ant-table-fixed-right{right:0;-webkit-box-shadow:-6px 0 6px -4px rgba(0,0,0,.15);box-shadow:-6px 0 6px -4px rgba(0,0,0,.15)}.ant-table-fixed-right,.ant-table-fixed-right table{border-radius:0 4px 0 0}.ant-table-fixed-right .ant-table-expanded-row{color:transparent;pointer-events:none}.ant-table-fixed-right .ant-table-thead>tr>th:first-child{border-top-left-radius:0}.ant-table.ant-table-scroll-position-left .ant-table-fixed-left,.ant-table.ant-table-scroll-position-right .ant-table-fixed-right{-webkit-box-shadow:none;box-shadow:none}.ant-table colgroup>col.ant-table-selection-col{width:60px}.ant-table-thead>tr>th.ant-table-selection-column-custom .ant-table-selection{margin-right:-15px}.ant-table-tbody>tr>td.ant-table-selection-column,.ant-table-thead>tr>th.ant-table-selection-column{text-align:center}.ant-table-tbody>tr>td.ant-table-selection-column .ant-radio-wrapper,.ant-table-thead>tr>th.ant-table-selection-column .ant-radio-wrapper{margin-right:0}.ant-table-row[class*=ant-table-row-level-0] .ant-table-selection-column>span{display:inline-block}.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span,.ant-table-filter-dropdown .ant-checkbox-wrapper+span{padding-left:8px}@supports (-moz-appearance:meterbar){.ant-table-thead>tr>th.ant-table-column-has-actions{background-clip:padding-box}}.ant-table-middle>.ant-table-content>.ant-table-body>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-footer,.ant-table-middle>.ant-table-content>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-title{padding:12px 8px}.ant-table-middle tr.ant-table-expanded-row td>.ant-table-wrapper{margin:-12px -8px -13px}.ant-table-small{border:1px solid #e8e8e8;border-radius:4px}.ant-table-small>.ant-table-content>.ant-table-footer,.ant-table-small>.ant-table-title{padding:8px 8px}.ant-table-small>.ant-table-title{top:0;border-bottom:1px solid #e8e8e8}.ant-table-small>.ant-table-content>.ant-table-footer{background-color:transparent;border-top:1px solid #e8e8e8}.ant-table-small>.ant-table-content>.ant-table-footer:before{background-color:transparent}.ant-table-small>.ant-table-content>.ant-table-body{margin:0 8px}.ant-table-small>.ant-table-content>.ant-table-body>table,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table{border:0}.ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-thead>tr>th{padding:8px 8px}.ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-thead>tr>th{background-color:transparent}.ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-header>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-thead>tr{border-bottom:1px solid #e8e8e8}.ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-header>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-thead>tr>th.ant-table-column-sort{background-color:rgba(0,0,0,.01)}.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table{padding:0}.ant-table-small>.ant-table-content .ant-table-header{background-color:transparent;border-radius:4px 4px 0 0}.ant-table-small>.ant-table-content .ant-table-placeholder,.ant-table-small>.ant-table-content .ant-table-row:last-child td{border-bottom:0}.ant-table-small.ant-table-bordered{border-right:0}.ant-table-small.ant-table-bordered .ant-table-title{border:0;border-right:1px solid #e8e8e8;border-bottom:1px solid #e8e8e8}.ant-table-small.ant-table-bordered .ant-table-content{border-right:1px solid #e8e8e8}.ant-table-small.ant-table-bordered .ant-table-footer{border:0;border-top:1px solid #e8e8e8}.ant-table-small.ant-table-bordered .ant-table-footer:before{display:none}.ant-table-small.ant-table-bordered .ant-table-placeholder{border-right:0;border-bottom:0;border-left:0}.ant-table-small.ant-table-bordered .ant-table-tbody>tr>td:last-child,.ant-table-small.ant-table-bordered .ant-table-thead>tr>th.ant-table-row-cell-last{border-right:none}.ant-table-small.ant-table-bordered .ant-table-fixed-left .ant-table-tbody>tr>td:last-child,.ant-table-small.ant-table-bordered .ant-table-fixed-left .ant-table-thead>tr>th:last-child{border-right:1px solid #e8e8e8}.ant-table-small.ant-table-bordered .ant-table-fixed-right{border-right:1px solid #e8e8e8;border-left:1px solid #e8e8e8}.ant-table-small tr.ant-table-expanded-row td>.ant-table-wrapper{margin:-8px -8px -9px}.ant-table-small.ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body{border-radius:0 0 4px 4px}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-nav-container{height:40px}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-ink-bar{visibility:hidden}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab{height:40px;margin:0;margin-right:2px;padding:0 16px;line-height:38px;background:#fafafa;border:1px solid #e8e8e8;border-radius:4px 4px 0 0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active{height:40px;color:#1890ff;background:#fff;border-color:#e8e8e8;border-bottom:1px solid #fff}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active:before{border-top:2px solid transparent}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-disabled{color:#1890ff;color:rgba(0,0,0,.25)}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-inactive{padding:0}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-nav-wrap{margin-bottom:0}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab .ant-tabs-close-x{width:16px;height:16px;height:14px;margin-right:-5px;margin-left:3px;overflow:hidden;color:rgba(0,0,0,.45);font-size:12px;vertical-align:middle;-webkit-transition:all .3s;transition:all .3s}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab .ant-tabs-close-x:hover{color:rgba(0,0,0,.85)}.ant-tabs.ant-tabs-card .ant-tabs-card-content>.ant-tabs-tabpane,.ant-tabs.ant-tabs-editable-card .ant-tabs-card-content>.ant-tabs-tabpane{-webkit-transition:none!important;transition:none!important}.ant-tabs.ant-tabs-card .ant-tabs-card-content>.ant-tabs-tabpane-inactive,.ant-tabs.ant-tabs-editable-card .ant-tabs-card-content>.ant-tabs-tabpane-inactive{overflow:hidden}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab:hover .anticon-close{opacity:1}.ant-tabs-extra-content{line-height:45px}.ant-tabs-extra-content .ant-tabs-new-tab{position:relative;width:20px;height:20px;color:rgba(0,0,0,.65);font-size:12px;line-height:20px;text-align:center;border:1px solid #e8e8e8;border-radius:2px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-tabs-extra-content .ant-tabs-new-tab:hover{color:#1890ff;border-color:#1890ff}.ant-tabs-extra-content .ant-tabs-new-tab svg{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.ant-tabs.ant-tabs-large .ant-tabs-extra-content{line-height:56px}.ant-tabs.ant-tabs-small .ant-tabs-extra-content{line-height:37px}.ant-tabs.ant-tabs-card .ant-tabs-extra-content{line-height:40px}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-nav-container,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-nav-container{height:100%}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab{margin-bottom:8px;border-bottom:1px solid #e8e8e8}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab-active,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab-active{padding-bottom:4px}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab:last-child,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab:last-child{margin-bottom:8px}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-new-tab,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-new-tab{width:90%}.ant-tabs-vertical.ant-tabs-card.ant-tabs-left .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-nav-wrap{margin-right:0}.ant-tabs-vertical.ant-tabs-card.ant-tabs-left .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab{margin-right:1px;border-right:0;border-radius:4px 0 0 4px}.ant-tabs-vertical.ant-tabs-card.ant-tabs-left .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab-active{margin-right:-1px;padding-right:18px}.ant-tabs-vertical.ant-tabs-card.ant-tabs-right .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-nav-wrap{margin-left:0}.ant-tabs-vertical.ant-tabs-card.ant-tabs-right .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab{margin-left:1px;border-left:0;border-radius:0 4px 4px 0}.ant-tabs-vertical.ant-tabs-card.ant-tabs-right .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab-active{margin-left:-1px;padding-left:18px}.ant-tabs .ant-tabs-card-bar.ant-tabs-bottom-bar .ant-tabs-tab{height:auto;border-top:0;border-bottom:1px solid #e8e8e8;border-radius:0 0 4px 4px}.ant-tabs .ant-tabs-card-bar.ant-tabs-bottom-bar .ant-tabs-tab-active{padding-top:1px;padding-bottom:0;color:#1890ff}.ant-tabs{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;overflow:hidden;zoom:1}.ant-tabs:after,.ant-tabs:before{display:table;content:""}.ant-tabs:after{clear:both}.ant-tabs-ink-bar{position:absolute;bottom:1px;left:0;z-index:1;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:2px;background-color:#1890ff;-webkit-transform-origin:0 0;transform-origin:0 0}.ant-tabs-bar{margin:0 0 16px 0;border-bottom:1px solid #e8e8e8;outline:none}.ant-tabs-bar,.ant-tabs-nav-container{-webkit-transition:padding .3s cubic-bezier(.645,.045,.355,1);transition:padding .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-nav-container{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;margin-bottom:-1px;overflow:hidden;font-size:14px;line-height:1.5;white-space:nowrap;zoom:1}.ant-tabs-nav-container:after,.ant-tabs-nav-container:before{display:table;content:""}.ant-tabs-nav-container:after{clear:both}.ant-tabs-nav-container-scrolling{padding-right:32px;padding-left:32px}.ant-tabs-bottom .ant-tabs-bottom-bar{margin-top:16px;margin-bottom:0;border-top:1px solid #e8e8e8;border-bottom:none}.ant-tabs-bottom .ant-tabs-bottom-bar .ant-tabs-ink-bar{top:1px;bottom:auto}.ant-tabs-bottom .ant-tabs-bottom-bar .ant-tabs-nav-container{margin-top:-1px;margin-bottom:0}.ant-tabs-tab-next,.ant-tabs-tab-prev{position:absolute;z-index:2;width:0;height:100%;color:rgba(0,0,0,.45);text-align:center;background-color:transparent;border:0;cursor:pointer;opacity:0;-webkit-transition:width .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1);transition:width .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.ant-tabs-tab-next.ant-tabs-tab-arrow-show,.ant-tabs-tab-prev.ant-tabs-tab-arrow-show{width:32px;height:100%;opacity:1;pointer-events:auto}.ant-tabs-tab-next:hover,.ant-tabs-tab-prev:hover{color:rgba(0,0,0,.65)}.ant-tabs-tab-next-icon,.ant-tabs-tab-prev-icon{position:absolute;top:50%;left:50%;font-weight:700;font-style:normal;font-variant:normal;line-height:inherit;text-align:center;text-transform:none;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ant-tabs-tab-next-icon-target,.ant-tabs-tab-prev-icon-target{display:block;display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-tabs-tab-next-icon-target,:root .ant-tabs-tab-prev-icon-target{font-size:12px}.ant-tabs-tab-btn-disabled{cursor:not-allowed}.ant-tabs-tab-btn-disabled,.ant-tabs-tab-btn-disabled:hover{color:rgba(0,0,0,.25)}.ant-tabs-tab-next{right:2px}.ant-tabs-tab-prev{left:0}:root .ant-tabs-tab-prev{-webkit-filter:none;filter:none}.ant-tabs-nav-wrap{margin-bottom:-1px;overflow:hidden}.ant-tabs-nav-scroll{overflow:hidden;white-space:nowrap}.ant-tabs-nav{position:relative;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding-left:0;list-style:none;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-nav:after,.ant-tabs-nav:before{display:table;content:" "}.ant-tabs-nav:after{clear:both}.ant-tabs-nav .ant-tabs-tab{position:relative;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;margin:0 32px 0 0;padding:12px 16px;text-decoration:none;cursor:pointer;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-nav .ant-tabs-tab:before{position:absolute;top:-1px;left:0;width:100%;border-top:2px solid transparent;border-radius:4px 4px 0 0;-webkit-transition:all .3s;transition:all .3s;content:"";pointer-events:none}.ant-tabs-nav .ant-tabs-tab:last-child{margin-right:0}.ant-tabs-nav .ant-tabs-tab:hover{color:#40a9ff}.ant-tabs-nav .ant-tabs-tab:active{color:#096dd9}.ant-tabs-nav .ant-tabs-tab .anticon{margin-right:8px}.ant-tabs-nav .ant-tabs-tab-active{color:#1890ff;text-shadow:0 0 .25px currentColor}.ant-tabs-nav .ant-tabs-tab-disabled,.ant-tabs-nav .ant-tabs-tab-disabled:hover{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-tabs .ant-tabs-large-bar .ant-tabs-nav-container{font-size:16px}.ant-tabs .ant-tabs-large-bar .ant-tabs-tab{padding:16px}.ant-tabs .ant-tabs-small-bar .ant-tabs-nav-container{font-size:14px}.ant-tabs .ant-tabs-small-bar .ant-tabs-tab{padding:8px 16px}.ant-tabs-content:before{display:block;overflow:hidden;content:""}.ant-tabs .ant-tabs-bottom-content,.ant-tabs .ant-tabs-top-content{width:100%}.ant-tabs .ant-tabs-bottom-content>.ant-tabs-tabpane,.ant-tabs .ant-tabs-top-content>.ant-tabs-tabpane{-ms-flex-negative:0;flex-shrink:0;width:100%;-webkit-backface-visibility:hidden;opacity:1;-webkit-transition:opacity .45s;transition:opacity .45s}.ant-tabs .ant-tabs-bottom-content>.ant-tabs-tabpane-inactive,.ant-tabs .ant-tabs-top-content>.ant-tabs-tabpane-inactive{height:0;padding:0!important;overflow:hidden;opacity:0;pointer-events:none}.ant-tabs .ant-tabs-bottom-content>.ant-tabs-tabpane-inactive input,.ant-tabs .ant-tabs-top-content>.ant-tabs-tabpane-inactive input{visibility:hidden}.ant-tabs .ant-tabs-bottom-content.ant-tabs-content-animated,.ant-tabs .ant-tabs-top-content.ant-tabs-content-animated{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-transition:margin-left .3s cubic-bezier(.645,.045,.355,1);transition:margin-left .3s cubic-bezier(.645,.045,.355,1);will-change:margin-left}.ant-tabs .ant-tabs-left-bar,.ant-tabs .ant-tabs-right-bar{height:100%;border-bottom:0}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab-arrow-show,.ant-tabs .ant-tabs-right-bar .ant-tabs-tab-arrow-show{width:100%;height:32px}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab,.ant-tabs .ant-tabs-right-bar .ant-tabs-tab{display:block;float:none;margin:0 0 16px 0;padding:8px 24px}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab:last-child,.ant-tabs .ant-tabs-right-bar .ant-tabs-tab:last-child{margin-bottom:0}.ant-tabs .ant-tabs-left-bar .ant-tabs-extra-content,.ant-tabs .ant-tabs-right-bar .ant-tabs-extra-content{text-align:center}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-scroll,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-scroll{width:auto}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-wrap,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-wrap{height:100%}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-container{margin-bottom:0}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-container.ant-tabs-nav-container-scrolling,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-container.ant-tabs-nav-container-scrolling{padding:32px 0}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-wrap,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-wrap{margin-bottom:0}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav{width:100%}.ant-tabs .ant-tabs-left-bar .ant-tabs-ink-bar,.ant-tabs .ant-tabs-right-bar .ant-tabs-ink-bar{top:0;bottom:auto;left:auto;width:2px;height:0}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab-next,.ant-tabs .ant-tabs-right-bar .ant-tabs-tab-next{right:0;bottom:0;width:100%;height:32px}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab-prev,.ant-tabs .ant-tabs-right-bar .ant-tabs-tab-prev{top:0;width:100%;height:32px}.ant-tabs .ant-tabs-left-content,.ant-tabs .ant-tabs-right-content{width:auto;margin-top:0!important;overflow:hidden}.ant-tabs .ant-tabs-left-bar{float:left;margin-right:-1px;margin-bottom:0;border-right:1px solid #e8e8e8}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab{text-align:right}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-wrap{margin-right:-1px}.ant-tabs .ant-tabs-left-bar .ant-tabs-ink-bar{right:1px}.ant-tabs .ant-tabs-left-content{padding-left:24px;border-left:1px solid #e8e8e8}.ant-tabs .ant-tabs-right-bar{float:right;margin-bottom:0;margin-left:-1px;border-left:1px solid #e8e8e8}.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-wrap{margin-left:-1px}.ant-tabs .ant-tabs-right-bar .ant-tabs-ink-bar{left:1px}.ant-tabs .ant-tabs-right-content{padding-right:24px;border-right:1px solid #e8e8e8}.ant-tabs-bottom .ant-tabs-ink-bar-animated,.ant-tabs-top .ant-tabs-ink-bar-animated{-webkit-transition:width .2s cubic-bezier(.645,.045,.355,1),left .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:width .2s cubic-bezier(.645,.045,.355,1),left .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),width .2s cubic-bezier(.645,.045,.355,1),left .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),width .2s cubic-bezier(.645,.045,.355,1),left .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-left .ant-tabs-ink-bar-animated,.ant-tabs-right .ant-tabs-ink-bar-animated{-webkit-transition:height .2s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:height .2s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),height .2s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),height .2s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-no-animation>.ant-tabs-content>.ant-tabs-content-animated,.no-flex>.ant-tabs-content>.ant-tabs-content-animated{margin-left:0!important;-webkit-transform:none!important;transform:none!important}.ant-tabs-no-animation>.ant-tabs-content>.ant-tabs-tabpane-inactive,.no-flex>.ant-tabs-content>.ant-tabs-tabpane-inactive{height:0;padding:0!important;overflow:hidden;opacity:0;pointer-events:none}.ant-tabs-no-animation>.ant-tabs-content>.ant-tabs-tabpane-inactive input,.no-flex>.ant-tabs-content>.ant-tabs-tabpane-inactive input{visibility:hidden}.ant-tabs-left-content>.ant-tabs-content-animated,.ant-tabs-right-content>.ant-tabs-content-animated{margin-left:0!important;-webkit-transform:none!important;transform:none!important}.ant-tabs-left-content>.ant-tabs-tabpane-inactive,.ant-tabs-right-content>.ant-tabs-tabpane-inactive{height:0;padding:0!important;overflow:hidden;opacity:0;pointer-events:none}.ant-tabs-left-content>.ant-tabs-tabpane-inactive input,.ant-tabs-right-content>.ant-tabs-tabpane-inactive input{visibility:hidden}.ant-tag{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block;height:auto;margin-right:8px;padding:0 7px;font-size:12px;line-height:20px;white-space:nowrap;background:#fafafa;border:1px solid #d9d9d9;border-radius:4px;cursor:default;opacity:1;-webkit-transition:all .3s cubic-bezier(.78,.14,.15,.86);transition:all .3s cubic-bezier(.78,.14,.15,.86)}.ant-tag:hover{opacity:.85}.ant-tag,.ant-tag a,.ant-tag a:hover{color:rgba(0,0,0,.65)}.ant-tag>a:first-child:last-child{display:inline-block;margin:0 -8px;padding:0 8px}.ant-tag .anticon-close{display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg);margin-left:3px;color:rgba(0,0,0,.45);font-weight:700;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.78,.14,.15,.86);transition:all .3s cubic-bezier(.78,.14,.15,.86)}:root .ant-tag .anticon-close{font-size:12px}.ant-tag .anticon-close:hover{color:rgba(0,0,0,.85)}.ant-tag-has-color{border-color:transparent}.ant-tag-has-color,.ant-tag-has-color .anticon-close,.ant-tag-has-color .anticon-close:hover,.ant-tag-has-color a,.ant-tag-has-color a:hover{color:#fff}.ant-tag-checkable{background-color:transparent;border-color:transparent}.ant-tag-checkable:not(.ant-tag-checkable-checked):hover{color:#1890ff}.ant-tag-checkable-checked,.ant-tag-checkable:active{color:#fff}.ant-tag-checkable-checked{background-color:#1890ff}.ant-tag-checkable:active{background-color:#096dd9}.ant-tag-hidden{display:none}.ant-tag-pink{color:#eb2f96;background:#fff0f6;border-color:#ffadd2}.ant-tag-pink-inverse{color:#fff;background:#eb2f96;border-color:#eb2f96}.ant-tag-magenta{color:#eb2f96;background:#fff0f6;border-color:#ffadd2}.ant-tag-magenta-inverse{color:#fff;background:#eb2f96;border-color:#eb2f96}.ant-tag-red{color:#f5222d;background:#fff1f0;border-color:#ffa39e}.ant-tag-red-inverse{color:#fff;background:#f5222d;border-color:#f5222d}.ant-tag-volcano{color:#fa541c;background:#fff2e8;border-color:#ffbb96}.ant-tag-volcano-inverse{color:#fff;background:#fa541c;border-color:#fa541c}.ant-tag-orange{color:#fa8c16;background:#fff7e6;border-color:#ffd591}.ant-tag-orange-inverse{color:#fff;background:#fa8c16;border-color:#fa8c16}.ant-tag-yellow{color:#fadb14;background:#feffe6;border-color:#fffb8f}.ant-tag-yellow-inverse{color:#fff;background:#fadb14;border-color:#fadb14}.ant-tag-gold{color:#faad14;background:#fffbe6;border-color:#ffe58f}.ant-tag-gold-inverse{color:#fff;background:#faad14;border-color:#faad14}.ant-tag-cyan{color:#13c2c2;background:#e6fffb;border-color:#87e8de}.ant-tag-cyan-inverse{color:#fff;background:#13c2c2;border-color:#13c2c2}.ant-tag-lime{color:#a0d911;background:#fcffe6;border-color:#eaff8f}.ant-tag-lime-inverse{color:#fff;background:#a0d911;border-color:#a0d911}.ant-tag-green{color:#52c41a;background:#f6ffed;border-color:#b7eb8f}.ant-tag-green-inverse{color:#fff;background:#52c41a;border-color:#52c41a}.ant-tag-blue{color:#1890ff;background:#e6f7ff;border-color:#91d5ff}.ant-tag-blue-inverse{color:#fff;background:#1890ff;border-color:#1890ff}.ant-tag-geekblue{color:#2f54eb;background:#f0f5ff;border-color:#adc6ff}.ant-tag-geekblue-inverse{color:#fff;background:#2f54eb;border-color:#2f54eb}.ant-tag-purple{color:#722ed1;background:#f9f0ff;border-color:#d3adf7}.ant-tag-purple-inverse{color:#fff;background:#722ed1;border-color:#722ed1}.ant-time-picker-panel{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;z-index:1050;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.ant-time-picker-panel-inner{position:relative;left:-2px;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border-radius:4px;outline:none;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-time-picker-panel-input{width:100%;max-width:154px;margin:0;padding:0;line-height:normal;border:0;outline:0;cursor:auto}.ant-time-picker-panel-input::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-time-picker-panel-input:-ms-input-placeholder{color:#bfbfbf}.ant-time-picker-panel-input::-webkit-input-placeholder{color:#bfbfbf}.ant-time-picker-panel-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-time-picker-panel-input:-ms-input-placeholder{text-overflow:ellipsis}.ant-time-picker-panel-input:placeholder-shown{text-overflow:ellipsis}.ant-time-picker-panel-input-wrap{position:relative;padding:7px 2px 7px 12px;border-bottom:1px solid #e8e8e8}.ant-time-picker-panel-input-invalid{border-color:#f5222d}.ant-time-picker-panel-narrow .ant-time-picker-panel-input-wrap{max-width:112px}.ant-time-picker-panel-select{position:relative;float:left;width:56px;max-height:192px;overflow:hidden;font-size:14px;border-left:1px solid #e8e8e8}.ant-time-picker-panel-select:hover{overflow-y:auto}.ant-time-picker-panel-select:first-child{margin-left:0;border-left:0}.ant-time-picker-panel-select:last-child{border-right:0}.ant-time-picker-panel-select:only-child{width:100%}.ant-time-picker-panel-select ul{width:56px;margin:0;padding:0 0 160px;list-style:none}.ant-time-picker-panel-select li{width:100%;height:32px;margin:0;padding:0 0 0 12px;line-height:32px;text-align:left;list-style:none;cursor:pointer;-webkit-transition:all .3s;transition:all .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-time-picker-panel-select li:focus{color:#1890ff;font-weight:600;outline:none}.ant-time-picker-panel-select li:hover{background:#e6f7ff}li.ant-time-picker-panel-select-option-selected{font-weight:600;background:#f5f5f5}li.ant-time-picker-panel-select-option-selected:hover{background:#f5f5f5}li.ant-time-picker-panel-select-option-disabled{color:rgba(0,0,0,.25)}li.ant-time-picker-panel-select-option-disabled:hover{background:transparent;cursor:not-allowed}li.ant-time-picker-panel-select-option-disabled:focus{color:rgba(0,0,0,.25);font-weight:inherit}.ant-time-picker-panel-combobox{zoom:1}.ant-time-picker-panel-combobox:after,.ant-time-picker-panel-combobox:before{display:table;content:""}.ant-time-picker-panel-combobox:after{clear:both}.ant-time-picker-panel-addon{padding:8px;border-top:1px solid #e8e8e8}.ant-time-picker-panel.slide-up-appear.slide-up-appear-active.ant-time-picker-panel-placement-topLeft,.ant-time-picker-panel.slide-up-appear.slide-up-appear-active.ant-time-picker-panel-placement-topRight,.ant-time-picker-panel.slide-up-enter.slide-up-enter-active.ant-time-picker-panel-placement-topLeft,.ant-time-picker-panel.slide-up-enter.slide-up-enter-active.ant-time-picker-panel-placement-topRight{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn}.ant-time-picker-panel.slide-up-appear.slide-up-appear-active.ant-time-picker-panel-placement-bottomLeft,.ant-time-picker-panel.slide-up-appear.slide-up-appear-active.ant-time-picker-panel-placement-bottomRight,.ant-time-picker-panel.slide-up-enter.slide-up-enter-active.ant-time-picker-panel-placement-bottomLeft,.ant-time-picker-panel.slide-up-enter.slide-up-enter-active.ant-time-picker-panel-placement-bottomRight{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn}.ant-time-picker-panel.slide-up-leave.slide-up-leave-active.ant-time-picker-panel-placement-topLeft,.ant-time-picker-panel.slide-up-leave.slide-up-leave-active.ant-time-picker-panel-placement-topRight{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut}.ant-time-picker-panel.slide-up-leave.slide-up-leave-active.ant-time-picker-panel-placement-bottomLeft,.ant-time-picker-panel.slide-up-leave.slide-up-leave-active.ant-time-picker-panel-placement-bottomRight{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut}.ant-time-picker{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;font-size:14px;font-variant:tabular-nums;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";width:128px;outline:none;cursor:text;-webkit-transition:opacity .3s;transition:opacity .3s}.ant-time-picker,.ant-time-picker-input{color:rgba(0,0,0,.65);line-height:1.5;position:relative;display:inline-block}.ant-time-picker-input{width:100%;height:32px;padding:4px 11px;font-size:14px;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:4px;-webkit-transition:all .3s;transition:all .3s}.ant-time-picker-input::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-time-picker-input:-ms-input-placeholder{color:#bfbfbf}.ant-time-picker-input::-webkit-input-placeholder{color:#bfbfbf}.ant-time-picker-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-time-picker-input:-ms-input-placeholder{text-overflow:ellipsis}.ant-time-picker-input:placeholder-shown{text-overflow:ellipsis}.ant-time-picker-input:focus,.ant-time-picker-input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-time-picker-input:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-time-picker-input-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-time-picker-input-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}textarea.ant-time-picker-input{max-width:100%;height:auto;min-height:32px;line-height:1.5;vertical-align:bottom;-webkit-transition:all .3s,height 0s;transition:all .3s,height 0s}.ant-time-picker-input-lg{height:40px;padding:6px 11px;font-size:16px}.ant-time-picker-input-sm{height:24px;padding:1px 7px}.ant-time-picker-input[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-time-picker-input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-time-picker-open{opacity:0}.ant-time-picker-clear,.ant-time-picker-icon{position:absolute;top:50%;right:11px;z-index:1;width:14px;height:14px;margin-top:-7px;color:rgba(0,0,0,.25);line-height:14px;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-time-picker-clear .ant-time-picker-clock-icon,.ant-time-picker-icon .ant-time-picker-clock-icon{display:block;color:rgba(0,0,0,.25);line-height:1}.ant-time-picker-clear{z-index:2;background:#fff;opacity:0;pointer-events:none}.ant-time-picker-clear:hover{color:rgba(0,0,0,.45)}.ant-time-picker:hover .ant-time-picker-clear{opacity:1;pointer-events:auto}.ant-time-picker-large .ant-time-picker-input{height:40px;padding:6px 11px;font-size:16px}.ant-time-picker-small .ant-time-picker-input{height:24px;padding:1px 7px}.ant-time-picker-small .ant-time-picker-clear,.ant-time-picker-small .ant-time-picker-icon{right:7px}@media not all and (min-resolution:0.001dpcm){@supports (-webkit-appearance:none) and (stroke-color:transparent){.ant-input{line-height:1.5}}}.ant-timeline{-webkit-box-sizing:border-box;box-sizing:border-box;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";margin:0;padding:0;list-style:none}.ant-timeline-item{position:relative;margin:0;padding:0 0 20px;font-size:14px;list-style:none}.ant-timeline-item-tail{position:absolute;top:10px;left:4px;height:calc(100% - 10px);border-left:2px solid #e8e8e8}.ant-timeline-item-pending .ant-timeline-item-head{font-size:12px;background-color:transparent}.ant-timeline-item-pending .ant-timeline-item-tail{display:none}.ant-timeline-item-head{position:absolute;width:10px;height:10px;background-color:#fff;border:2px solid transparent;border-radius:100px}.ant-timeline-item-head-blue{color:#1890ff;border-color:#1890ff}.ant-timeline-item-head-red{color:#f5222d;border-color:#f5222d}.ant-timeline-item-head-green{color:#52c41a;border-color:#52c41a}.ant-timeline-item-head-gray{color:rgba(0,0,0,.25);border-color:rgba(0,0,0,.25)}.ant-timeline-item-head-custom{position:absolute;top:5.5px;left:5px;width:auto;height:auto;margin-top:0;padding:3px 1px;line-height:1;text-align:center;border:0;border-radius:0;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ant-timeline-item-content{position:relative;top:-6px;margin:0 0 0 18px;word-break:break-word}.ant-timeline-item-last>.ant-timeline-item-tail{display:none}.ant-timeline-item-last>.ant-timeline-item-content{min-height:48px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-tail{left:50%}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-head{margin-left:-4px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom{margin-left:1px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content{left:calc(50% - 4px);width:calc(50% - 14px);text-align:left}.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content{width:calc(50% - 12px);margin:0;text-align:right}.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail{left:calc(100% - 6px)}.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content{width:calc(100% - 18px)}.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail{display:block;height:calc(100% - 14px);border-left:2px dotted #e8e8e8}.ant-timeline.ant-timeline-reverse .ant-timeline-item-last .ant-timeline-item-tail{display:none}.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail{top:15px;display:block;height:calc(100% - 15px);border-left:2px dotted #e8e8e8}.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-content{min-height:48px}.ant-tooltip{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;z-index:1060;display:block;max-width:250px;visibility:visible}.ant-tooltip-hidden{display:none}.ant-tooltip-placement-top,.ant-tooltip-placement-topLeft,.ant-tooltip-placement-topRight{padding-bottom:8px}.ant-tooltip-placement-right,.ant-tooltip-placement-rightBottom,.ant-tooltip-placement-rightTop{padding-left:8px}.ant-tooltip-placement-bottom,.ant-tooltip-placement-bottomLeft,.ant-tooltip-placement-bottomRight{padding-top:8px}.ant-tooltip-placement-left,.ant-tooltip-placement-leftBottom,.ant-tooltip-placement-leftTop{padding-right:8px}.ant-tooltip-inner{min-width:30px;min-height:32px;padding:6px 8px;color:#fff;text-align:left;text-decoration:none;word-wrap:break-word;background-color:rgba(0,0,0,.75);border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-tooltip-arrow{position:absolute;display:block;width:13.07106781px;height:13.07106781px;overflow:hidden;background:transparent;pointer-events:none}.ant-tooltip-arrow:before{position:absolute;top:0;right:0;bottom:0;left:0;display:block;width:5px;height:5px;margin:auto;background-color:rgba(0,0,0,.75);content:"";pointer-events:auto}.ant-tooltip-placement-top .ant-tooltip-arrow,.ant-tooltip-placement-topLeft .ant-tooltip-arrow,.ant-tooltip-placement-topRight .ant-tooltip-arrow{bottom:-5.07106781px}.ant-tooltip-placement-top .ant-tooltip-arrow:before,.ant-tooltip-placement-topLeft .ant-tooltip-arrow:before,.ant-tooltip-placement-topRight .ant-tooltip-arrow:before{-webkit-box-shadow:3px 3px 7px rgba(0,0,0,.07);box-shadow:3px 3px 7px rgba(0,0,0,.07);-webkit-transform:translateY(-6.53553391px) rotate(45deg);transform:translateY(-6.53553391px) rotate(45deg)}.ant-tooltip-placement-top .ant-tooltip-arrow{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.ant-tooltip-placement-topLeft .ant-tooltip-arrow{left:13px}.ant-tooltip-placement-topRight .ant-tooltip-arrow{right:13px}.ant-tooltip-placement-right .ant-tooltip-arrow,.ant-tooltip-placement-rightBottom .ant-tooltip-arrow,.ant-tooltip-placement-rightTop .ant-tooltip-arrow{left:-5.07106781px}.ant-tooltip-placement-right .ant-tooltip-arrow:before,.ant-tooltip-placement-rightBottom .ant-tooltip-arrow:before,.ant-tooltip-placement-rightTop .ant-tooltip-arrow:before{-webkit-box-shadow:-3px 3px 7px rgba(0,0,0,.07);box-shadow:-3px 3px 7px rgba(0,0,0,.07);-webkit-transform:translateX(6.53553391px) rotate(45deg);transform:translateX(6.53553391px) rotate(45deg)}.ant-tooltip-placement-right .ant-tooltip-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ant-tooltip-placement-rightTop .ant-tooltip-arrow{top:5px}.ant-tooltip-placement-rightBottom .ant-tooltip-arrow{bottom:5px}.ant-tooltip-placement-left .ant-tooltip-arrow,.ant-tooltip-placement-leftBottom .ant-tooltip-arrow,.ant-tooltip-placement-leftTop .ant-tooltip-arrow{right:-5.07106781px}.ant-tooltip-placement-left .ant-tooltip-arrow:before,.ant-tooltip-placement-leftBottom .ant-tooltip-arrow:before,.ant-tooltip-placement-leftTop .ant-tooltip-arrow:before{-webkit-box-shadow:3px -3px 7px rgba(0,0,0,.07);box-shadow:3px -3px 7px rgba(0,0,0,.07);-webkit-transform:translateX(-6.53553391px) rotate(45deg);transform:translateX(-6.53553391px) rotate(45deg)}.ant-tooltip-placement-left .ant-tooltip-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ant-tooltip-placement-leftTop .ant-tooltip-arrow{top:5px}.ant-tooltip-placement-leftBottom .ant-tooltip-arrow{bottom:5px}.ant-tooltip-placement-bottom .ant-tooltip-arrow,.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow,.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{top:-5.07106781px}.ant-tooltip-placement-bottom .ant-tooltip-arrow:before,.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow:before,.ant-tooltip-placement-bottomRight .ant-tooltip-arrow:before{-webkit-box-shadow:-3px -3px 7px rgba(0,0,0,.07);box-shadow:-3px -3px 7px rgba(0,0,0,.07);-webkit-transform:translateY(6.53553391px) rotate(45deg);transform:translateY(6.53553391px) rotate(45deg)}.ant-tooltip-placement-bottom .ant-tooltip-arrow{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow{left:13px}.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{right:13px}.ant-transfer-customize-list{display:-webkit-box;display:-ms-flexbox;display:flex}.ant-transfer-customize-list .ant-transfer-operation{-webkit-box-flex:0;-ms-flex:none;flex:none;-ms-flex-item-align:center;align-self:center}.ant-transfer-customize-list .ant-transfer-list{-webkit-box-flex:1;-ms-flex:auto;flex:auto;width:auto;height:auto;min-height:200px}.ant-transfer-customize-list .ant-transfer-list-body-with-search{padding-top:0}.ant-transfer-customize-list .ant-transfer-list-body-search-wrapper{position:relative;padding-bottom:0}.ant-transfer-customize-list .ant-transfer-list-body-customize-wrapper{padding:12px}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small{border:0;border-radius:0}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th{background:#fafafa}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small>.ant-table-content .ant-table-row:last-child td{border-bottom:1px solid #e8e8e8}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small .ant-table-body{margin:0}.ant-transfer-customize-list .ant-table-wrapper .ant-table-pagination.ant-pagination{margin:16px 0 4px}.ant-transfer{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative}.ant-transfer-disabled .ant-transfer-list{background:#f5f5f5}.ant-transfer-list{position:relative;display:inline-block;width:180px;height:200px;padding-top:40px;vertical-align:middle;border:1px solid #d9d9d9;border-radius:4px}.ant-transfer-list-with-footer{padding-bottom:34px}.ant-transfer-list-search{padding:0 24px 0 8px}.ant-transfer-list-search-action{position:absolute;top:12px;right:12px;bottom:12px;width:28px;color:rgba(0,0,0,.25);line-height:32px;text-align:center}.ant-transfer-list-search-action .anticon{color:rgba(0,0,0,.25);-webkit-transition:all .3s;transition:all .3s}.ant-transfer-list-search-action .anticon:hover{color:rgba(0,0,0,.45)}span.ant-transfer-list-search-action{pointer-events:none}.ant-transfer-list-header{position:absolute;top:0;left:0;width:100%;padding:8px 12px 9px;overflow:hidden;color:rgba(0,0,0,.65);background:#fff;border-bottom:1px solid #e8e8e8;border-radius:4px 4px 0 0}.ant-transfer-list-header-title{position:absolute;right:12px}.ant-transfer-list-header .ant-checkbox-wrapper+span{padding-left:8px}.ant-transfer-list-body{position:relative;height:100%;font-size:14px}.ant-transfer-list-body-search-wrapper{position:absolute;top:0;left:0;width:100%;padding:12px}.ant-transfer-list-body-with-search{padding-top:56px}.ant-transfer-list-content{height:100%;margin:0;padding:0;overflow:auto;list-style:none}.ant-transfer-list-content>.LazyLoad{-webkit-animation:transferHighlightIn 1s;animation:transferHighlightIn 1s}.ant-transfer-list-content-item{min-height:32px;padding:6px 12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-transition:all .3s;transition:all .3s}.ant-transfer-list-content-item>span{padding-right:0}.ant-transfer-list-content-item-text{padding-left:8px}.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background-color:#e6f7ff;cursor:pointer}.ant-transfer-list-content-item-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-transfer-list-body-not-found{position:absolute;top:50%;width:100%;padding-top:0;color:rgba(0,0,0,.25);text-align:center;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ant-transfer-list-body-with-search .ant-transfer-list-body-not-found{margin-top:16px}.ant-transfer-list-footer{position:absolute;bottom:0;left:0;width:100%;border-top:1px solid #e8e8e8;border-radius:0 0 4px 4px}.ant-transfer-operation{display:inline-block;margin:0 8px;overflow:hidden;vertical-align:middle}.ant-transfer-operation .ant-btn{display:block}.ant-transfer-operation .ant-btn:first-child{margin-bottom:4px}.ant-transfer-operation .ant-btn .anticon{font-size:12px}@-webkit-keyframes transferHighlightIn{0%{background:#bae7ff}to{background:transparent}}@keyframes transferHighlightIn{0%{background:#bae7ff}to{background:transparent}}.ant-tree.ant-tree-directory{position:relative}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-switcher,.ant-tree.ant-tree-directory>li span.ant-tree-switcher{position:relative;z-index:1}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-switcher.ant-tree-switcher-noop,.ant-tree.ant-tree-directory>li span.ant-tree-switcher.ant-tree-switcher-noop{pointer-events:none}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-checkbox,.ant-tree.ant-tree-directory>li span.ant-tree-checkbox{position:relative;z-index:1}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-node-content-wrapper,.ant-tree.ant-tree-directory>li span.ant-tree-node-content-wrapper{border-radius:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-node-content-wrapper:hover,.ant-tree.ant-tree-directory>li span.ant-tree-node-content-wrapper:hover{background:transparent}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-node-content-wrapper:hover:before,.ant-tree.ant-tree-directory>li span.ant-tree-node-content-wrapper:hover:before{background:#e6f7ff}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-node-content-wrapper.ant-tree-node-selected,.ant-tree.ant-tree-directory>li span.ant-tree-node-content-wrapper.ant-tree-node-selected{color:#fff;background:transparent}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-node-content-wrapper:before,.ant-tree.ant-tree-directory>li span.ant-tree-node-content-wrapper:before{position:absolute;right:0;left:0;height:24px;-webkit-transition:all .3s;transition:all .3s;content:""}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-node-content-wrapper>span,.ant-tree.ant-tree-directory>li span.ant-tree-node-content-wrapper>span{position:relative;z-index:1}.ant-tree.ant-tree-directory .ant-tree-child-tree>li.ant-tree-treenode-selected>span.ant-tree-switcher,.ant-tree.ant-tree-directory>li.ant-tree-treenode-selected>span.ant-tree-switcher{color:#fff}.ant-tree.ant-tree-directory .ant-tree-child-tree>li.ant-tree-treenode-selected>span.ant-tree-checkbox .ant-tree-checkbox-inner,.ant-tree.ant-tree-directory>li.ant-tree-treenode-selected>span.ant-tree-checkbox .ant-tree-checkbox-inner{border-color:#1890ff}.ant-tree.ant-tree-directory .ant-tree-child-tree>li.ant-tree-treenode-selected>span.ant-tree-checkbox.ant-tree-checkbox-checked:after,.ant-tree.ant-tree-directory>li.ant-tree-treenode-selected>span.ant-tree-checkbox.ant-tree-checkbox-checked:after{border-color:#fff}.ant-tree.ant-tree-directory .ant-tree-child-tree>li.ant-tree-treenode-selected>span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner,.ant-tree.ant-tree-directory>li.ant-tree-treenode-selected>span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner{background:#fff}.ant-tree.ant-tree-directory .ant-tree-child-tree>li.ant-tree-treenode-selected>span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after,.ant-tree.ant-tree-directory>li.ant-tree-treenode-selected>span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after{border-color:#1890ff}.ant-tree.ant-tree-directory .ant-tree-child-tree>li.ant-tree-treenode-selected>span.ant-tree-node-content-wrapper:before,.ant-tree.ant-tree-directory>li.ant-tree-treenode-selected>span.ant-tree-node-content-wrapper:before{background:#1890ff}.ant-tree-checkbox{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;top:-.09em;display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;outline:none;cursor:pointer}.ant-tree-checkbox-input:focus+.ant-tree-checkbox-inner,.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-inner,.ant-tree-checkbox:hover .ant-tree-checkbox-inner{border-color:#1890ff}.ant-tree-checkbox-checked:after{top:0;height:100%;border:1px solid #1890ff;border-radius:2px;visibility:hidden;-webkit-animation:antCheckboxEffect .36s ease-in-out;animation:antCheckboxEffect .36s ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;content:""}.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox:after,.ant-tree-checkbox:hover:after{visibility:visible}.ant-tree-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;-webkit-transition:all .3s;transition:all .3s}.ant-tree-checkbox-inner:after{position:absolute;top:50%;left:22%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(0) translate(-50%,-50%);transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;-webkit-transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-tree-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(1) translate(-50%,-50%);transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;-webkit-transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-tree-checkbox-checked .ant-tree-checkbox-inner{background-color:#1890ff;border-color:#1890ff}.ant-tree-checkbox-disabled{cursor:not-allowed}.ant-tree-checkbox-disabled.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after{border-color:rgba(0,0,0,.25);-webkit-animation-name:none;animation-name:none}.ant-tree-checkbox-disabled .ant-tree-checkbox-input{cursor:not-allowed}.ant-tree-checkbox-disabled .ant-tree-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;-webkit-animation-name:none;animation-name:none}.ant-tree-checkbox-disabled+span{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-tree-checkbox-disabled:hover:after,.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-disabled:after{visibility:hidden}.ant-tree-checkbox-wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block;line-height:unset;cursor:pointer}.ant-tree-checkbox-wrapper.ant-tree-checkbox-wrapper-disabled{cursor:not-allowed}.ant-tree-checkbox-wrapper+.ant-tree-checkbox-wrapper{margin-left:8px}.ant-tree-checkbox+span{padding-right:8px;padding-left:8px}.ant-tree-checkbox-group{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block}.ant-tree-checkbox-group-item{display:inline-block;margin-right:8px}.ant-tree-checkbox-group-item:last-child{margin-right:0}.ant-tree-checkbox-group-item+.ant-tree-checkbox-group-item{margin-left:0}.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#1890ff;border:0;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-tree-checkbox-indeterminate.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after{background-color:rgba(0,0,0,.25);border-color:rgba(0,0,0,.25)}.ant-tree{-webkit-box-sizing:border-box;box-sizing:border-box;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";margin:0;padding:0}.ant-tree-checkbox-checked:after{position:absolute;top:16.67%;left:0;width:100%;height:66.67%}.ant-tree ol,.ant-tree ul{margin:0;padding:0;list-style:none}.ant-tree li{margin:0;padding:4px 0;white-space:nowrap;list-style:none;outline:0}.ant-tree li span[draggable=true],.ant-tree li span[draggable]{line-height:20px;border-top:2px solid transparent;border-bottom:2px solid transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}.ant-tree li.drag-over>span[draggable]{color:#fff;background-color:#1890ff;opacity:.8}.ant-tree li.drag-over-gap-top>span[draggable]{border-top-color:#1890ff}.ant-tree li.drag-over-gap-bottom>span[draggable]{border-bottom-color:#1890ff}.ant-tree li.filter-node>span{color:#f5222d!important;font-weight:500!important}.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-loading-icon,.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-loading-icon{position:absolute;left:0;display:inline-block;width:24px;height:24px;color:#1890ff;font-size:14px;-webkit-transform:none;transform:none}.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-loading-icon svg,.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-loading-icon svg{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}:root .ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_close:after,:root .ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_open:after{opacity:0}.ant-tree li ul{margin:0;padding:0 0 0 18px}.ant-tree li .ant-tree-node-content-wrapper{display:inline-block;height:24px;margin:0;padding:0 5px;color:rgba(0,0,0,.65);line-height:24px;text-decoration:none;vertical-align:top;border-radius:2px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-tree li .ant-tree-node-content-wrapper:hover{background-color:#e6f7ff}.ant-tree li .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:#bae7ff}.ant-tree li span.ant-tree-checkbox{top:auto;height:24px;margin:0 4px 0 2px;padding:4px 0}.ant-tree li span.ant-tree-iconEle,.ant-tree li span.ant-tree-switcher{display:inline-block;width:24px;height:24px;margin:0;line-height:24px;text-align:center;vertical-align:top;border:0 none;outline:none;cursor:pointer}.ant-tree li span.ant-tree-iconEle:empty{display:none}.ant-tree li span.ant-tree-switcher{position:relative}.ant-tree li span.ant-tree-switcher.ant-tree-switcher-noop{cursor:default}.ant-tree li span.ant-tree-switcher.ant-tree-switcher_open .ant-select-switcher-icon,.ant-tree li span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-icon{font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg);display:inline-block;font-weight:700}:root .ant-tree li span.ant-tree-switcher.ant-tree-switcher_open .ant-select-switcher-icon,:root .ant-tree li span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-icon{font-size:12px}.ant-tree li span.ant-tree-switcher.ant-tree-switcher_open .ant-select-switcher-icon svg,.ant-tree li span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-tree li span.ant-tree-switcher.ant-tree-switcher_close .ant-select-switcher-icon,.ant-tree li span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-icon{font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg);display:inline-block;font-weight:700}:root .ant-tree li span.ant-tree-switcher.ant-tree-switcher_close .ant-select-switcher-icon,:root .ant-tree li span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-icon{font-size:12px}.ant-tree li span.ant-tree-switcher.ant-tree-switcher_close .ant-select-switcher-icon svg,.ant-tree li span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-tree li span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-icon svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.ant-tree li:last-child>span.ant-tree-iconEle:before,.ant-tree li:last-child>span.ant-tree-switcher:before{display:none}.ant-tree>li:first-child{padding-top:7px}.ant-tree>li:last-child{padding-bottom:7px}.ant-tree-child-tree>li:first-child{padding-top:8px}.ant-tree-child-tree>li:last-child{padding-bottom:0}li.ant-tree-treenode-disabled>.ant-tree-node-content-wrapper,li.ant-tree-treenode-disabled>.ant-tree-node-content-wrapper span,li.ant-tree-treenode-disabled>span:not(.ant-tree-switcher){color:rgba(0,0,0,.25);cursor:not-allowed}li.ant-tree-treenode-disabled>.ant-tree-node-content-wrapper:hover{background:transparent}.ant-tree-icon__close,.ant-tree-icon__open{margin-right:2px;vertical-align:top}.ant-tree.ant-tree-show-line li{position:relative}.ant-tree.ant-tree-show-line li span.ant-tree-switcher{color:rgba(0,0,0,.45);background:#fff}.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher-noop .ant-select-switcher-icon,.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher-noop .ant-tree-switcher-icon{display:inline-block;font-weight:400;font-size:12px}.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher-noop .ant-select-switcher-icon svg,.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher-noop .ant-tree-switcher-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_open .ant-select-switcher-icon,.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-icon{display:inline-block;font-weight:400;font-size:12px}.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_open .ant-select-switcher-icon svg,.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_close .ant-select-switcher-icon,.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-icon{display:inline-block;font-weight:400;font-size:12px}.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_close .ant-select-switcher-icon svg,.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-tree.ant-tree-show-line li:not(:last-child):before{position:absolute;left:12px;width:1px;height:100%;height:calc(100% - 22px);margin:22px 0 0;border-left:1px solid #d9d9d9;content:" "}.ant-tree.ant-tree-icon-hide .ant-tree-treenode-loading .ant-tree-iconEle{display:none}.ant-tree.ant-tree-block-node li .ant-tree-node-content-wrapper{width:calc(100% - 24px)}.ant-tree.ant-tree-block-node li span.ant-tree-checkbox+.ant-tree-node-content-wrapper{width:calc(100% - 46px)}.ant-select-tree-checkbox{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;top:-.09em;display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;outline:none;cursor:pointer}.ant-select-tree-checkbox-input:focus+.ant-select-tree-checkbox-inner,.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-inner,.ant-select-tree-checkbox:hover .ant-select-tree-checkbox-inner{border-color:#1890ff}.ant-select-tree-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:2px;visibility:hidden;-webkit-animation:antCheckboxEffect .36s ease-in-out;animation:antCheckboxEffect .36s ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;content:""}.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox:after,.ant-select-tree-checkbox:hover:after{visibility:visible}.ant-select-tree-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;-webkit-transition:all .3s;transition:all .3s}.ant-select-tree-checkbox-inner:after{position:absolute;top:50%;left:22%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(0) translate(-50%,-50%);transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;-webkit-transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-select-tree-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(1) translate(-50%,-50%);transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;-webkit-transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner{background-color:#1890ff;border-color:#1890ff}.ant-select-tree-checkbox-disabled{cursor:not-allowed}.ant-select-tree-checkbox-disabled.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after{border-color:rgba(0,0,0,.25);-webkit-animation-name:none;animation-name:none}.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-input{cursor:not-allowed}.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;-webkit-animation-name:none;animation-name:none}.ant-select-tree-checkbox-disabled+span{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-select-tree-checkbox-disabled:hover:after,.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-disabled:after{visibility:hidden}.ant-select-tree-checkbox-wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block;line-height:unset;cursor:pointer}.ant-select-tree-checkbox-wrapper.ant-select-tree-checkbox-wrapper-disabled{cursor:not-allowed}.ant-select-tree-checkbox-wrapper+.ant-select-tree-checkbox-wrapper{margin-left:8px}.ant-select-tree-checkbox+span{padding-right:8px;padding-left:8px}.ant-select-tree-checkbox-group{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block}.ant-select-tree-checkbox-group-item{display:inline-block;margin-right:8px}.ant-select-tree-checkbox-group-item:last-child{margin-right:0}.ant-select-tree-checkbox-group-item+.ant-select-tree-checkbox-group-item{margin-left:0}.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#1890ff;border:0;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-select-tree-checkbox-indeterminate.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after{background-color:rgba(0,0,0,.25);border-color:rgba(0,0,0,.25)}.ant-select-tree{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";margin:0;margin-top:-4px;padding:0 4px}.ant-select-tree li{margin:8px 0;padding:0;white-space:nowrap;list-style:none;outline:0}.ant-select-tree li.filter-node>span{font-weight:500}.ant-select-tree li ul{margin:0;padding:0 0 0 18px}.ant-select-tree li .ant-select-tree-node-content-wrapper{display:inline-block;width:calc(100% - 24px);margin:0;padding:3px 5px;color:rgba(0,0,0,.65);text-decoration:none;border-radius:2px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-select-tree li .ant-select-tree-node-content-wrapper:hover{background-color:#e6f7ff}.ant-select-tree li .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected{background-color:#bae7ff}.ant-select-tree li span.ant-select-tree-checkbox{margin:0 4px 0 0}.ant-select-tree li span.ant-select-tree-checkbox+.ant-select-tree-node-content-wrapper{width:calc(100% - 46px)}.ant-select-tree li span.ant-select-tree-iconEle,.ant-select-tree li span.ant-select-tree-switcher{display:inline-block;width:24px;height:24px;margin:0;line-height:22px;text-align:center;vertical-align:middle;border:0 none;outline:none;cursor:pointer}.ant-select-tree li span.ant-select-icon_loading .ant-select-switcher-loading-icon{position:absolute;left:0;display:inline-block;color:#1890ff;font-size:14px;-webkit-transform:none;transform:none}.ant-select-tree li span.ant-select-icon_loading .ant-select-switcher-loading-icon svg{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.ant-select-tree li span.ant-select-tree-switcher{position:relative}.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher-noop{cursor:auto}.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_open .ant-select-switcher-icon,.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_open .ant-tree-switcher-icon{font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg);display:inline-block;font-weight:700}:root .ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_open .ant-select-switcher-icon,:root .ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_open .ant-tree-switcher-icon{font-size:12px}.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_open .ant-select-switcher-icon svg,.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_open .ant-tree-switcher-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_close .ant-select-switcher-icon,.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_close .ant-tree-switcher-icon{font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg);display:inline-block;font-weight:700}:root .ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_close .ant-select-switcher-icon,:root .ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_close .ant-tree-switcher-icon{font-size:12px}.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_close .ant-select-switcher-icon svg,.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_close .ant-tree-switcher-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_close .ant-select-switcher-icon svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_close .ant-select-switcher-loading-icon,.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_open .ant-select-switcher-loading-icon{position:absolute;left:0;display:inline-block;width:24px;height:24px;color:#1890ff;font-size:14px;-webkit-transform:none;transform:none}.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_close .ant-select-switcher-loading-icon svg,.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_open .ant-select-switcher-loading-icon svg{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.ant-select-tree-child-tree,.ant-select-tree .ant-select-tree-treenode-loading .ant-select-tree-iconEle{display:none}.ant-select-tree-child-tree-open{display:block}li.ant-select-tree-treenode-disabled>.ant-select-tree-node-content-wrapper,li.ant-select-tree-treenode-disabled>.ant-select-tree-node-content-wrapper span,li.ant-select-tree-treenode-disabled>span:not(.ant-select-tree-switcher){color:rgba(0,0,0,.25);cursor:not-allowed}li.ant-select-tree-treenode-disabled>.ant-select-tree-node-content-wrapper:hover{background:transparent}.ant-select-tree-icon__close,.ant-select-tree-icon__open{margin-right:2px;vertical-align:top}.ant-select-tree-dropdown{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.ant-select-tree-dropdown .ant-select-dropdown-search{position:sticky;top:0;z-index:1;display:block;padding:4px;background:#fff}.ant-select-tree-dropdown .ant-select-dropdown-search .ant-select-search__field__wrap{width:100%}.ant-select-tree-dropdown .ant-select-dropdown-search .ant-select-search__field{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding:4px 7px;border:1px solid #d9d9d9;border-radius:4px;outline:none}.ant-select-tree-dropdown .ant-select-dropdown-search.ant-select-search--hide{display:none}.ant-select-tree-dropdown .ant-select-not-found{display:block;padding:7px 16px;color:rgba(0,0,0,.25);cursor:not-allowed}.ant-upload{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";outline:0}.ant-upload p{margin:0}.ant-upload-btn{display:block;width:100%;outline:none}.ant-upload input[type=file]{cursor:pointer}.ant-upload.ant-upload-select{display:inline-block}.ant-upload.ant-upload-disabled{cursor:not-allowed}.ant-upload.ant-upload-select-picture-card{display:table;float:left;width:104px;height:104px;margin-right:8px;margin-bottom:8px;text-align:center;vertical-align:top;background-color:#fafafa;border:1px dashed #d9d9d9;border-radius:4px;cursor:pointer;-webkit-transition:border-color .3s ease;transition:border-color .3s ease}.ant-upload.ant-upload-select-picture-card>.ant-upload{display:table-cell;width:100%;height:100%;padding:8px;text-align:center;vertical-align:middle}.ant-upload.ant-upload-select-picture-card:hover{border-color:#1890ff}.ant-upload.ant-upload-drag{position:relative;width:100%;height:100%;text-align:center;background:#fafafa;border:1px dashed #d9d9d9;border-radius:4px;cursor:pointer;-webkit-transition:border-color .3s;transition:border-color .3s}.ant-upload.ant-upload-drag .ant-upload{padding:16px 0}.ant-upload.ant-upload-drag.ant-upload-drag-hover:not(.ant-upload-disabled){border-color:#096dd9}.ant-upload.ant-upload-drag.ant-upload-disabled{cursor:not-allowed}.ant-upload.ant-upload-drag .ant-upload-btn{display:table;height:100%}.ant-upload.ant-upload-drag .ant-upload-drag-container{display:table-cell;vertical-align:middle}.ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover{border-color:#40a9ff}.ant-upload.ant-upload-drag p.ant-upload-drag-icon{margin-bottom:20px}.ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon{color:#40a9ff;font-size:48px}.ant-upload.ant-upload-drag p.ant-upload-text{margin:0 0 4px;color:rgba(0,0,0,.85);font-size:16px}.ant-upload.ant-upload-drag p.ant-upload-hint{color:rgba(0,0,0,.45);font-size:14px}.ant-upload.ant-upload-drag .anticon-plus{color:rgba(0,0,0,.25);font-size:30px;-webkit-transition:all .3s;transition:all .3s}.ant-upload.ant-upload-drag .anticon-plus:hover,.ant-upload.ant-upload-drag:hover .anticon-plus{color:rgba(0,0,0,.45)}.ant-upload-picture-card-wrapper{zoom:1;display:inline-block;width:100%}.ant-upload-picture-card-wrapper:after,.ant-upload-picture-card-wrapper:before{display:table;content:""}.ant-upload-picture-card-wrapper:after{clear:both}.ant-upload-list{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";zoom:1}.ant-upload-list:after,.ant-upload-list:before{display:table;content:""}.ant-upload-list:after{clear:both}.ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-1{padding-right:14px}.ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-2{padding-right:28px}.ant-upload-list-item{position:relative;height:22px;margin-top:8px;font-size:14px}.ant-upload-list-item-name{display:inline-block;width:100%;padding-left:22px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-upload-list-item-name-icon-count-1{padding-right:14px}.ant-upload-list-item-card-actions{position:absolute;right:0;opacity:0}.ant-upload-list-item-card-actions.picture{top:25px;line-height:1;opacity:1}.ant-upload-list-item-card-actions .anticon{padding-right:6px;color:rgba(0,0,0,.45)}.ant-upload-list-item-info{height:100%;padding:0 12px 0 4px;-webkit-transition:background-color .3s;transition:background-color .3s}.ant-upload-list-item-info>span{display:block;width:100%;height:100%}.ant-upload-list-item-info .anticon-loading,.ant-upload-list-item-info .anticon-paper-clip{position:absolute;top:5px;color:rgba(0,0,0,.45);font-size:14px}.ant-upload-list-item .anticon-close{display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg);position:absolute;top:6px;right:4px;color:rgba(0,0,0,.45);line-height:0;cursor:pointer;opacity:0;-webkit-transition:all .3s;transition:all .3s}:root .ant-upload-list-item .anticon-close{font-size:12px}.ant-upload-list-item .anticon-close:hover{color:rgba(0,0,0,.65)}.ant-upload-list-item:hover .ant-upload-list-item-info{background-color:#e6f7ff}.ant-upload-list-item:hover .ant-upload-list-item-card-actions,.ant-upload-list-item:hover .anticon-close{opacity:1}.ant-upload-list-item-error,.ant-upload-list-item-error .ant-upload-list-item-name,.ant-upload-list-item-error .anticon-paper-clip{color:#f5222d}.ant-upload-list-item-error .ant-upload-list-item-card-actions{opacity:1}.ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon{color:#f5222d}.ant-upload-list-item-progress{position:absolute;bottom:-12px;width:100%;padding-left:26px;font-size:14px;line-height:0}.ant-upload-list-picture-card .ant-upload-list-item,.ant-upload-list-picture .ant-upload-list-item{position:relative;height:66px;padding:8px;border:1px solid #d9d9d9;border-radius:4px}.ant-upload-list-picture-card .ant-upload-list-item:hover,.ant-upload-list-picture .ant-upload-list-item:hover{background:transparent}.ant-upload-list-picture-card .ant-upload-list-item-error,.ant-upload-list-picture .ant-upload-list-item-error{border-color:#f5222d}.ant-upload-list-picture-card .ant-upload-list-item-info,.ant-upload-list-picture .ant-upload-list-item-info{padding:0}.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info,.ant-upload-list-picture .ant-upload-list-item:hover .ant-upload-list-item-info{background:transparent}.ant-upload-list-picture-card .ant-upload-list-item-uploading,.ant-upload-list-picture .ant-upload-list-item-uploading{border-style:dashed}.ant-upload-list-picture-card .ant-upload-list-item-thumbnail,.ant-upload-list-picture .ant-upload-list-item-thumbnail{position:absolute;top:8px;left:8px;width:48px;height:48px;font-size:26px;line-height:54px;text-align:center;opacity:.8}.ant-upload-list-picture-card .ant-upload-list-item-icon,.ant-upload-list-picture .ant-upload-list-item-icon{position:absolute;top:50%;left:50%;font-size:26px;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ant-upload-list-picture-card .ant-upload-list-item-image,.ant-upload-list-picture .ant-upload-list-item-image{max-width:100%}.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img,.ant-upload-list-picture .ant-upload-list-item-thumbnail img{display:block;width:48px;height:48px;overflow:hidden}.ant-upload-list-picture-card .ant-upload-list-item-name,.ant-upload-list-picture .ant-upload-list-item-name{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;margin:0 0 0 8px;padding-right:8px;padding-left:48px;overflow:hidden;line-height:44px;white-space:nowrap;text-overflow:ellipsis;-webkit-transition:all .3s;transition:all .3s}.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-1,.ant-upload-list-picture .ant-upload-list-item-name-icon-count-1{padding-right:18px}.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-2,.ant-upload-list-picture .ant-upload-list-item-name-icon-count-2{padding-right:36px}.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-name,.ant-upload-list-picture .ant-upload-list-item-uploading .ant-upload-list-item-name{line-height:28px}.ant-upload-list-picture-card .ant-upload-list-item-progress,.ant-upload-list-picture .ant-upload-list-item-progress{bottom:14px;width:calc(100% - 24px);margin-top:0;padding-left:56px}.ant-upload-list-picture-card .anticon-close,.ant-upload-list-picture .anticon-close{position:absolute;top:8px;right:8px;line-height:1;opacity:1}.ant-upload-list-picture-card.ant-upload-list:after{display:none}.ant-upload-list-picture-card-container,.ant-upload-list-picture-card .ant-upload-list-item{float:left;width:104px;height:104px;margin:0 8px 8px 0}.ant-upload-list-picture-card .ant-upload-list-item-info{position:relative;height:100%;overflow:hidden}.ant-upload-list-picture-card .ant-upload-list-item-info:before{position:absolute;z-index:1;width:100%;height:100%;background-color:rgba(0,0,0,.5);opacity:0;-webkit-transition:all .3s;transition:all .3s;content:" "}.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info:before{opacity:1}.ant-upload-list-picture-card .ant-upload-list-item-actions{position:absolute;top:50%;left:50%;z-index:10;white-space:nowrap;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);opacity:0;-webkit-transition:all .3s;transition:all .3s}.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye-o{z-index:10;width:16px;margin:0 4px;color:hsla(0,0%,100%,.85);font-size:16px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete:hover,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download:hover,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye-o:hover{color:#fff}.ant-upload-list-picture-card .ant-upload-list-item-actions:hover,.ant-upload-list-picture-card .ant-upload-list-item-info:hover+.ant-upload-list-item-actions{opacity:1}.ant-upload-list-picture-card .ant-upload-list-item-thumbnail,.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img{position:static;display:block;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.ant-upload-list-picture-card .ant-upload-list-item-name{display:none;margin:8px 0 0;padding:0;line-height:1.5;text-align:center}.ant-upload-list-picture-card .anticon-picture+.ant-upload-list-item-name{position:absolute;bottom:10px;display:block}.ant-upload-list-picture-card .ant-upload-list-item-uploading.ant-upload-list-item{background-color:#fafafa}.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info{height:auto}.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-delete,.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-eye-o,.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info:before{display:none}.ant-upload-list-picture-card .ant-upload-list-item-uploading-text{margin-top:18px;color:rgba(0,0,0,.45)}.ant-upload-list-picture-card .ant-upload-list-item-progress{bottom:32px;padding-left:0}.ant-upload-list .ant-upload-success-icon{color:#52c41a;font-weight:700}.ant-upload-list .ant-upload-animate-enter,.ant-upload-list .ant-upload-animate-inline-enter,.ant-upload-list .ant-upload-animate-inline-leave,.ant-upload-list .ant-upload-animate-leave{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:cubic-bezier(.78,.14,.15,.86);animation-fill-mode:cubic-bezier(.78,.14,.15,.86)}.ant-upload-list .ant-upload-animate-enter{-webkit-animation-name:uploadAnimateIn;animation-name:uploadAnimateIn}.ant-upload-list .ant-upload-animate-leave{-webkit-animation-name:uploadAnimateOut;animation-name:uploadAnimateOut}.ant-upload-list .ant-upload-animate-inline-enter{-webkit-animation-name:uploadAnimateInlineIn;animation-name:uploadAnimateInlineIn}.ant-upload-list .ant-upload-animate-inline-leave{-webkit-animation-name:uploadAnimateInlineOut;animation-name:uploadAnimateInlineOut}@-webkit-keyframes uploadAnimateIn{0%{height:0;margin:0;padding:0;opacity:0}}@keyframes uploadAnimateIn{0%{height:0;margin:0;padding:0;opacity:0}}@-webkit-keyframes uploadAnimateOut{to{height:0;margin:0;padding:0;opacity:0}}@keyframes uploadAnimateOut{to{height:0;margin:0;padding:0;opacity:0}}@-webkit-keyframes uploadAnimateInlineIn{0%{width:0;height:0;margin:0;padding:0;opacity:0}}@keyframes uploadAnimateInlineIn{0%{width:0;height:0;margin:0;padding:0;opacity:0}}@-webkit-keyframes uploadAnimateInlineOut{to{width:0;height:0;margin:0;padding:0;opacity:0}}@keyframes uploadAnimateInlineOut{to{width:0;height:0;margin:0;padding:0;opacity:0}}.knife4j{padding:0}.knife4j-menu{height:calc(100vh - 64px);overflow:auto}.knife4j-menu,.knife4j-menu ul{background:#1e282c}.knife4j-menu .ant-menu-dark .ant-menu-inline.ant-menu-sub{background:#2c3b41}.knife4j-menu::-webkit-scrollbar{width:6px;height:.5px}.knife4j-menu::-webkit-scrollbar-thumb{border-radius:10px;-webkit-box-shadow:inset 0 0 5px rgba(0,0,0,.2);background:#469aed}.knife4j-menu::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 5px rgba(0,0,0,.2);border-radius:10px;background:#001529}.knife4j-menu-all{height:100vh;overflow:auto}.knife4j-menu-all,.knife4j-menu-all ul{background:#1e282c}.knife4j-menu-all .ant-menu-dark .ant-menu-inline.ant-menu-sub{background:#2c3b41}.knife4j-menu-all::-webkit-scrollbar{width:6px;height:.5px}.knife4j-menu-all::-webkit-scrollbar-thumb{border-radius:10px;-webkit-box-shadow:inset 0 0 5px rgba(0,0,0,.2);background:#469aed}.knife4j-menu-all::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 5px rgba(0,0,0,.2);border-radius:10px;background:#001529}.ant-menu-dark,.ant-menu-dark .ant-menu-sub{background:#1e282c}.knife4j-menu-api-deprecated{text-decoration:line-through}.knife4j-menu-line{width:65px;display:inline-block}.knife4j-menu-left-style{margin-left:-12px}.knife4j-menu-badge-num{float:right;margin-top:12px;margin-right:10px;z-index:auto;min-width:16px;height:16px;padding:0 4px;color:#fff;font-weight:400;font-size:12px;line-height:16px;white-space:nowrap;text-align:center;background:#4c96e8;border-radius:24px;-webkit-box-shadow:0 0 0 1px #fff;box-shadow:0 0 0 1px #fff;position:absolute;right:25px}.knife4j-menu-badge-num-style{background:#fff;color:#999;-webkit-box-shadow:0 0 0 1px #d9d9d9 inset;box-shadow:inset 0 0 0 1px #d9d9d9}.knife4j-logo{height:64px;position:relative;line-height:64px;padding-left:24px;-webkit-transition:all .3s;transition:all .3s;background:#1e282c;overflow:hidden}.knife4j-logo img{height:32px}.knife4j-logo h1,.knife4j-logo img{display:inline-block;vertical-align:middle}.knife4j-logo h1{color:#fff;font-size:20px;margin:0 0 0 12px;font-family:Myriad Pro,Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:600}.knife4j-logo-data{height:64px;position:relative;line-height:64px;padding-left:16px;-webkit-transition:all .3s;transition:all .3s;background:#1e282c;overflow:hidden}.knife4j-logo-data img{display:inline-block;vertical-align:middle;height:32px}.knife4j-logo-data h1{color:#fff;display:inline-block;vertical-align:middle;font-size:20px;margin:0 0 0 12px;font-family:Myriad Pro,Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:600}.knife4j-header-title{font-size:20px;font-weight:400}.knife4j-header-default{position:fixed;z-index:999}.knife4j-header-width{width:calc(100vw - 310px);max-width:calc(100vw - 310px)}.knife4j-header-width-collapsed{width:calc(100vw - 80px);max-width:calc(100vw - 80px)}.knife4j-tab{padding:5px 5px 0;left:4px;top:5px;background:#fff}.knife4j-tab .ant-tabs-nav-container{font-size:12px}.knife4j-tab .ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab{line-height:35px;border-bottom:1px}.knife4j-tab .ant-tabs-bar{margin:0 0 3px 0}.knife4j-body-content{overflow-y:auto;height:calc(100vh - 152px);min-height:400px}.knife4j-body-content--no-fotter{height:calc(100vh - 109px);padding-bottom:20px}.knife4j-body-content::-webkit-scrollbar{width:8px;height:.5px}.knife4j-body-content::-webkit-scrollbar-thumb{border-radius:10px;-webkit-box-shadow:inset 0 0 5px rgba(0,0,0,.2);background:#469aed}.knife4j-body-content::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 5px rgba(0,0,0,.2);border-radius:10px;background:#fff}.knife4j-router-view{min-height:480px;margin:5px 5px 0}.knife4j-btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.knife4j-btn-info{color:#fff;background-color:#269abc;border-color:#1b6d85}.knife4j-request-query{color:#61affe}.knife4j-request-body{color:#0d5aa7}.knife4j-request-form,.knife4j-request-formData{color:#9012fe}.knife4j-request-validate-jsr{color:#10af88;border-bottom:1px dashed #10af88}.knife4j-request-header{color:#fca130}.knife4j-request-path{color:#49cc90}.knife4j-api-copy-address{font-size:12px;cursor:pointer;text-align:center;font-weight:100;color:#0b0a0a}.knife4j-api-title{margin-top:10px;margin-bottom:5px;font-size:16px;font-weight:600;color:#616368;height:35px;line-height:35px}.knife4j-api-row{height:45px;line-height:45px}.knife4j-api-summary{border-color:#49cc90;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:2px;cursor:pointer}.knife4j-api-summary-method{font-size:14px;font-weight:700;min-width:80px;padding:6px 15px;text-align:center;border-radius:3px;text-shadow:0 1px 0 rgba(0,0,0,.1);font-family:Titillium Web,sans-serif;color:#fff}.knife4j-api-summary-path{font-size:14px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 3 auto;flex:0 3 auto;-webkit-box-align:center;-ms-flex-align:center;align-items:center;word-break:break-all;padding:0 32px}.knife4j-api-post{border-color:#49cc90;background:rgba(73,204,144,.1)}.knife4j-api-post .knife4j-api-summary-method{background:#49cc90}.knife4j-api-get{border-color:#61affe;background:rgba(97,175,254,.1)}.knife4j-api-get .knife4j-api-summary-method{background:#61affe}.knife4j-api-head{border-color:#9012fe;background:rgba(144,18,254,.1)}.knife4j-api-head .knife4j-api-summary-method{background:#9012fe}.knife4j-api-put{border-color:#fca130;background:rgba(252,161,48,.1)}.knife4j-api-put .knife4j-api-summary-method{background:#fca130}.knife4j-api-delete{border-color:#f93e3e;background:rgba(249,62,62,.1)}.knife4j-api-delete .knife4j-api-summary-method{background:#f93e3e}.knife4j-api-options{border-color:#0d5aa7;background:rgba(13,90,167,.1)}.knife4j-api-options .knife4j-api-summary-method{background:#0d5aa7}.knife4j-api-patch{border-color:#50e3c2;background:rgba(80,227,194,.1)}.knife4j-api-patch .knife4j-api-summary-method{background:#50e3c2}.knife4j-debug{margin:20px auto;width:100%}.knife4j-api-send{width:10%}.knife4j-debug-param-count{background-color:red;border-radius:50%;color:#fff}.knife4j-debug-tabs{margin:10px auto}.knife4j-api-readonly{margin:10px auto;width:98%}.knife4j-debug-api-post{border-color:#49cc90}.knife4j-debug-api-post .knife4j-api-summary-method{background:#49cc90;height:32px}.knife4j-debug-api-get{border-color:#61affe}.knife4j-debug-api-get .knife4j-api-summary-method{background:#61affe;height:32px}.knife4j-debug-api-head{border-color:#9012fe}.knife4j-debug-api-head .knife4j-api-summary-method{background:#9012fe;height:32px}.knife4j-debug-api-put{border-color:#fca130}.knife4j-debug-api-put .knife4j-api-summary-method{background:#fca130;height:32px}.knife4j-debug-api-delete{border-color:#f93e3e}.knife4j-debug-api-delete .knife4j-api-summary-method{background:#f93e3e;height:32px}.knife4j-debug-api-options{border-color:#0d5aa7}.knife4j-debug-api-options .knife4j-api-summary-method{background:#0d5aa7;height:32px}.knife4j-debug-api-patch{border-color:#50e3c2}.knife4j-debug-api-patch .knife4j-api-summary-method{background:#50e3c2;height:32px}.knife4j-debug-request-type{margin-top:0}.knife4j-debug-request-content-type{width:360px;height:35px;line-height:35px}.knife4j-debug-request-content-type-float{float:left;width:360px}.knife4j-debug-request-content-type-raw{width:360px;height:35px;line-height:35px}.knife4j-debug-request-content-type-beautify{float:right;margin-right:50px;height:35px;line-height:35px}.knife4j-debug-raw-span{cursor:pointer}.knife4j-debug-response{min-height:calc(100vh - 395px)}.knife4j-debug-response-mt{margin-top:10px}.knife4j-debug-response-curl{margin:10px 0;font:100 12px/18px monaco,andale mono,courier new;padding:10px 12px;border:1px solid #ccc;border-left-width:4px;background-color:#fefefe;-webkit-box-shadow:0 0 4px #eee;box-shadow:0 0 4px #eee;white-space:pre-wrap;word-wrap:break-word;color:#444}.knife4j-debug-status{margin-right:15px}.knife4j-debug-status .key{color:#919191;padding:6px}.knife4j-debug-status .value{color:#4dc095;font-size:12px;font-weight:700}.knife4j-debug-ace-editor,.knife4j-debug-ace-editor .ace_scrollbar-v{overflow-y:hidden}.knife4j-debug-param-requiretrue{border:1px solid #e5b2b1}.knife4j-debug-editor-field-description{position:absolute;color:#8c8c8c}body{overflow:hidden}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50}.sider[data-v-79b0dc56]{min-height:100vh;-webkit-box-shadow:2px 0 6px rgba(0,21,41,.35);box-shadow:2px 0 6px rgba(0,21,41,.35);position:relative;z-index:10}.sider.ligth[data-v-79b0dc56]{background-color:#fff}.sider.ligth .logo[data-v-79b0dc56]{background:#fff}.sider.ligth .logo h1[data-v-79b0dc56]{color:#002140}.icon[data-v-79b0dc56]{width:14px;margin-right:10px}.left-menu{position:fixed;-webkit-transition-property:width 2s;transition-property:width 2s}.drawer .drawer-content{background:#001529}.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .sider-menu-item-img+span,.ant-menu-inline-collapsed>.ant-menu-item .sider-menu-item-img+span,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .sider-menu-item-img+span{max-width:0;display:inline-block;opacity:0}.ant-menu-item .sider-menu-item-img+span,.ant-menu-submenu-title .sider-menu-item-img+span{-webkit-transition:opacity .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1);transition:opacity .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1);opacity:1}.headerSearch .anticon-search[data-v-3ef12298]{cursor:pointer;font-size:16px}.headerSearch .input[data-v-3ef12298]{-webkit-transition:width .3s,margin-left .3s;transition:width .3s,margin-left .3s;width:0;background:transparent;border-radius:0}.headerSearch .input .ant-select-selection[data-v-3ef12298]{background:transparent}.headerSearch .input input[data-v-3ef12298]{border:0;padding-left:0;padding-right:0;-webkit-box-shadow:none!important;box-shadow:none!important}.headerSearch .input[data-v-3ef12298],.headerSearch .input[data-v-3ef12298]:focus,.headerSearch .input[data-v-3ef12298]:hover{border-bottom:1px solid #d9d9d9}.headerSearch .input.show[data-v-3ef12298]{width:210px;margin-left:8px}.header[data-v-7c382f78]{padding:0 12px 0 0;background:#fff;-webkit-box-shadow:0 1px 4px rgba(0,21,41,.08);box-shadow:0 1px 4px rgba(0,21,41,.08);position:relative}.logo[data-v-7c382f78]{height:64px;line-height:58px;vertical-align:top;display:inline-block;padding:0 0 0 24px;cursor:pointer;font-size:20px}.logo img[data-v-7c382f78]{display:inline-block;vertical-align:middle}i.trigger[data-v-7c382f78]{font-size:20px;line-height:64px;cursor:pointer;-webkit-transition:all .3s,padding 0s;transition:all .3s,padding 0s;padding:0 24px;float:left}i.trigger[data-v-7c382f78]:hover{background:#e6f7ff}.right[data-v-7c382f78]{float:right;height:100%}.right .action[data-v-7c382f78]{cursor:pointer;padding:0 12px;display:inline-block;-webkit-transition:all .3s;transition:all .3s;height:100%}.right .action>i[data-v-7c382f78]{font-size:16px;vertical-align:middle;color:rgba(0,0,0,.65)}.right .action.ant-popover-open[data-v-7c382f78],.right .action[data-v-7c382f78]:hover{background:#e6f7ff}.right .search[data-v-7c382f78]{padding:0;margin:0 12px}.right .search[data-v-7c382f78]:hover{background:transparent}.right .account .avatar[data-v-7c382f78]{margin:20px 8px 20px 0;color:#1890ff;background:hsla(0,0%,100%,.85);vertical-align:middle}@media only screen and (max-width:768px){.header .ant-divider-vertical[data-v-7c382f78]{vertical-align:unset}.header .name[data-v-7c382f78]{display:none}.header i.trigger[data-v-7c382f78]{padding:0 12px}.header .logo[data-v-7c382f78]{padding-right:12px;position:relative}.header .right[data-v-7c382f78]{position:absolute;right:12px;top:0;background:#fff}.header .right .account .avatar[data-v-7c382f78]{margin-right:0}}.ant-layout{min-height:100vh;overflow-x:hidden}.menu .anticon{margin-right:8px}.menu .ant-dropdown-menu-item{width:160px}.globalFooter[data-v-3e0fe134]{padding:0 16px;margin:14px 0 10px 0;text-align:center;color:grey}.globalFooter a[data-v-3e0fe134]{color:grey}.globalFooter .links[data-v-3e0fe134]{margin-bottom:8px}.globalFooter .links a[data-v-3e0fe134]{color:rgba(0,0,0,.45);-webkit-transition:all .3s;transition:all .3s}.globalFooter .links a[data-v-3e0fe134]:not(:last-child){margin-right:40px}.globalFooter .links a[data-v-3e0fe134]:hover{color:rgba(0,0,0,.65)}.globalFooter .copyright[data-v-3e0fe134]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;color:rgba(0,0,0,.45);font-size:16px}.contextmenu[data-v-17acf4b2]{position:fixed;z-index:10000;border:1px solid #9e9e9e;border-radius:4px;-webkit-box-shadow:2px 2px 10px #aaa!important;box-shadow:2px 2px 10px #aaa!important}@font-face{font-family:iconfont;src:url(../../knife4jui/fonts/iconfont.e2d2b98e.eot);src:url(../../knife4jui/fonts/iconfont.e2d2b98e.eot#iefix) format("embedded-opentype"),url("data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAq4AAsAAAAAEkgAAAppAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCENgqVXJEcATYCJAMsCxgABCAFhG0HgSkbJQ9RlFFWItmPAndPEYgxUqihtY08MimGiyU//Ifc/Txtq/dnhvozMKIM2Keoi1Eb2YQbbWyxVWwMugluEyrqFvRW667XQdz1Jl43967lTwFINSU6UgVi2y5M4CC5l02KoE6YCgWsVIXsF+7z8Hl7f/s3poEHFhVgd0syTDTRaJJAQ2uuuoWimycWKhrb3fwNdoj7M8wTGQ+ZkKaGahMLGULREIOHkjAJz1464cFqyyBsDxAALFu/rD6/uguFKAJH6LEJ5kBhKRM1JRwRpwkZm8mgYyAgLoeINwHgqH9+9EEsxAAEQQVhcsY658PkRN0akk8MmG+z4cX15QNAQx0ACaAUANWgblbhBxCoF5kD0yk7AShV0sclnCgui6fFe+Ob8Vnx5XF3/LduTeIH44nFEKX8Bw+AghFIYhICIkIIoAYgmNT7YBMGcaT5gAJxmQhkGhAQIIuBgAQ5AwjEIGcBgQTkciAQgHQDgQjkb+ADIejWSO4NgrY2lAAGAvICoBYQ1BRfL0agNCG6igAAByKaMEPMZstzszAjlbAc19xRSCbRlEKYLBPmpFxyPiNlGCSZX9oqpJKyfmJKrC5KOjr/PNunOQzdw2zH05k01kVbs/jz2KKsvvFbgsgcUumf7YF0T/m6DMd5h89Bc4jOoDPtwCvSBp1MgPfPiN6Rli/TzlsuIrNGP3imMoPZpQr5c62BwR+iwy1XlVpscJhDc8ppbl5dyFpUY29uciuVROu7fWQ3n0ekwqa0KB0uVQ3QyHW/3/VOWBKN62PdhshTXfjJIoycUX04zAEm2JWRSCowqCU2x3MP+CYFYORoQeYuU63Doqi2NXGc3aOqq7H7VCpny9Jqgg/QtDWkImnCHi2iSERXIFUt0cRihrPRSdHVHkAbfB2/GM7h026HDdkO5Hqhv9XDTR39Qsww4xVC3xvPQWu4D4MwYnrcjGabYzq6gs6kDViHDcscXoy1tIG2qpw+n8s1wGZzY9ybttrthnEbNDEWt0JrawKq+R7NWt/JELXcXwxnrB3ebPPny87vEQS0rwshqTUAWmyxKXg7R1udyOHQMqVUtDRBHAlzbdjsMCGValH7+/1k19/NFLa9N1ZqVanqVm8DE13Idqw9ABRmC8CgvbB2aqW+kDmIGYufDyxpCVjBmCotdvtPWztzsArbbGv2oCu0mLd7JYvN1MfOK/peRAv9mgrL7E1+r7LcnQ+2e8Zl5O1RanMHW1QVwfQ+Nm+LS9XfYVb1cwQzPq6vq6Tc4Qp5uDKfZvvwmDcAnoIKpy/QrCgNpPV3epqbll4HdWciY1+J5Z2NVjPe8wPvuA1Joe29vjR4ipBSVctYrvtbgRqplwZNOrw5+mIaYQMGusrXL2NAarqisA2vnegAkBJfZHi1CzUZsQuK0mgDp2Vi2zHCMZCAUldN63AvXIkNtF4rWXmMARtg6c1gA0GTVU6Xw6vQ6uw+l1JvuoQYX4DPyUaUepvt9u1XsQBTlujdu0ql1rZH9e0qQxR5uOv5NNLf/u2snI41OB+ZMoUWaGcSahlzzBoZtFT++jnsw68r9u3q7d/v+r4F4FO9cCr3VcKfq/kn/UoG9+nPCu77sm+5JPEt+pNEXt2348bWp0k/oeTLov/P2D+yvfBi5uzKcHtyxjfjtCuGcrtL2jPoG34TxRHcg9IHXFrZwOeWDn6Z3urdxQ44MOqA9tIs7ntOdmTwxt71zh/y55ZqVn1X+ra5JLn3dBi2ZX+vk6NPNvRyan7d4LuzUfVocfWI08WbPt5/jLXs0Dhrtoy4FaLffPBjZyYk9nwoyMkRfCiBhUaW9x27aMKC1aM6WqQpSE2uXjCheVj2kTphn22FC/osKKyrr1t+Wp4h/ydmHGaM/RMvGQYvzTqdv4+zn829Pckk3+G+dSSlUXnLvUNumtR5yUR0y3rLPmHzpKkXU6V5bGKqG341X7VsLPPT0BlD4CcP+o8YxknHLmigTMGze4i5cLSqYFKyIHPGhHFkhu/3gYb2hd3zpDiyXtbRnNw0bsOIMVBNNh2nFpW+YfxUkz1e/5cBhDB45J/TdNkFgwxN9ZpbE0V5xI1iam2/AXRQ+aSqlEnjbvRIH5Oayj/qn/3VlPVpXxiymD4ZKQ3ja4vYixp7A/qQ/F3ZpeaurkNOfJeZlWZMX5rJi3U/D2hkgW30fCQJVxrBedf7LpfmvbuRfc0PhK9KBK3H4oKPJANvi09cFxQ52iR3BR9iN0/Ua2JhK1/xER5wZwr22oxCAgDAvXOcm+AwviZ8VbEcBj57FfUeAiPZxI/zfkywDJsAJ24YLX/muZhMLWN03rvz3vXqkl0/JdhA9PX9R4wjW9jdWQc6tV5eJ69V15yqh9qkiAFzuM5170GNulb+nlyv1hFjn59xQHpA+Lxoq3RrQso6oXQVhuV0WTMzS11Pvrlw/pfWl/PMroXHwyG7H3cRq83VJhVdt5pD4TPTrMfzoo2/dLZ987gxU9Csv33Udu+XtlfmVDftTPg8b71elKRVJ/HdLv58+OyUVrOJ8xc/YnTHp0wUiqZMOH5cK0TCfH/VqfoRbyq+VnYoux5IDhx7paB1w8ID4l6THiqmdTzhtiTZenq/R7xsxEfdfu5Nhdf2V6+//jTukVuebdP20kLO4wk70DVLxlp9fp0N5pPm66GDRAY7OnPUg4wVqHEfUQ1TqrZMTO+Xl7Tg+OZqtBiOGBVVc9U8kMB+ESuQ/UGvrF6s/QBxI0SaCZPPvwfn1lwwyeoqFyfK1Kq1ZTOWztKsJU6UrlzQvmDE0uKiT/RDM0+Wn8xsyINimLJpS8o76n2Nqw7X+e+W3dYPh+EPB8q3yo8aiyY37O1Q1+WFdu1Sv37o5IPsIbOG5IyQx6oOHtzU8FYyu1ke4o/lT6g9Kt+aO6+qzjXGjtxt6g7jmnRF61Bvy+1YY+zk+ySJHJVPuqOjd5SDekG0SwwhfWSmj64n3yHut7tFvkJOBNApxAOQ4EkJKfog6SG3Fe5JKEdfo3blLDY3kgnS/D3rgvSz91sH7OhvhfRP9pqPic+rUpQYMj91839CQk/8Z+yWUORSR18K0Tomp8nhRUvG0k6DpJ4AgOU8gL/g0mT/1p/O/VHlI+KSuMEgiGQxSGL57pR3KUOA1ochJDacgZVYaEtLoeXAPyXFxR7BQJL8MAgyXRjJef9iFLz/GAJK/+VCBAfJwPRR4yKtR6wontHoGPSJe0qEpyRVOaY49NxGZpOOJmnN0D7qQChJoqHIsGUBJep1mAmOWMwYSqhWKTKfmMBkUpG0VnH0TIijOT0cDtOW2ZCnUlBsNA05jOX0Ea5TQcGjSHRho3jk6bchxkpy6Clj9gT3IS0g1k9EhUTmcF8g5Fxj7gs9cISJMZRPET1YU1KIecpHSdmoEGleWxzyGCF8ifq0YWGai85LhLZPpW5vAm6+ccWl0kEgElFIgIRIhMRIgjCiEQPiXfmYFJLlcpXCWscajlcrzDFix8FpYDCVd8btKRZPbS4do/QdyQq8yiZjXeGoMy7OLF5CuY48FdwKagfydvjJE7dk9v7RvGp0LQMAAAA=") format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAA0IAAsAAAAAEkgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8u0klY21hcAAAAYAAAACjAAACNgJfBjJnbHlmAAACJAAACHkAAArcICWLzWhlYWQAAAqgAAAALwAAADYXogBpaGhlYQAACtAAAAAeAAAAJAhbBAxobXR4AAAK8AAAABEAAAAsLIAAAGxvY2EAAAsEAAAAGAAAABgMuA9GbWF4cAAACxwAAAAfAAAAIAEeAKxuYW1lAAALPAAAAUUAAAJtPlT+fXBvc3QAAAyEAAAAggAAAKlw+q6weJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk4WGcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeMT5XZ27438AQw9zAcAQozAiSAwDmewxceJzlksENgkAQRf8Iom4M8WRCBSTEYghVUIQFWAgHT5b1qYAz/tnxJlbgbN4m8w+zP38WwB5AIW6iBOwFg9dTqmW9QMp6ibv6Ky5SKhprNuzYc+DIicvcrivwS98o06zv4y4SdnrjiJPcHVC5D6s2Z/xXnfP9+HTJ0w58c6yDrDeBcgS7wLfMPlC24BAoZXAM/DdwCpQ8uATaAeY2gL0BcmE5fAB4nIVWfYxcVRW/5755n/M+5u37mpn3ZqbvPefN7uzudDuzM9Mt3dmFht1uoRqQr6Zu+eyHlX4Y0QrWupRaIFBXaRrEEiExFAoEiWhJmiKEaJqoaEhMsIqC/iGoiY0R/zBx73rebBX+Mb55c+8595773n2/c87vXCIRsryee5oLCE+yJCENMkm2kjvJfkLAlNO7ypt8FZpe2Gk1PVuIoxrYQpS0xzvdWtp6gug1K2jWgPFOq9sSXccWPZFvun1j0Ua9b9+tdb2m103Xdblm3ypuQE2Mu8l4x6q1PO4U+xS7CZ6Be9hRdhgOwT1L14Yapdmwlgt8R2daZbRiquqqyqw8oGeoCG+x7zpFPxDGdMXgE9jt5It+Vj1NKyMVa11tfVZ6OiNvSF50KvL6llw0qiODRunwQIunJuuwf0AWfgJZ9tuLF9mOixfhyUJhpBhp7C9OpeTkCtLbudgpzVjK2zSzfD+tDFbsqjHgq57TqwxXhIMZgTph6BT0163z0iGjID3gwCcrjm7cZa3Nbb1TH6mwX8Y5ghdFjA9zv6A/JAEiTCzoND0ogw6rwdRBDBvQNkWhFtWSThecVruT1HRwpuD+4oYiHFG4XD6r0qna0uPVYV1WDFniFNjxMoyuHhuBA9CybfaGlHc4SWHHBlsAa+pwV1aEbDYvsQennwtGAUaDdB8Z3MdChnAL6Ok8CckYIXxCah3SdYknECteebPnxGaI+xOdsJ10rDKg/0QnbuM2xzuUXGDvCAKEFy5AKAjsnZmN4oaTJzeIG2mP/X5Xm2M/49q7/Cin9/RctPARwwu4kN4yr53T9XPaPNtJF8W7C/PzhbvZoxD5ZiDt2SMFph+t4PUyd56bIzYZIkSGJBIRrQruqSuD25mCTlIF03Yvg2ana7bMMqxI3Bl2s+wobF7lJSr5KizCMdVHkWcb2BFb/41hwQtgGWlPS1DFbf1O9lWa5SWw2Z8kPktV/0W2xAq6beuQZ+/3+/cQO3EFQHqelMkGchX5ONlGPk32ENIu48bCLt/tQRejGW90aQNibG1PhzRHcKbpViC1KCO6HiKaun1NvCZM7TGF0rRpdWMv7lYbMAwot5rdXkbU6TCgiN+NQ7BlZhVMCjC5amYLwMwE/9zC1q8nA2uCzhxkx9Y9YQjQGNQDpVmvfu7K7Y/xo7UG3TjGTgvsx87YJ+hlj9WCOYi5Ot+ZAIl3rU2ziZ/Py4Y9YPCDVHdLqu1bMr9zNpn5YPYOjQJQ7Y7Z3jb74Hc42HKV5cLsuJ/3brp5UNX8DlWVeKJ7OWQeuWVE1Sdrq29UqHzD6upN9w0Ontm/aSArn7kSOMkolgaUnNTOSPUzZxDClG8WOPwRixTIMJkgs+R6cnufb8JIMNDPDvqzFab+bACPsTcMkMKFFGK2ejAJIXKHGEcCMovXanYwLnEy1dJFH2re/9KcFcvxhJtmM7qvvCYrkBTonmKXQsI003iYnoKyvXTcME+VIzhrmEffFTRQlD/yekaV2dU8KjKc/f/aDI/5Ci8Jmsgt5JTXlLyyNFOK4xK3UEgmHjbMpURxwDToWXz/KdP4lqz0lyvycZRwqSKfUuT+q2XluHJpUnm6P2nLREYsH+Ce4r6IeZKQEbKWXEmuIfMYmTsJqbanwMLoChE7BBS/fwqAT0FEAg4xBM00RJ2umBI5hD0YT2IEx3aRx1cEDwdFNFrJM4TrIzIf227aRwL3eCYDMD229NTYNPZr4FFF5mFgqadblk636tZJHH/rfktn98JO03VN9pjpefAkeLm+ZKajr7yZSm/iNPe6IMvC66IkLRND0iS8vwcZjV7Rf/rYvz7AHl+46leWzqm6BWDpS3+l02Onf7q4J1VfATfyvMi9z0xbAPezlwbYWVh5nC6mrXQpFr/S58OtiNiDZJEcJ4+Sk+QJRE90sTytcDTWN1eHJBUwb6NkEpKaqEMDplJBaAASUoLVrQE9pIK0KvbATQVEtumWwPUw88tgpEKnDEIVcUeH9PkC+uSPdTN0cKjluF67ht6IdOr0nZZYXow+41vtuBs7LQ77auiE3B+GKFc3jKyfq2tWQRGK5Wyh6IMbukGhkC37vFy09KFcoBjGEKVDOV0JVix5Hy0LgRu5frFvqBRSQz+rs7+v2wyweV2/ZSfZs04pcOFVmKifL+ZlYG8wLICBAWuH4ah/9NfPOCW25Z+XLriOPQ/XvapqgabyQVnLaJ4dqZUBXo1UfijnOLmhvjhQUSPbw+lykNFSY9y4ntHzK8Za+KFxqPFWSVsxrhRvoJu6a+conVvb3cTeg5JN/+wG79bXQlWztkkyXGUEVXvJxQGXm36/ZJ9onmiyOjYpby+/lPkyt5G08WRzOZnDDLme3IZsg15YcUQrDeRaehTpwRTtk3QFWjih/zf8/8Pt0LLiWownllYN/017GJy46/QfEKeFiOthWBjguT2MG6p/6fvBjbsg84MHfcNxDH/3MeTRTTZnPrL91kVHiFDnju0+Ydi2ceKBMxnumYXoBfa3sVtHvc94o9dcO0iP756fn67XJ4NiMThS3yxRzZKPfS0bcOqN3Eb60P7qifnDz3N2gNXs6PbNB3zR3vYFCnu3+KhuP0rBKlnc84cPns7uOMi+uUymp2/fP/rt296+wW7YH1smQNhDop3jhDt3ydmyPN2vuw9zy9xd5AqyERFKqRezAM9x0WrQM7EZm1GDrgYRz3X96G9jbI53LoN2DbtmWgYx4G0DzzBI0RCm4c+xvLlYP6J6cfYQpw3Vp8rXrrq8kcjy57UBI0+z91YXzTya7FPzkbqXFveqUV7dh2Ps52zXgWcPwISZ33P1V9PRQ1y2aJt0/dKPBvIFWT6iu5H6jbkd+TB/bq8aFtR9+9RCqO49l8/BvusPHCD/BjQR+zEAAAB4nGNgZGBgAGKtRuOz8fw2Xxm4WRhA4BbTvQgE/d+GpZa5AcjlYGACiQIAEvUJyQB4nGNgZGBgbvjfwBDD0sAABCy1DIwMqIAbAFzYA3EAAHicY2FgYGAhhBsgNAAHzACtAAAAAAAAAACyAPYBSgGUAjgC3gN+BHAFBgVueJxjYGRgYOBmWMDAyQACTEDMBYQMDP/BfAYAGeIBywB4nGWPTU7DMBCFX/oHpBKqqGCH5AViASj9EatuWFRq911036ZOmyqJI8et1ANwHo7ACTgC3IA78EgnmzaWx9+8eWNPANzgBx6O3y33kT1cMjtyDRe4F65TfxBukF+Em2jjVbhF/U3YxzOmwm10YXmD17hi9oR3YQ8dfAjXcI1P4Tr1L+EG+Vu4iTv8CrfQ8erCPuZeV7iNRy/2x1YvnF6p5UHFockikzm/gple75KFrdLqnGtbxCZTg6BfSVOdaVvdU+zXQ+ciFVmTqgmrOkmMyq3Z6tAFG+fyUa8XiR6EJuVYY/62xgKOcQWFJQ6MMUIYZIjK6Og7VWb0r7FDwl57Vj3N53RbFNT/c4UBAvTPXFO6stJ5Ok+BPV8bUnV0K27LnpQ0kV7NSRKyQl7WtlRC6gE2ZVeOEXpc0Yk/KGdI/wAJWm7IAAAAeJxtyzESwiAQQNHdGEwESxsPYeERLO28AsgKOxOgCDsKp7fQGRtf86sPA3xo+M/ggBscUeEWJ5xxhxoN7mFOxdPCOYyxJDpYqZFy5butXPLa1kpJ9SiN9OV2fVL2Nofp22MVx7b0yF1KKs7mxlH4ISfV/fJy5reclScnAeANic8prAAA) format("woff"),url(../../knife4jui/fonts/iconfont.4ca3d0c0.ttf) format("truetype"),url(../../knife4jui/img/iconfont.dd63dc33.svg#iconfont) format("svg")}.iconfont{font-family:iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-modeling:before{content:"\e727"}.icon-home:before{content:"\e619"}.icon-authenticationsystem:before{content:"\e62a"}.icon-zhuye:before{content:"\e601"}.icon-APIwendang:before{content:"\e668"}.icon-wendang:before{content:"\e6f5"}.icon-tubiaozhizuomobanyihuifu-:before{content:"\e6a4"}.icon-zdlxb:before{content:"\e650"}.icon-APIwendang1:before{content:"\e652"}.icon-debug:before{content:"\e60e"}.knife4j-loading-container[data-v-78e38ee1]{position:relative;text-align:center}.knife4j-loading-mask[data-v-78e38ee1]{position:fixed;top:0;bottom:0;left:0;right:0;z-index:10000;background-color:hsla(0,0%,48.6%,.7)}.knife4j-loading-content[data-v-78e38ee1]{position:fixed;left:50%;top:45%;z-index:10000;-webkit-transform:translate(-50%,-45%);transform:translate(-50%,-45%);text-align:center;color:#fff}.knife4j-loading-content .knife4j-loading-animate[data-v-78e38ee1]{display:inline-block;width:40px;height:40px;vertical-align:baseline;margin:25px 0 10px;vertical-align:middle;-webkit-animation:cricleLoading-data-v-78e38ee1 1s steps(12) infinite;animation:cricleLoading-data-v-78e38ee1 1s steps(12) infinite;background:transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=") no-repeat;background-size:100%}.knife4j-loading-content .knife4j-loading-text[data-v-78e38ee1]{font-size:16px}@-webkit-keyframes cricleLoading-data-v-78e38ee1{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes cricleLoading-data-v-78e38ee1{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.content-line[data-v-ab295f52]{height:25px;line-height:25px}.content-line-count[data-v-ab295f52]{height:35px;line-height:35px}.title[data-v-ab295f52]{text-align:center;width:80%;margin:5px auto}.description[data-v-ab295f52]{width:90%;margin:15px auto}.divider[data-v-ab295f52]{margin:4px 0}.divider-count[data-v-ab295f52]{margin:8px 0}.post[data-v-421cf8b4]{color:#6495ed;margin-right:5px;font-size:16px}.authorize[data-v-470e7fd6]{margin:30px auto;width:98%}.swaggermododel[data-v-2d240b96]{width:98%;margin:20px auto}.ant-collapse .panel-info[data-v-2d240b96]{font-size:16px;background:#bce8f1;margin-top:3px}.ant-collapse .panel-default[data-v-2d240b96]{font-size:16px;background:#ddd;margin-top:3px}.ant-collapse .panel-danger[data-v-2d240b96]{font-size:16px;background:#ebccd1;margin-top:3px}.ant-collapse .panel-success[data-v-2d240b96]{font-size:16px;background:#d6e9c6;margin-top:3px}.ant-collapse .panel-warning[data-v-2d240b96]{font-size:16px;background:#faebcc;margin-top:3px}.globalparameters[data-v-6a308412]{width:98%;margin:10px auto}.gptips[data-v-6a308412]{color:#31708f;background-color:#d9edf7;border-color:#bce8f1;padding:10px;margin-bottom:10px;border:1px solid transparent;border-radius:4px}.gptable[data-v-6a308412]{margin-top:10px}.settingConfig[data-v-e9ab23cc]{width:80%;margin:20px auto}.settingConfig .gptips[data-v-e9ab23cc]{color:#31708f;background-color:#d9edf7;border-color:#bce8f1;padding:10px;margin-bottom:10px;border:1px solid transparent;border-radius:4px}.content-line[data-v-e9ab23cc]{height:50px;line-height:50px}.divider[data-v-e9ab23cc]{margin:4px 0}.knife4j-document[data-v-edaf72f4]{margin-top:30px}.api-tab[data-v-edaf72f4]{margin-top:15px}.api-tab .ant-tag[data-v-edaf72f4]{height:32px;line-height:32px}.api-editor-show[data-v-edaf72f4]{margin:15px 0;font:100 12px/18px monaco,andale mono,courier new;padding:10px 12px;border:1px solid #ccc;border-left-width:4px;background-color:#fefefe;-webkit-box-shadow:0 0 4px #eee;box-shadow:0 0 4px #eee;word-break:break-all;word-wrap:break-word;color:#444}.api-basic[data-v-edaf72f4]{padding:11px}.api-basic-title[data-v-edaf72f4]{font-size:14px;font-weight:700}.api-basic-body[data-v-edaf72f4]{font-size:14px;font-family:-webkit-body}.api-description[data-v-edaf72f4]{border-left:4px solid #ddd;line-height:30px}.api-body-desc[data-v-edaf72f4]{padding:10px;min-height:35px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #e8e8e8}.ant-card-body[data-v-edaf72f4]{padding:5px}.api-title[data-v-edaf72f4]{margin-top:10px;margin-bottom:5px;font-size:16px;font-weight:600;height:30px;line-height:30px;border-left:4px solid #00ab6d;text-indent:8px}.content-line[data-v-edaf72f4]{height:25px;line-height:25px}.content-line-count[data-v-edaf72f4]{height:35px;line-height:35px}.divider[data-v-edaf72f4]{margin:4px 0}.knife4j-download-button[data-v-1b61e00a]{margin:40px auto;text-align:center}.knife4j-download-button button[data-v-1b61e00a]{width:150px;margin:20px}.globalparameters[data-v-1b61e00a]{width:73%;margin:40px auto}.gptips[data-v-1b61e00a]{color:#31708f;background-color:#d9edf7;border-color:#bce8f1;padding:10px;margin-bottom:10px;border:1px solid transparent;border-radius:4px}.download-loading[data-v-1b61e00a]{color:#fff}.download-loading i[data-v-1b61e00a]{background-color:#e6f7ff}.spin-content[data-v-1b61e00a]{border:1px solid #91d5ff;background-color:#e6f7ff;padding:30px}.htmledit_views[data-v-1b61e00a]{display:none}.markdown-row[data-v-1b61e00a]{width:95%;margin:10px auto}.content-line[data-v-1b61e00a]{height:25px;line-height:25px}.content-line-count[data-v-1b61e00a]{height:35px;line-height:35px}.title[data-v-1b61e00a]{text-align:center;width:80%;margin:5px auto}.description[data-v-1b61e00a]{width:90%;margin:15px auto}.divider[data-v-1b61e00a]{margin:4px 0}.divider-count[data-v-1b61e00a]{margin:8px 0} + +/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */.editormd{width:90%;height:640px;margin:0 auto;text-align:left;overflow:hidden;position:relative;margin-bottom:15px;border:1px solid #ddd;font-family:Meiryo UI,Microsoft YaHei,Malgun Gothic,Segoe UI,Trebuchet MS,Helvetica,Monaco,monospace,Tahoma,STXihei,华文细黑,STHeiti,Helvetica Neue,Droid Sans,wenquanyi micro hei,FreeSans,Arimo,Arial,SimSun,宋体,Heiti,黑体,sans-serif}.editormd *,.editormd :after,.editormd :before{-webkit-box-sizing:border-box;box-sizing:border-box}.editormd a{text-decoration:none}.editormd img{border:none;vertical-align:middle}.editormd .editormd-html-textarea,.editormd .editormd-markdown-textarea,.editormd>textarea{width:0;height:0;outline:0;resize:none}.editormd .editormd-html-textarea,.editormd .editormd-markdown-textarea{display:none}.editormd button,.editormd input[type=button],.editormd input[type=submit],.editormd input[type=text],.editormd select,.editormd textarea{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none}.editormd ::-webkit-scrollbar{height:10px;width:7px;background:rgba(0,0,0,.1)}.editormd ::-webkit-scrollbar:hover{background:rgba(0,0,0,.2)}.editormd ::-webkit-scrollbar-thumb{background:rgba(0,0,0,.3);border-radius:6px}.editormd ::-webkit-scrollbar-thumb:hover{-webkit-box-shadow:inset 1px 1px 1px rgba(0,0,0,.25);-ms-box-shadow:inset 1px 1px 1px rgba(0,0,0,.25);-o-box-shadow:inset 1px 1px 1px rgba(0,0,0,.25);box-shadow:inset 1px 1px 1px rgba(0,0,0,.25);background-color:rgba(0,0,0,.4)}.editormd-user-unselect{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.editormd-toolbar{width:100%;min-height:37px;background:#fff;display:none;position:absolute;top:0;left:0;z-index:10;border-bottom:1px solid #ddd}.editormd-toolbar-container{padding:0 8px;min-height:35px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.editormd-menu{margin:0;padding:0;list-style:none}.editormd-menu>li{margin:0;padding:5px 1px;display:inline-block;position:relative}.editormd-menu>li.divider{display:inline-block;text-indent:-9999px;margin:0 5px;height:65%;border-right:1px solid #ddd}.editormd-menu>li>a{outline:0;color:#666;display:inline-block;min-width:24px;font-size:16px;text-decoration:none;text-align:center;border-radius:2px;border:1px solid #fff;-webkit-transition:all .3s ease-out;transition:all .3s ease-out}.editormd-menu>li>a.active,.editormd-menu>li>a:hover{border:1px solid #ddd;background:#eee}.editormd-menu>li>a>.fa{text-align:center;display:block;padding:5px}.editormd-menu>li>a>.editormd-bold{padding:5px 2px;display:inline-block;font-weight:700}.editormd-menu>li:hover .editormd-dropdown-menu{display:block}.editormd-menu>li+li>a{margin-left:3px}.editormd-dropdown-menu{display:none;background:#fff;border:1px solid #ddd;width:148px;list-style:none;position:absolute;top:33px;left:0;z-index:100;-webkit-box-shadow:1px 2px 6px rgba(0,0,0,.15);-ms-box-shadow:1px 2px 6px rgba(0,0,0,.15);-o-box-shadow:1px 2px 6px rgba(0,0,0,.15);box-shadow:1px 2px 6px rgba(0,0,0,.15)}.editormd-dropdown-menu:after,.editormd-dropdown-menu:before{width:0;height:0;display:block;content:"";position:absolute;top:-11px;left:8px;border:5px solid transparent}.editormd-dropdown-menu:before{border-bottom-color:#ccc}.editormd-dropdown-menu:after{border-bottom-color:#fff;top:-10px}.editormd-dropdown-menu>li>a{color:#666;display:block;text-decoration:none;padding:8px 10px}.editormd-dropdown-menu>li>a:hover{background:#f6f6f6;-webkit-transition:all .3s ease-out;transition:all .3s ease-out}.editormd-dropdown-menu>li+li{border-top:1px solid #ddd}.editormd-container{margin:0;width:100%;height:100%;overflow:hidden;padding:35px 0 0;position:relative;background:#fff;-webkit-box-sizing:border-box;box-sizing:border-box}.editormd-dialog{color:#666;position:fixed;z-index:99999;display:none;border-radius:3px;-webkit-box-shadow:0 0 10px rgba(0,0,0,.3);-ms-box-shadow:0 0 10px rgba(0,0,0,.3);-o-box-shadow:0 0 10px rgba(0,0,0,.3);box-shadow:0 0 10px rgba(0,0,0,.3);background:#fff;font-size:14px}.editormd-dialog-container{position:relative;padding:20px;line-height:1.4}.editormd-dialog-container h1{font-size:24px;margin-bottom:10px}.editormd-dialog-container h1 .fa{color:#2c7eea;padding-right:5px}.editormd-dialog-container h1 small{padding-left:5px;font-weight:400;font-size:12px;color:#999}.editormd-dialog-container select{color:#999;padding:3px 8px;border:1px solid #ddd}.editormd-dialog-close{position:absolute;top:12px;right:15px;font-size:18px;color:#ccc;-webkit-transition:color .3s ease-out;transition:color .3s ease-out}.editormd-dialog-close:hover{color:#999}.editormd-dialog-header{padding:11px 20px;border-bottom:1px solid #eee;-webkit-transition:background .3s ease-out;transition:background .3s ease-out}.editormd-dialog-header:hover{background:#f6f6f6}.editormd-dialog-title{font-size:14px}.editormd-dialog-footer{padding:10px 0 0 0;text-align:right}.editormd-dialog-info{width:420px}.editormd-dialog-info h1{font-weight:400}.editormd-dialog-info .editormd-dialog-container{padding:20px 25px 25px}.editormd-dialog-info .editormd-dialog-close{top:10px;right:10px}.editormd-dialog-info .hover-link:hover,.editormd-dialog-info p>a{color:#2196f3}.editormd-dialog-info .hover-link{color:#666}.editormd-dialog-info a .fa-external-link{display:none}.editormd-dialog-info a:hover{color:#2196f3}.editormd-dialog-info a:hover .fa-external-link{display:inline-block}.editormd-container-mask,.editormd-dialog-mask,.editormd-mask{display:none;width:100%;height:100%;position:absolute;top:0;left:0}.editormd-dialog-mask-bg,.editormd-mask{background:#fff;opacity:.5;filter:alpha(opacity=50)}.editormd-mask{position:fixed;background:#000;opacity:.2;filter:alpha(opacity=20);z-index:99998}.editormd-container-mask,.editormd-dialog-mask-con{background:url(../../knife4jui/img/loading.c929501e.gif) no-repeat 50%;background-size:32px 32px}.editormd-container-mask{z-index:20;display:block;background-color:#fff}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.editormd-container-mask,.editormd-dialog-mask-con{background-image:url(../../knife4jui/img/loading@2x.695405a9.gif)}}@media only screen and (-webkit-min-device-pixel-ratio:3),only screen and (min-device-pixel-ratio:3){.editormd-container-mask,.editormd-dialog-mask-con{background-image:url(../../knife4jui/img/loading@3x.65eacf61.gif)}}.editormd-code-block-dialog textarea,.editormd-preformatted-text-dialog textarea{width:100%;height:400px;margin-bottom:6px;overflow:auto;border:1px solid #eee;background:#fff;padding:15px;resize:none}.editormd-code-toolbar{color:#999;font-size:14px;margin:-5px 0 10px}.editormd-grid-table{width:99%;display:table;border:1px solid #ddd;border-collapse:collapse}.editormd-grid-table-row{width:100%;display:table-row}.editormd-grid-table-row a{font-size:1.4em;width:5%;height:36px;color:#999;text-align:center;display:table-cell;vertical-align:middle;border:1px solid #ddd;text-decoration:none;-webkit-transition:background-color .3s ease-out,color .1s ease-in;transition:background-color .3s ease-out,color .1s ease-in}.editormd-grid-table-row a.selected{color:#666;background-color:#eee}.editormd-grid-table-row a:hover{color:#777;background-color:#f6f6f6}.editormd-tab-head{list-style:none;border-bottom:1px solid #ddd}.editormd-tab-head li{display:inline-block}.editormd-tab-head li a{color:#999;display:block;padding:6px 12px 5px;text-align:center;text-decoration:none;margin-bottom:-1px;border:1px solid #ddd;-moz-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-top-right-radius:3px;border-top-right-radius:3px;background:#f6f6f6;-webkit-transition:all .3s ease-out;transition:all .3s ease-out}.editormd-tab-head li a:hover{color:#666;background:#eee}.editormd-tab-head li.active a{color:#666;background:#fff;border-bottom-color:#fff}.editormd-tab-head li+li{margin-left:3px}.editormd-tab-box{padding:20px 0}.editormd-form{color:#666}.editormd-form label{float:left;display:block;width:75px;text-align:left;padding:7px 0 15px 5px;margin:0 0 2px;font-weight:400}.editormd-form br{clear:both}.editormd-form iframe{display:none}.editormd-form input:focus{outline:0}.editormd-form input[type=number],.editormd-form input[type=text]{color:#999;padding:8px;border:1px solid #ddd}.editormd-form input[type=number]{width:40px;display:inline-block;padding:6px 8px}.editormd-form input[type=text]{display:inline-block;width:264px}.editormd-form .fa-btns{display:inline-block}.editormd-form .fa-btns a{color:#999;padding:7px 10px 0 0;display:inline-block;text-decoration:none;text-align:center}.editormd-form .fa-btns .fa{font-size:1.3em}.editormd-form .fa-btns label{float:none;display:inline-block;width:auto;text-align:left;padding:0 0 0 5px;cursor:pointer}.editormd-dialog-container .editormd-btn,.editormd-dialog-container button,.editormd-dialog-container input[type=submit],.editormd-dialog-footer .editormd-btn,.editormd-dialog-footer button,.editormd-dialog-footer input[type=submit],.editormd-form .editormd-btn,.editormd-form button,.editormd-form input[type=submit]{color:#666;min-width:75px;cursor:pointer;background:#fff;padding:7px 10px;border:1px solid #ddd;border-radius:3px;-webkit-transition:background .3s ease-out;transition:background .3s ease-out}.editormd-dialog-container .editormd-btn:hover,.editormd-dialog-container button:hover,.editormd-dialog-container input[type=submit]:hover,.editormd-dialog-footer .editormd-btn:hover,.editormd-dialog-footer button:hover,.editormd-dialog-footer input[type=submit]:hover,.editormd-form .editormd-btn:hover,.editormd-form button:hover,.editormd-form input[type=submit]:hover{background:#eee}.editormd-dialog-container .editormd-btn,.editormd-dialog-footer .editormd-btn,.editormd-form .editormd-btn{padding:5px 8px 4px\0}.editormd-dialog-container .editormd-btn+.editormd-btn,.editormd-dialog-footer .editormd-btn+.editormd-btn,.editormd-form .editormd-btn+.editormd-btn{margin-left:8px}.editormd-file-input{width:75px;height:32px;margin-left:8px;position:relative;display:inline-block}.editormd-file-input input[type=file]{width:75px;height:32px;opacity:0;cursor:pointer;background:#000;display:inline-block;position:absolute;top:0;right:0}.editormd-file-input input[type=file]::-webkit-file-upload-button{visibility:hidden}.editormd-file-input:hover input[type=submit]{background:#eee}.editormd-preview,.editormd .CodeMirror{display:inline-block;width:50%;height:100%;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0}.editormd-preview{position:absolute;top:35px;right:0;right:-1px\0;overflow:auto;line-height:1.6;display:none;background:#fff}.editormd .CodeMirror{z-index:10;float:left;border-right:1px solid #ddd;font-size:14px;font-family:YaHei Consolas Hybrid,Consolas,微软雅黑,Meiryo UI,Malgun Gothic,Segoe UI,Trebuchet MS,Helvetica,Monaco,courier,monospace;line-height:1.6;margin-top:35px}.editormd .CodeMirror pre{font-size:14px;padding:0 12px}.editormd .CodeMirror-linenumbers{padding:0 5px}.editormd .CodeMirror-focused .CodeMirror-selected,.editormd .CodeMirror-selected{background:#70b7ff}.editormd .CodeMirror,.editormd .CodeMirror-scroll,.editormd .editormd-preview{-webkit-overflow-scrolling:touch}.editormd .styled-background{background-color:#ff7}.editormd .CodeMirror-focused .cm-matchhighlight{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAFklEQVQI12NgYGBgkKzc8x9CMDAwAAAmhwSbidEoSQAAAABJRU5ErkJggg==);background-position:bottom;background-repeat:repeat-x}.editormd .CodeMirror-empty.CodeMirror-focused{outline:none}.editormd .CodeMirror pre.CodeMirror-placeholder{color:#999}.editormd .cm-trailingspace{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAACCAYAAAB/qH1jAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QUXCToH00Y1UgAAACFJREFUCNdjPMDBUc/AwNDAAAFMTAwMDA0OP34wQgX/AQBYgwYEx4f9lQAAAABJRU5ErkJggg==);background-position:0 100%;background-repeat:repeat-x}.editormd .cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:100%;background-repeat:no-repeat} + +/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */ +/*! + * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(../../knife4jui/fonts/fontawesome-webfont.f7c2b4b7.eot);src:url(../../knife4jui/fonts/fontawesome-webfont.f7c2b4b7.eot?#iefix&v=4.3.0) format("embedded-opentype"),url(../../knife4jui/fonts/fontawesome-webfont.97493d3f.woff2) format("woff2"),url(../../knife4jui/fonts/fontawesome-webfont.d9ee23d5.woff) format("woff"),url(../../knife4jui/fonts/fontawesome-webfont.706450d7.ttf) format("truetype"),url(../../knife4jui/img/fontawesome-webfont.139e74e2.svg#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transform:translate(0);transform:translate(0)}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before,.fa-genderless:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"} + +/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */@font-face{font-family:editormd-logo;src:url(data:application/vnd.ms-fontobject;base64,KAUAAIQEAAABAAIAAAAAAAAAAAAAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAqnLguQAAAAAAAAAAAAAAAAAAAAAAAA4AaQBjAG8AbQBvAG8AbgAAAA4AUgBlAGcAdQBsAGEAcgAAABYAVgBlAHIAcwBpAG8AbgAgADEALgAwAAAADgBpAGMAbwBtAG8AbwBuAAAAAAAAAQAAAAsAgAADADBPUy8yDxINKQAAALwAAABgY21hcABdNM8AAAEcAAAAiGdhc3AAAAAQAAABpAAAAAhnbHlmyLObKAAAAawAAADUaGVhZAUTS7EAAAKAAAAANmhoZWEHrAPGAAACuAAAACRobXR4BfkADwAAAtwAAAAUbG9jYQAoAH4AAALwAAAADG1heHAACwApAAAC/AAAACBuYW1lVxmm7gAAAxwAAAFFcG9zdAADAAAAAARkAAAAIAADBAABkAAFAAACmQLMAAAAjwKZAswAAAHrADMBCQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAEAAAP//A8D/wABAA8AAQAAAAAEAAAAAAAAAAAAAACAAAAAAAAQAAAADAAAAJAAAAAQAAABUAAMAAQAAACQAAwAKAAAAVAAEADAAAAAIAAgAAgAAAAEAIP/9//8AAAAAACD//f//AAH/4wADAAEAAAAAAAAAAAAMAAAAAAA0AAAAAAAAAAMAAAAAAAAAAQAAAAEAAAAgAAAAIAAAAAMADhmHAA4ZhwAAAAQAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAAFAA8ADAPqAvIAAwAOABwAIQAmAAAlBycXEzc+AR8BHgEPAScDEycjCwEjAzMTATMTFxMnGwEjJxcTJwMC11wVcZUNBRYLPQsIBQxynHQHgur1hkdSMAEIK/0PKgZ1IpGMcfdy9kQ4azMCgR0LCAUbBRYLHDL+4wEFRf32Agr9GgIy/c4CMpb+ZDwBB/69fTICKjL91gAAAAEAAAAAAAC54HKqXw889QALBAAAAAAA0QYD4QAAAADRBgPhAAAAAAPqAvIAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA+oAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAAA/kADwAAAAAACgAUAB4AagABAAAABQAnAAUAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA);src:url(data:application/vnd.ms-fontobject;base64,KAUAAIQEAAABAAIAAAAAAAAAAAAAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAqnLguQAAAAAAAAAAAAAAAAAAAAAAAA4AaQBjAG8AbQBvAG8AbgAAAA4AUgBlAGcAdQBsAGEAcgAAABYAVgBlAHIAcwBpAG8AbgAgADEALgAwAAAADgBpAGMAbwBtAG8AbwBuAAAAAAAAAQAAAAsAgAADADBPUy8yDxINKQAAALwAAABgY21hcABdNM8AAAEcAAAAiGdhc3AAAAAQAAABpAAAAAhnbHlmyLObKAAAAawAAADUaGVhZAUTS7EAAAKAAAAANmhoZWEHrAPGAAACuAAAACRobXR4BfkADwAAAtwAAAAUbG9jYQAoAH4AAALwAAAADG1heHAACwApAAAC/AAAACBuYW1lVxmm7gAAAxwAAAFFcG9zdAADAAAAAARkAAAAIAADBAABkAAFAAACmQLMAAAAjwKZAswAAAHrADMBCQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAEAAAP//A8D/wABAA8AAQAAAAAEAAAAAAAAAAAAAACAAAAAAAAQAAAADAAAAJAAAAAQAAABUAAMAAQAAACQAAwAKAAAAVAAEADAAAAAIAAgAAgAAAAEAIP/9//8AAAAAACD//f//AAH/4wADAAEAAAAAAAAAAAAMAAAAAAA0AAAAAAAAAAMAAAAAAAAAAQAAAAEAAAAgAAAAIAAAAAMADhmHAA4ZhwAAAAQAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAAFAA8ADAPqAvIAAwAOABwAIQAmAAAlBycXEzc+AR8BHgEPAScDEycjCwEjAzMTATMTFxMnGwEjJxcTJwMC11wVcZUNBRYLPQsIBQxynHQHgur1hkdSMAEIK/0PKgZ1IpGMcfdy9kQ4azMCgR0LCAUbBRYLHDL+4wEFRf32Agr9GgIy/c4CMpb+ZDwBB/69fTICKjL91gAAAAEAAAAAAAC54HKqXw889QALBAAAAAAA0QYD4QAAAADRBgPhAAAAAAPqAvIAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA+oAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAAA/kADwAAAAAACgAUAB4AagABAAAABQAnAAUAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA?#iefix-5y8q6h) format("embedded-opentype"),url(data:font/woff;base64,d09GRgABAAAAAATQAAsAAAAABIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxINKWNtYXAAAAFoAAAAiAAAAIgAXTTPZ2FzcAAAAfAAAAAIAAAACAAAABBnbHlmAAAB+AAAANQAAADUyLObKGhlYWQAAALMAAAANgAAADYFE0uxaGhlYQAAAwQAAAAkAAAAJAesA8ZobXR4AAADKAAAABQAAAAUBfkAD2xvY2EAAAM8AAAADAAAAAwAKAB+bWF4cAAAA0gAAAAgAAAAIAALACluYW1lAAADaAAAAUUAAAFFVxmm7nBvc3QAAASwAAAAIAAAACAAAwAAAAMEAAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAA//8DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAABAAAAAMAAAAkAAAABAAAAFQAAwABAAAAJAADAAoAAABUAAQAMAAAAAgACAACAAAAAQAg//3//wAAAAAAIP/9//8AAf/jAAMAAQAAAAAAAAAAAAwAAAAAADQAAAAAAAAAAwAAAAAAAAABAAAAAQAAACAAAAAgAAAAAwAOGYcADhmHAAAABAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAUADwAMA+oC8gADAA4AHAAhACYAACUHJxcTNz4BHwEeAQ8BJwMTJyMLASMDMxMBMxMXEycbASMnFxMnAwLXXBVxlQ0FFgs9CwgFDHKcdAeC6vWGR1IwAQgr/Q8qBnUikYxx93L2RDhrMwKBHQsIBRsFFgscMv7jAQVF/fYCCv0aAjL9zgIylv5kPAEH/r19MgIqMv3WAAAAAQAAAAAAALngcqpfDzz1AAsEAAAAAADRBgPhAAAAANEGA+EAAAAAA+oC8gAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAAD6gABAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAIAAAAD+QAPAAAAAAAKABQAHgBqAAEAAAAFACcABQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format("woff"),url(data:font/ttf;base64,AAEAAAALAIAAAwAwT1MvMg8SDSkAAAC8AAAAYGNtYXAAXTTPAAABHAAAAIhnYXNwAAAAEAAAAaQAAAAIZ2x5ZsizmygAAAGsAAAA1GhlYWQFE0uxAAACgAAAADZoaGVhB6wDxgAAArgAAAAkaG10eAX5AA8AAALcAAAAFGxvY2EAKAB+AAAC8AAAAAxtYXhwAAsAKQAAAvwAAAAgbmFtZVcZpu4AAAMcAAABRXBvc3QAAwAAAAAEZAAAACAAAwQAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAABAAAD//wPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAAEAAAAAwAAACQAAAAEAAAAVAADAAEAAAAkAAMACgAAAFQABAAwAAAACAAIAAIAAAABACD//f//AAAAAAAg//3//wAB/+MAAwABAAAAAAAAAAAADAAAAAAANAAAAAAAAAADAAAAAAAAAAEAAAABAAAAIAAAACAAAAADAA4ZhwAOGYcAAAAEAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAABQAPAAwD6gLyAAMADgAcACEAJgAAJQcnFxM3PgEfAR4BDwEnAxMnIwsBIwMzEwEzExcTJxsBIycXEycDAtdcFXGVDQUWCz0LCAUMcpx0B4Lq9YZHUjABCCv9DyoGdSKRjHH3cvZEOGszAoEdCwgFGwUWCxwy/uMBBUX99gIK/RoCMv3OAjKW/mQ8AQf+vX0yAioy/dYAAAABAAAAAAAAueByql8PPPUACwQAAAAAANEGA+EAAAAA0QYD4QAAAAAD6gLyAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAPqAAEAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAgAAAAP5AA8AAAAAAAoAFAAeAGoAAQAAAAUAJwAFAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAA4AAAABAAAAAAACAA4ARwABAAAAAAADAA4AJAABAAAAAAAEAA4AVQABAAAAAAAFABYADgABAAAAAAAGAAcAMgABAAAAAAAKADQAYwADAAEECQABAA4AAAADAAEECQACAA4ARwADAAEECQADAA4AJAADAAEECQAEAA4AVQADAAEECQAFABYADgADAAEECQAGAA4AOQADAAEECQAKADQAYwBpAGMAbwBtAG8AbwBuAFYAZQByAHMAaQBvAG4AIAAxAC4AMABpAGMAbwBtAG8AbwBuaWNvbW9vbgBpAGMAbwBtAG8AbwBuAFIAZQBnAHUAbABhAHIAaQBjAG8AbQBvAG8AbgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype"),url(../../knife4jui/img/editormd-logo.84b6c2a9.svg#icomoon) format("svg");font-weight:400;font-style:normal}.editormd-logo,.editormd-logo-1x,.editormd-logo-2x,.editormd-logo-3x,.editormd-logo-4x,.editormd-logo-5x,.editormd-logo-6x,.editormd-logo-7x,.editormd-logo-8x{font-family:editormd-logo;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;font-size:inherit;line-height:1;display:inline-block;text-rendering:auto;vertical-align:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.editormd-logo-1x:before,.editormd-logo-2x:before,.editormd-logo-3x:before,.editormd-logo-4x:before,.editormd-logo-5x:before,.editormd-logo-6x:before,.editormd-logo-7x:before,.editormd-logo-8x:before,.editormd-logo:before{content:"\e1987"}.editormd-logo-1x{font-size:1em}.editormd-logo-lg{font-size:1.2em}.editormd-logo-2x{font-size:2em}.editormd-logo-3x{font-size:3em}.editormd-logo-4x{font-size:4em}.editormd-logo-5x{font-size:5em}.editormd-logo-6x{font-size:6em}.editormd-logo-7x{font-size:7em}.editormd-logo-8x{font-size:8em}.editormd-logo-color{color:#2196f3} + +/*! github-markdown-css | The MIT License (MIT) | Copyright (c) Sindre Sorhus (sindresorhus.com) | https://github.com/sindresorhus/github-markdown-css */@font-face{font-family:octicons-anchor;src:url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAYcAA0AAAAACjQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABwAAAAca8vGTk9TLzIAAAFMAAAARAAAAFZG1VHVY21hcAAAAZAAAAA+AAABQgAP9AdjdnQgAAAB0AAAAAQAAAAEACICiGdhc3AAAAHUAAAACAAAAAj//wADZ2x5ZgAAAdwAAADRAAABEKyikaNoZWFkAAACsAAAAC0AAAA2AtXoA2hoZWEAAALgAAAAHAAAACQHngNFaG10eAAAAvwAAAAQAAAAEAwAACJsb2NhAAADDAAAAAoAAAAKALIAVG1heHAAAAMYAAAAHwAAACABEAB2bmFtZQAAAzgAAALBAAAFu3I9x/Nwb3N0AAAF/AAAAB0AAAAvaoFvbwAAAAEAAAAAzBdyYwAAAADP2IQvAAAAAM/bz7t4nGNgZGFgnMDAysDB1Ml0hoGBoR9CM75mMGLkYGBgYmBlZsAKAtJcUxgcPsR8iGF2+O/AEMPsznAYKMwIkgMA5REMOXicY2BgYGaAYBkGRgYQsAHyGMF8FgYFIM0ChED+h5j//yEk/3KoSgZGNgYYk4GRCUgwMaACRoZhDwCs7QgGAAAAIgKIAAAAAf//AAJ4nHWMMQrCQBBF/0zWrCCIKUQsTDCL2EXMohYGSSmorScInsRGL2DOYJe0Ntp7BK+gJ1BxF1stZvjz/v8DRghQzEc4kIgKwiAppcA9LtzKLSkdNhKFY3HF4lK69ExKslx7Xa+vPRVS43G98vG1DnkDMIBUgFN0MDXflU8tbaZOUkXUH0+U27RoRpOIyCKjbMCVejwypzJJG4jIwb43rfl6wbwanocrJm9XFYfskuVC5K/TPyczNU7b84CXcbxks1Un6H6tLH9vf2LRnn8Ax7A5WQAAAHicY2BkYGAA4teL1+yI57f5ysDNwgAC529f0kOmWRiYVgEpDgYmEA8AUzEKsQAAAHicY2BkYGB2+O/AEMPCAAJAkpEBFbAAADgKAe0EAAAiAAAAAAQAAAAEAAAAAAAAKgAqACoAiAAAeJxjYGRgYGBhsGFgYgABEMkFhAwM/xn0QAIAD6YBhwB4nI1Ty07cMBS9QwKlQapQW3VXySvEqDCZGbGaHULiIQ1FKgjWMxknMfLEke2A+IJu+wntrt/QbVf9gG75jK577Lg8K1qQPCfnnnt8fX1NRC/pmjrk/zprC+8D7tBy9DHgBXoWfQ44Av8t4Bj4Z8CLtBL9CniJluPXASf0Lm4CXqFX8Q84dOLnMB17N4c7tBo1AS/Qi+hTwBH4rwHHwN8DXqQ30XXAS7QaLwSc0Gn8NuAVWou/gFmnjLrEaEh9GmDdDGgL3B4JsrRPDU2hTOiMSuJUIdKQQayiAth69r6akSSFqIJuA19TrzCIaY8sIoxyrNIrL//pw7A2iMygkX5vDj+G+kuoLdX4GlGK/8Lnlz6/h9MpmoO9rafrz7ILXEHHaAx95s9lsI7AHNMBWEZHULnfAXwG9/ZqdzLI08iuwRloXE8kfhXYAvE23+23DU3t626rbs8/8adv+9DWknsHp3E17oCf+Z48rvEQNZ78paYM38qfk3v/u3l3u3GXN2Dmvmvpf1Srwk3pB/VSsp512bA/GG5i2WJ7wu430yQ5K3nFGiOqgtmSB5pJVSizwaacmUZzZhXLlZTq8qGGFY2YcSkqbth6aW1tRmlaCFs2016m5qn36SbJrqosG4uMV4aP2PHBmB3tjtmgN2izkGQyLWprekbIntJFing32a5rKWCN/SdSoga45EJykyQ7asZvHQ8PTm6cslIpwyeyjbVltNikc2HTR7YKh9LBl9DADC0U/jLcBZDKrMhUBfQBvXRzLtFtjU9eNHKin0x5InTqb8lNpfKv1s1xHzTXRqgKzek/mb7nB8RZTCDhGEX3kK/8Q75AmUM/eLkfA+0Hi908Kx4eNsMgudg5GLdRD7a84npi+YxNr5i5KIbW5izXas7cHXIMAau1OueZhfj+cOcP3P8MNIWLyYOBuxL6DRylJ4cAAAB4nGNgYoAALjDJyIAOWMCiTIxMLDmZedkABtIBygAAAA==) format("woff")}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#333;overflow:hidden;font-family:Microsoft YaHei,Helvetica,Meiryo UI,Malgun Gothic,Segoe UI,Trebuchet MS,Monaco,monospace,Tahoma,STXihei,华文细黑,STHeiti,Helvetica Neue,Droid Sans,wenquanyi micro hei,FreeSans,Arimo,Arial,SimSun,宋体,Heiti,黑体,sans-serif;font-size:16px;line-height:1.6;word-wrap:break-word}.markdown-body a{background:transparent}.markdown-body a:active,.markdown-body a:hover{outline:0}.markdown-body strong{font-weight:700}.markdown-body h1{font-size:2em;margin:.67em 0}.markdown-body img{border:0}.markdown-body hr{-webkit-box-sizing:content-box;box-sizing:content-box}.markdown-body pre{overflow:auto}.markdown-body code,.markdown-body kbd,.markdown-body pre{font-family:Meiryo UI,YaHei Consolas Hybrid,Consolas,Malgun Gothic,Segoe UI,Trebuchet MS,Helvetica,monospace,monospace;font-size:1em}.markdown-body input{color:inherit;font:inherit;margin:0}.markdown-body html input[disabled]{cursor:default}.markdown-body input{line-height:normal}.markdown-body input[type=checkbox]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}.markdown-body table{border-collapse:collapse;border-spacing:0}.markdown-body td,.markdown-body th{padding:0}.markdown-body *{-webkit-box-sizing:border-box;box-sizing:border-box}.markdown-body input{font:13px/1.4 Helvetica,arial,freesans,clean,sans-serif,Segoe UI Emoji,Segoe UI Symbol}.markdown-body a{color:#4183c4;text-decoration:none}.markdown-body a:active,.markdown-body a:hover{text-decoration:underline}.markdown-body hr{height:0;margin:15px 0;overflow:hidden;background:transparent;border:0;border-bottom:1px solid #ddd}.markdown-body hr:after,.markdown-body hr:before{display:table;content:""}.markdown-body hr:after{clear:both}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:15px;margin-bottom:15px;line-height:1.1}.markdown-body h1{font-size:30px}.markdown-body h2{font-size:21px}.markdown-body h3{font-size:16px}.markdown-body h4{font-size:14px}.markdown-body h5{font-size:12px}.markdown-body h6{font-size:11px}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{padding:0;margin-top:0;margin-bottom:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code{font-family:Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px}.markdown-body pre{margin-top:0;margin-bottom:0;font:12px Consolas,Liberation Mono,Menlo,Courier,monospace}.markdown-body .octicon{font:normal normal 16px octicons-anchor;line-height:1;display:inline-block;text-decoration:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-body .octicon-link:before{content:"\f05c"}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body .anchor{position:absolute;top:0;left:0;display:block;padding-right:6px;padding-left:30px;margin-left:-30px}.markdown-body .anchor:focus{outline:none}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{position:relative;margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{display:none;color:#000;vertical-align:middle}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{padding-left:8px;margin-left:-30px;text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{display:inline-block}.markdown-body h1{padding-bottom:.3em;font-size:2.25em;line-height:1.2;border-bottom:1px solid #eee}.markdown-body h1 .anchor{line-height:1}.markdown-body h2{padding-bottom:.3em;font-size:1.75em;line-height:1.225;border-bottom:1px solid #eee}.markdown-body h2 .anchor{line-height:1}.markdown-body h3{font-size:1.5em;line-height:1.43}.markdown-body h3 .anchor{line-height:1.2}.markdown-body h4{font-size:1.25em}.markdown-body h4 .anchor{line-height:1.2}.markdown-body h5{font-size:1em}.markdown-body h5 .anchor{line-height:1.1}.markdown-body h6{font-size:1em;color:#777}.markdown-body h6 .anchor{line-height:1.1}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body blockquote{padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body table{width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.markdown-body code{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before{letter-spacing:-.2em;content:"\00a0"}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre{word-wrap:normal}.markdown-body pre code{display:inline;max-width:none;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code:after,.markdown-body pre code:before{content:normal}.markdown-body kbd{font-size:11px}.markdown-body .pl-c{color:#969896}.markdown-body .pl-c1,.markdown-body .pl-mdh,.markdown-body .pl-mm,.markdown-body .pl-mp,.markdown-body .pl-mr,.markdown-body .pl-s1 .pl-v,.markdown-body .pl-s3,.markdown-body .pl-sc,.markdown-body .pl-sv{color:#0086b3}.markdown-body .pl-e,.markdown-body .pl-en{color:#795da3}.markdown-body .pl-s1 .pl-s2,.markdown-body .pl-smi,.markdown-body .pl-smp,.markdown-body .pl-stj,.markdown-body .pl-vo,.markdown-body .pl-vpf{color:#333}.markdown-body .pl-ent{color:#63a35c}.markdown-body .pl-k,.markdown-body .pl-s,.markdown-body .pl-st{color:#a71d5d}.markdown-body .pl-pds,.markdown-body .pl-s1,.markdown-body .pl-s1 .pl-pse .pl-s2,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre,.markdown-body .pl-src{color:#df5000}.markdown-body .pl-mo,.markdown-body .pl-v{color:#1d3e81}.markdown-body .pl-id{color:#b52a1d}.markdown-body .pl-ii{background-color:#b52a1d;color:#f8f8f8}.markdown-body .pl-sr .pl-cce{color:#63a35c;font-weight:700}.markdown-body .pl-ml{color:#693a17}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{color:#1d3e81;font-weight:700}.markdown-body .pl-mq{color:teal}.markdown-body .pl-mi{color:#333;font-style:italic}.markdown-body .pl-mb{color:#333;font-weight:700}.markdown-body .pl-md,.markdown-body .pl-mdhf{background-color:#ffecec;color:#bd2c00}.markdown-body .pl-mdht,.markdown-body .pl-mi1{background-color:#eaffea;color:#55a532}.markdown-body .pl-mdr{color:#795da3;font-weight:700}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px Consolas,Liberation Mono,Menlo,Courier,monospace;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 #bbb;box-shadow:inset 0 -1px 0 #bbb}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{float:left;margin:.3em 0 .25em -1.6em;vertical-align:middle}.markdown-body :checked+.radio-label{z-index:1;position:relative;border-color:#4183c4}.editormd-html-preview,.editormd-preview-container{text-align:left;font-size:14px;line-height:1.6;padding:20px;overflow:auto;width:100%;background-color:#fff}.editormd-html-preview blockquote,.editormd-preview-container blockquote{color:#666;border-left:4px solid #ddd;padding-left:20px;margin-left:0;font-size:14px;font-style:italic}.editormd-html-preview p code,.editormd-preview-container p code{margin-left:5px;margin-right:4px}.editormd-html-preview abbr,.editormd-preview-container abbr{background:#ffd}.editormd-html-preview hr,.editormd-preview-container hr{height:1px;border:none;border-top:1px solid #ddd;background:none}.editormd-html-preview code,.editormd-preview-container code{border:1px solid #ddd;background:#f6f6f6;padding:3px;border-radius:3px;font-size:14px}.editormd-html-preview pre,.editormd-preview-container pre{border:1px solid #ddd;background:#f6f6f6;padding:10px;border-radius:3px}.editormd-html-preview pre code,.editormd-preview-container pre code{padding:0}.editormd-html-preview code,.editormd-html-preview kbd,.editormd-html-preview pre,.editormd-preview-container code,.editormd-preview-container kbd,.editormd-preview-container pre{font-family:YaHei Consolas Hybrid,Consolas,Meiryo UI,Malgun Gothic,Segoe UI,Trebuchet MS,Helvetica,monospace,monospace}.editormd-html-preview table thead tr,.editormd-preview-container table thead tr{background-color:#f8f8f8}.editormd-html-preview p.editormd-tex,.editormd-preview-container p.editormd-tex{text-align:center}.editormd-html-preview span.editormd-tex,.editormd-preview-container span.editormd-tex{margin:0 5px}.editormd-html-preview .emoji,.editormd-preview-container .emoji{width:24px;height:24px}.editormd-html-preview .katex,.editormd-preview-container .katex{font-size:1.4em}.editormd-html-preview .flowchart,.editormd-html-preview .sequence-diagram,.editormd-preview-container .flowchart,.editormd-preview-container .sequence-diagram{margin:0 auto;text-align:center}.editormd-html-preview .flowchart svg,.editormd-html-preview .sequence-diagram svg,.editormd-preview-container .flowchart svg,.editormd-preview-container .sequence-diagram svg{margin:0 auto}.editormd-html-preview .flowchart text,.editormd-html-preview .sequence-diagram text,.editormd-preview-container .flowchart text,.editormd-preview-container .sequence-diagram text{font-size:15px!important;font-family:YaHei Consolas Hybrid,Consolas,Microsoft YaHei,Malgun Gothic,Segoe UI,Helvetica,Arial!important} + +/*! Pretty printing styles. Used with prettify.js. */.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.clo,.opn,.pun{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:700}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:700}.lit{color:#044}.clo,.opn,.pun{color:#440}.tag{color:#006;font-weight:700}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}.editormd-html-preview pre.prettyprint,.editormd-preview-container pre.prettyprint{padding:10px;border:1px solid #ddd;white-space:pre-wrap;word-wrap:break-word}.editormd-html-preview ol.linenums,.editormd-preview-container ol.linenums{color:#999;padding-left:2.5em}.editormd-html-preview ol.linenums li,.editormd-preview-container ol.linenums li{list-style-type:decimal}.editormd-html-preview ol.linenums li code,.editormd-preview-container ol.linenums li code{border:none;background:none;padding:0}.editormd-html-preview .editormd-toc-menu,.editormd-preview-container .editormd-toc-menu{margin:8px 0 12px 0;display:inline-block}.editormd-html-preview .editormd-toc-menu>.markdown-toc,.editormd-preview-container .editormd-toc-menu>.markdown-toc{position:relative;border-radius:4px;border:1px solid #ddd;display:inline-block;font-size:1em}.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul,.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul{width:160%;min-width:180px;position:absolute;left:-1px;top:-2px;z-index:100;padding:0 10px 10px;display:none;background:#fff;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);-ms-box-shadow:0 3px 5px rgba(0,0,0,.2);-o-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul>li ul,.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul>li ul{width:100%;min-width:180px;border:1px solid #ddd;display:none;background:#fff;border-radius:4px}.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul>li a,.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul>li a{color:#666;padding:6px 10px;display:block;-webkit-transition:background-color .5s ease-out;transition:background-color .5s ease-out}.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul>li a:hover,.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul>li a:hover{background-color:#f6f6f6}.editormd-html-preview .editormd-toc-menu>.markdown-toc li,.editormd-preview-container .editormd-toc-menu>.markdown-toc li{position:relative}.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul{position:absolute;top:32px;left:10%;display:none;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);-ms-box-shadow:0 3px 5px rgba(0,0,0,.2);-o-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:after,.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:before,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:after,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:before{pointer-events:pointer-events;position:absolute;left:15px;top:-6px;display:block;content:"";width:0;height:0;border:6px solid transparent;border-width:0 6px 6px;z-index:10}.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:before,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:before{border-bottom-color:#ccc}.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:after,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:after{border-bottom-color:#fff;top:-5px}.editormd-html-preview .editormd-toc-menu ul,.editormd-preview-container .editormd-toc-menu ul{list-style:none}.editormd-html-preview .editormd-toc-menu a,.editormd-preview-container .editormd-toc-menu a{text-decoration:none}.editormd-html-preview .editormd-toc-menu h1,.editormd-preview-container .editormd-toc-menu h1{font-size:16px;padding:5px 0 10px 10px;line-height:1;border-bottom:1px solid #eee}.editormd-html-preview .editormd-toc-menu h1 .fa,.editormd-preview-container .editormd-toc-menu h1 .fa{padding-left:10px}.editormd-html-preview .editormd-toc-menu .toc-menu-btn,.editormd-preview-container .editormd-toc-menu .toc-menu-btn{color:#666;min-width:180px;padding:5px 10px;border-radius:4px;display:inline-block;-webkit-transition:background-color .5s ease-out;transition:background-color .5s ease-out}.editormd-html-preview .editormd-toc-menu .toc-menu-btn:hover,.editormd-preview-container .editormd-toc-menu .toc-menu-btn:hover{background-color:#f6f6f6}.editormd-html-preview .editormd-toc-menu .toc-menu-btn .fa,.editormd-preview-container .editormd-toc-menu .toc-menu-btn .fa{float:right;padding:3px 0 0 10px;font-size:1.3em}.markdown-body .editormd-toc-menu ul{padding-left:0}.markdown-body .highlight pre,.markdown-body pre{line-height:1.6}hr.editormd-page-break{border:1px dotted #ccc;font-size:0;height:2px}@media only print{hr.editormd-page-break{background:none;border:none;height:0}}.editormd-html-preview textarea{display:none}.editormd-html-preview hr.editormd-page-break{background:none;border:none;height:0}.editormd-preview-close-btn{color:#fff;padding:4px 6px;font-size:18px;border-radius:500px;display:none;background-color:#ccc;position:absolute;top:25px;right:35px;z-index:19;-webkit-transition:background-color .3s ease-out;transition:background-color .3s ease-out}.editormd-preview-close-btn:hover{background-color:#999}.editormd-preview-active{width:100%;padding:40px}.editormd-preview-theme-dark{color:#777;background:#2c2827}.editormd-preview-theme-dark .editormd-preview-container{color:#888;background-color:#2c2827}.editormd-preview-theme-dark .editormd-preview-container pre.prettyprint{border:none}.editormd-preview-theme-dark .editormd-preview-container blockquote{color:#555;padding:.5em;background:#222;border-color:#333}.editormd-preview-theme-dark .editormd-preview-container abbr{color:#fff;padding:1px 3px;border-radius:3px;background:#f90}.editormd-preview-theme-dark .editormd-preview-container code{color:#fff;border:none;padding:1px 3px;border-radius:3px;background:#5a9600}.editormd-preview-theme-dark .editormd-preview-container table{border:none}.editormd-preview-theme-dark .editormd-preview-container .fa-emoji{color:#b4bf42}.editormd-preview-theme-dark .editormd-preview-container .katex{color:#fec93f}.editormd-preview-theme-dark .editormd-toc-menu>.markdown-toc{background:#fff;border:none}.editormd-preview-theme-dark .editormd-toc-menu>.markdown-toc h1{border-color:#ddd}.editormd-preview-theme-dark .markdown-body h1,.editormd-preview-theme-dark .markdown-body h2,.editormd-preview-theme-dark .markdown-body hr{border-color:#222}.editormd-preview-theme-dark pre{color:#999;background-color:#111;background-color:rgba(0,0,0,.4)}.editormd-preview-theme-dark pre .pln{color:#999}.editormd-preview-theme-dark li.L1,.editormd-preview-theme-dark li.L3,.editormd-preview-theme-dark li.L5,.editormd-preview-theme-dark li.L7,.editormd-preview-theme-dark li.L9{background:none}.editormd-preview-theme-dark [class*=editormd-logo]{color:#2196f3}.editormd-preview-theme-dark .sequence-diagram text{fill:#fff}.editormd-preview-theme-dark .sequence-diagram path,.editormd-preview-theme-dark .sequence-diagram rect{color:#fff;fill:#64d1cb;stroke:#64d1cb}.editormd-preview-theme-dark .flowchart path,.editormd-preview-theme-dark .flowchart rect{stroke:#a6c6ff}.editormd-preview-theme-dark .flowchart rect{fill:#a6c6ff}.editormd-preview-theme-dark .flowchart text{fill:#5879b4}@media screen{.editormd-preview-theme-dark .str{color:#080}.editormd-preview-theme-dark .kwd{color:#f90}.editormd-preview-theme-dark .com{color:#444}.editormd-preview-theme-dark .typ{color:#606}.editormd-preview-theme-dark .lit{color:#066}.editormd-preview-theme-dark .clo,.editormd-preview-theme-dark .opn,.editormd-preview-theme-dark .pun{color:#660}.editormd-preview-theme-dark .tag{color:#f90}.editormd-preview-theme-dark .atn{color:#6c95f5}.editormd-preview-theme-dark .atv{color:#080}.editormd-preview-theme-dark .dec,.editormd-preview-theme-dark .var{color:#008ba7}.editormd-preview-theme-dark .fun{color:red}}.editormd-onlyread .editormd-toolbar{display:none}.editormd-onlyread .CodeMirror{margin-top:0}.editormd-onlyread .editormd-preview{top:0}.editormd-fullscreen{position:fixed;top:0;left:0;border:none;margin:0 auto}.editormd-theme-dark{border-color:#1a1a17}.editormd-theme-dark .editormd-toolbar{background:#1a1a17;border-color:#1a1a17}.editormd-theme-dark .editormd-menu>li>a{color:#777;border-color:#1a1a17}.editormd-theme-dark .editormd-menu>li>a.active,.editormd-theme-dark .editormd-menu>li>a:hover{border-color:#333;background:#333}.editormd-theme-dark .editormd-menu>li.divider{border-right:1px solid #111}.editormd-theme-dark .CodeMirror{border-right:1px solid rgba(0,0,0,.1)}.knife4j-body-content[data-v-3e21556b]{margin-top:10px}.knife4j-body-content a[data-v-3e21556b]{margin-right:20px;line-height:2;white-space:nowrap} \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/app.723af817.css.gz b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/app.723af817.css.gz new file mode 100644 index 0000000..b575e32 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/app.723af817.css.gz differ diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/chunk-05a85274.7eb4e04b.css b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/chunk-05a85274.7eb4e04b.css new file mode 100644 index 0000000..7b8d4e1 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/chunk-05a85274.7eb4e04b.css @@ -0,0 +1 @@ +.api-tab[data-v-518643e4]{margin-top:15px}.api-tab .ant-tag[data-v-518643e4]{height:32px;line-height:32px}.api-basic[data-v-518643e4]{padding:11px}.api-basic-title[data-v-518643e4]{font-size:14px;font-weight:700}.api-basic-body[data-v-518643e4]{font-size:14px;font-family:-webkit-body}.api-description[data-v-518643e4]{border-left:4px solid #ddd;line-height:30px}.api-body-desc[data-v-518643e4]{padding:10px;min-height:35px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #e8e8e8}.ant-card-body[data-v-518643e4]{padding:5px}.api-title[data-v-518643e4]{margin-top:10px;margin-bottom:5px;font-size:16px;font-weight:600;height:30px;line-height:30px;border-left:4px solid #00ab6d;text-indent:8px}.content-line[data-v-518643e4]{height:25px;line-height:25px}.content-line-count[data-v-518643e4]{height:35px;line-height:35px}.divider[data-v-518643e4]{margin:4px 0} \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/chunk-vendors.f24a310a.css b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/chunk-vendors.f24a310a.css new file mode 100644 index 0000000..790d4f7 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/chunk-vendors.f24a310a.css @@ -0,0 +1 @@ +body,html{width:100%;height:100%}input::-ms-clear,input::-ms-reveal{display:none}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;color:rgba(0,0,0,.65);font-size:14px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-variant:tabular-nums;line-height:1.5;background-color:#fff;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}[tabindex="-1"]:focus{outline:none!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5em;color:rgba(0,0,0,.85);font-weight:500}p{margin-top:0;margin-bottom:1em}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;border-bottom:0;cursor:help}address{margin-bottom:1em;font-style:normal;line-height:inherit}input[type=number],input[type=password],input[type=text],textarea{-webkit-appearance:none}dl,ol,ul{margin-top:0;margin-bottom:1em}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5em;margin-left:0}blockquote{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#1890ff;text-decoration:none;background-color:transparent;outline:none;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;-webkit-text-decoration-skip:objects}a:hover{color:#40a9ff}a:active{color:#096dd9}a:active,a:hover{text-decoration:none;outline:0}a[disabled]{color:rgba(0,0,0,.25);cursor:not-allowed;pointer-events:none}code,kbd,pre,samp{font-size:1em;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}pre{margin-top:0;margin-bottom:1em;overflow:auto}figure{margin:0 0 1em}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75em;padding-bottom:.3em;color:rgba(0,0,0,.45);text-align:left;caption-side:bottom}th{text-align:inherit}button,input,optgroup,select,textarea{margin:0;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;margin:0;padding:0;border:0}legend{display:block;width:100%;max-width:100%;margin-bottom:.5em;padding:0;color:inherit;font-size:1.5em;line-height:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}mark{padding:.2em;background-color:#feffe6}::-moz-selection{color:#fff;background:#1890ff}::selection{color:#fff;background:#1890ff}.clearfix{zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}.anticon{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.anticon>*{line-height:1}.anticon svg{display:inline-block}.anticon:before{display:none}.anticon .anticon-icon{display:block}.anticon[tabindex]{cursor:pointer}.anticon-spin,.anticon-spin:before{display:inline-block;-webkit-animation:loadingCircle 1s linear infinite;animation:loadingCircle 1s linear infinite}.fade-appear,.fade-enter,.fade-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.fade-appear.fade-appear-active,.fade-enter.fade-enter-active{-webkit-animation-name:antFadeIn;animation-name:antFadeIn;-webkit-animation-play-state:running;animation-play-state:running}.fade-leave.fade-leave-active{-webkit-animation-name:antFadeOut;animation-name:antFadeOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.fade-appear,.fade-enter{opacity:0}.fade-appear,.fade-enter,.fade-leave{-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@-webkit-keyframes antFadeOut{0%{opacity:1}to{opacity:0}}@keyframes antFadeOut{0%{opacity:1}to{opacity:0}}.move-up-appear,.move-up-enter,.move-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-up-appear.move-up-appear-active,.move-up-enter.move-up-enter-active{-webkit-animation-name:antMoveUpIn;animation-name:antMoveUpIn;-webkit-animation-play-state:running;animation-play-state:running}.move-up-leave.move-up-leave-active{-webkit-animation-name:antMoveUpOut;animation-name:antMoveUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-up-appear,.move-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-up-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-down-appear,.move-down-enter,.move-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-down-appear.move-down-appear-active,.move-down-enter.move-down-enter-active{-webkit-animation-name:antMoveDownIn;animation-name:antMoveDownIn;-webkit-animation-play-state:running;animation-play-state:running}.move-down-leave.move-down-leave-active{-webkit-animation-name:antMoveDownOut;animation-name:antMoveDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-down-appear,.move-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-down-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-left-appear,.move-left-enter,.move-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-left-appear.move-left-appear-active,.move-left-enter.move-left-enter-active{-webkit-animation-name:antMoveLeftIn;animation-name:antMoveLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.move-left-leave.move-left-leave-active{-webkit-animation-name:antMoveLeftOut;animation-name:antMoveLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-left-appear,.move-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-left-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-right-appear,.move-right-enter,.move-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-right-appear.move-right-appear-active,.move-right-enter.move-right-enter-active{-webkit-animation-name:antMoveRightIn;animation-name:antMoveRightIn;-webkit-animation-play-state:running;animation-play-state:running}.move-right-leave.move-right-leave-active{-webkit-animation-name:antMoveRightOut;animation-name:antMoveRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-right-appear,.move-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-right-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}@-webkit-keyframes antMoveDownIn{0%{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveDownIn{0%{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveDownOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveDownOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveLeftIn{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveLeftIn{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveLeftOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveLeftOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveRightIn{0%{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveRightIn{0%{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveRightOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveRightOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveUpIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveUpIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveUpOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveUpOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes loadingCircle{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loadingCircle{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}[ant-click-animating-without-extra-node=true],[ant-click-animating=true]{position:relative}html{--antd-wave-shadow-color:#1890ff}.ant-click-animating-node,[ant-click-animating-without-extra-node=true]:after{position:absolute;top:0;right:0;bottom:0;left:0;display:block;border-radius:inherit;-webkit-box-shadow:0 0 0 0 #1890ff;box-shadow:0 0 0 0 #1890ff;-webkit-box-shadow:0 0 0 0 var(--antd-wave-shadow-color);box-shadow:0 0 0 0 var(--antd-wave-shadow-color);opacity:.2;-webkit-animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;content:"";pointer-events:none}@-webkit-keyframes waveEffect{to{-webkit-box-shadow:0 0 0 #1890ff;box-shadow:0 0 0 #1890ff;-webkit-box-shadow:0 0 0 6px var(--antd-wave-shadow-color);box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@keyframes waveEffect{to{-webkit-box-shadow:0 0 0 #1890ff;box-shadow:0 0 0 #1890ff;-webkit-box-shadow:0 0 0 6px var(--antd-wave-shadow-color);box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@-webkit-keyframes fadeEffect{to{opacity:0}}@keyframes fadeEffect{to{opacity:0}}.slide-up-appear,.slide-up-enter,.slide-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-up-appear.slide-up-appear-active,.slide-up-enter.slide-up-enter-active{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-up-leave.slide-up-leave-active{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-up-appear,.slide-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-up-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-down-appear,.slide-down-enter,.slide-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-down-appear.slide-down-appear-active,.slide-down-enter.slide-down-enter-active{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-down-leave.slide-down-leave-active{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-down-appear,.slide-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-down-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-left-appear,.slide-left-enter,.slide-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-left-appear.slide-left-appear-active,.slide-left-enter.slide-left-enter-active{-webkit-animation-name:antSlideLeftIn;animation-name:antSlideLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-left-leave.slide-left-leave-active{-webkit-animation-name:antSlideLeftOut;animation-name:antSlideLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-left-appear,.slide-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-left-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-right-appear,.slide-right-enter,.slide-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-right-appear.slide-right-appear-active,.slide-right-enter.slide-right-enter-active{-webkit-animation-name:antSlideRightIn;animation-name:antSlideRightIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-right-leave.slide-right-leave-active{-webkit-animation-name:antSlideRightOut;animation-name:antSlideRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-right-appear,.slide-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-right-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@-webkit-keyframes antSlideUpIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antSlideUpIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antSlideDownIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}}@keyframes antSlideDownIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}}@-webkit-keyframes antSlideDownOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}}@keyframes antSlideDownOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}}@-webkit-keyframes antSlideLeftIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antSlideLeftIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antSlideLeftOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antSlideLeftOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antSlideRightIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}}@keyframes antSlideRightIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}}@-webkit-keyframes antSlideRightOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}}@keyframes antSlideRightOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}}.swing-appear,.swing-enter{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.swing-appear.swing-appear-active,.swing-enter.swing-enter-active{-webkit-animation-name:antSwingIn;animation-name:antSwingIn;-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes antSwingIn{0%,to{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%{-webkit-transform:translateX(10px);transform:translateX(10px)}60%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}80%{-webkit-transform:translateX(5px);transform:translateX(5px)}}@keyframes antSwingIn{0%,to{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%{-webkit-transform:translateX(10px);transform:translateX(10px)}60%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}80%{-webkit-transform:translateX(5px);transform:translateX(5px)}}.zoom-appear,.zoom-enter,.zoom-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-appear.zoom-appear-active,.zoom-enter.zoom-enter-active{-webkit-animation-name:antZoomIn;animation-name:antZoomIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-leave.zoom-leave-active{-webkit-animation-name:antZoomOut;animation-name:antZoomOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-appear,.zoom-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-appear,.zoom-big-enter,.zoom-big-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-big-appear.zoom-big-appear-active,.zoom-big-enter.zoom-big-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-big-leave.zoom-big-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-big-appear,.zoom-big-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-fast-appear,.zoom-big-fast-enter,.zoom-big-fast-leave{-webkit-animation-duration:.1s;animation-duration:.1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-big-fast-appear.zoom-big-fast-appear-active,.zoom-big-fast-enter.zoom-big-fast-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-big-fast-leave.zoom-big-fast-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-big-fast-appear,.zoom-big-fast-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-fast-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-up-appear,.zoom-up-enter,.zoom-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-up-appear.zoom-up-appear-active,.zoom-up-enter.zoom-up-enter-active{-webkit-animation-name:antZoomUpIn;animation-name:antZoomUpIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-up-leave.zoom-up-leave-active{-webkit-animation-name:antZoomUpOut;animation-name:antZoomUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-up-appear,.zoom-up-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-up-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-down-appear,.zoom-down-enter,.zoom-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-down-appear.zoom-down-appear-active,.zoom-down-enter.zoom-down-enter-active{-webkit-animation-name:antZoomDownIn;animation-name:antZoomDownIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-down-leave.zoom-down-leave-active{-webkit-animation-name:antZoomDownOut;animation-name:antZoomDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-down-appear,.zoom-down-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-down-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-left-appear,.zoom-left-enter,.zoom-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-left-appear.zoom-left-appear-active,.zoom-left-enter.zoom-left-enter-active{-webkit-animation-name:antZoomLeftIn;animation-name:antZoomLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-left-leave.zoom-left-leave-active{-webkit-animation-name:antZoomLeftOut;animation-name:antZoomLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-left-appear,.zoom-left-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-left-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-right-appear,.zoom-right-enter,.zoom-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-right-appear.zoom-right-appear-active,.zoom-right-enter.zoom-right-enter-active{-webkit-animation-name:antZoomRightIn;animation-name:antZoomRightIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-right-leave.zoom-right-leave-active{-webkit-animation-name:antZoomRightOut;animation-name:antZoomRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-right-appear,.zoom-right-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-right-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}@-webkit-keyframes antZoomIn{0%{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes antZoomIn{0%{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes antZoomOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}}@keyframes antZoomOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}}@-webkit-keyframes antZoomBigIn{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes antZoomBigIn{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes antZoomBigOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}}@keyframes antZoomBigOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}}@-webkit-keyframes antZoomUpIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}}@keyframes antZoomUpIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}}@-webkit-keyframes antZoomUpOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}}@keyframes antZoomUpOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}}@-webkit-keyframes antZoomLeftIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}}@keyframes antZoomLeftIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}}@-webkit-keyframes antZoomLeftOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}}@keyframes antZoomLeftOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}}@-webkit-keyframes antZoomRightIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}}@keyframes antZoomRightIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}}@-webkit-keyframes antZoomRightOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}}@keyframes antZoomRightOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}}@-webkit-keyframes antZoomDownIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}}@keyframes antZoomDownIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}}@-webkit-keyframes antZoomDownOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}}@keyframes antZoomDownOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}}.ant-motion-collapse-legacy{overflow:hidden}.ant-motion-collapse,.ant-motion-collapse-legacy-active{-webkit-transition:height .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)!important;transition:height .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)!important}.ant-motion-collapse{overflow:hidden}.ant-dropdown{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block}.ant-dropdown:before{position:absolute;top:-7px;right:0;bottom:-7px;left:-7px;z-index:-9999;opacity:.0001;content:" "}.ant-dropdown-wrap{position:relative}.ant-dropdown-wrap .ant-btn>.anticon-down{display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-dropdown-wrap .ant-btn>.anticon-down{font-size:12px}.ant-dropdown-wrap .anticon-down:before{-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.ant-dropdown-wrap-open .anticon-down:before{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.ant-dropdown-hidden,.ant-dropdown-menu-hidden{display:none}.ant-dropdown-menu{position:relative;margin:0;padding:4px 0;text-align:left;list-style-type:none;background-color:#fff;background-clip:padding-box;border-radius:4px;outline:none;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15);-webkit-transform:translateZ(0)}.ant-dropdown-menu-item-group-title{padding:5px 12px;color:rgba(0,0,0,.45);-webkit-transition:all .3s;transition:all .3s}.ant-dropdown-menu-submenu-popup{position:absolute;z-index:1050}.ant-dropdown-menu-submenu-popup>.ant-dropdown-menu{-webkit-transform-origin:0 0;transform-origin:0 0}.ant-dropdown-menu-submenu-popup li,.ant-dropdown-menu-submenu-popup ul{list-style:none}.ant-dropdown-menu-submenu-popup ul{margin-right:.3em;margin-left:.3em;padding:0}.ant-dropdown-menu-item,.ant-dropdown-menu-submenu-title{clear:both;margin:0;padding:5px 12px;color:rgba(0,0,0,.65);font-weight:400;font-size:14px;line-height:22px;white-space:nowrap;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-dropdown-menu-item>.anticon:first-child,.ant-dropdown-menu-item>span>.anticon:first-child,.ant-dropdown-menu-submenu-title>.anticon:first-child,.ant-dropdown-menu-submenu-title>span>.anticon:first-child{min-width:12px;margin-right:8px;font-size:12px}.ant-dropdown-menu-item>a,.ant-dropdown-menu-submenu-title>a{display:block;margin:-5px -12px;padding:5px 12px;color:rgba(0,0,0,.65);-webkit-transition:all .3s;transition:all .3s}.ant-dropdown-menu-item-selected,.ant-dropdown-menu-item-selected>a,.ant-dropdown-menu-submenu-title-selected,.ant-dropdown-menu-submenu-title-selected>a{color:#1890ff;background-color:#e6f7ff}.ant-dropdown-menu-item:hover,.ant-dropdown-menu-submenu-title:hover{background-color:#e6f7ff}.ant-dropdown-menu-item-disabled,.ant-dropdown-menu-submenu-title-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-dropdown-menu-item-disabled:hover,.ant-dropdown-menu-submenu-title-disabled:hover{color:rgba(0,0,0,.25);background-color:#fff;cursor:not-allowed}.ant-dropdown-menu-item-divider,.ant-dropdown-menu-submenu-title-divider{height:1px;margin:4px 0;overflow:hidden;line-height:0;background-color:#e8e8e8}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow{position:absolute;right:8px}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{color:rgba(0,0,0,.45);font-style:normal;display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow-icon,:root .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{font-size:12px}.ant-dropdown-menu-item-group-list{margin:0 8px;padding:0;list-style:none}.ant-dropdown-menu-submenu-title{padding-right:26px}.ant-dropdown-menu-submenu-vertical{position:relative}.ant-dropdown-menu-submenu-vertical>.ant-dropdown-menu{position:absolute;top:0;left:100%;min-width:100%;margin-left:4px;-webkit-transform-origin:0 0;transform-origin:0 0}.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{color:rgba(0,0,0,.25);background-color:#fff;cursor:not-allowed}.ant-dropdown-menu-submenu-selected .ant-dropdown-menu-submenu-title{color:#1890ff}.ant-dropdown.slide-down-appear.slide-down-appear-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.slide-down-appear.slide-down-appear-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.slide-down-appear.slide-down-appear-active.ant-dropdown-placement-bottomRight,.ant-dropdown.slide-down-enter.slide-down-enter-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.slide-down-enter.slide-down-enter-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.slide-down-enter.slide-down-enter-active.ant-dropdown-placement-bottomRight{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn}.ant-dropdown.slide-up-appear.slide-up-appear-active.ant-dropdown-placement-topCenter,.ant-dropdown.slide-up-appear.slide-up-appear-active.ant-dropdown-placement-topLeft,.ant-dropdown.slide-up-appear.slide-up-appear-active.ant-dropdown-placement-topRight,.ant-dropdown.slide-up-enter.slide-up-enter-active.ant-dropdown-placement-topCenter,.ant-dropdown.slide-up-enter.slide-up-enter-active.ant-dropdown-placement-topLeft,.ant-dropdown.slide-up-enter.slide-up-enter-active.ant-dropdown-placement-topRight{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn}.ant-dropdown.slide-down-leave.slide-down-leave-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.slide-down-leave.slide-down-leave-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.slide-down-leave.slide-down-leave-active.ant-dropdown-placement-bottomRight{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut}.ant-dropdown.slide-up-leave.slide-up-leave-active.ant-dropdown-placement-topCenter,.ant-dropdown.slide-up-leave.slide-up-leave-active.ant-dropdown-placement-topLeft,.ant-dropdown.slide-up-leave.slide-up-leave-active.ant-dropdown-placement-topRight{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut}.ant-dropdown-link>.anticon.anticon-down,.ant-dropdown-trigger>.anticon.anticon-down{display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-dropdown-link>.anticon.anticon-down,:root .ant-dropdown-trigger>.anticon.anticon-down{font-size:12px}.ant-dropdown-button{white-space:nowrap}.ant-dropdown-button.ant-btn-group>.ant-btn:last-child:not(:first-child){padding-right:8px;padding-left:8px}.ant-dropdown-button .anticon.anticon-down{display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-dropdown-button .anticon.anticon-down{font-size:12px}.ant-dropdown-menu-dark,.ant-dropdown-menu-dark .ant-dropdown-menu{background:#001529}.ant-dropdown-menu-dark .ant-dropdown-menu-item,.ant-dropdown-menu-dark .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow:after{color:hsla(0,0%,100%,.65)}.ant-dropdown-menu-dark .ant-dropdown-menu-item:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title:hover{color:#fff;background:transparent}.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected>a{color:#fff;background:#1890ff}.ant-btn{line-height:1.499;position:relative;display:inline-block;font-weight:400;white-space:nowrap;text-align:center;background-image:none;border:1px solid transparent;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.015);box-shadow:0 2px 0 rgba(0,0,0,.015);cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:manipulation;touch-action:manipulation;height:32px;padding:0 15px;font-size:14px;border-radius:4px;color:rgba(0,0,0,.65);background-color:#fff;border-color:#d9d9d9}.ant-btn>.anticon{line-height:1}.ant-btn,.ant-btn:active,.ant-btn:focus{outline:0}.ant-btn:not([disabled]):hover{text-decoration:none}.ant-btn:not([disabled]):active{outline:0;-webkit-box-shadow:none;box-shadow:none}.ant-btn.disabled,.ant-btn[disabled]{cursor:not-allowed}.ant-btn.disabled>*,.ant-btn[disabled]>*{pointer-events:none}.ant-btn-lg{height:40px;padding:0 15px;font-size:16px;border-radius:4px}.ant-btn-sm{height:24px;padding:0 7px;font-size:14px;border-radius:4px}.ant-btn>a:only-child{color:currentColor}.ant-btn>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:focus,.ant-btn:hover{color:#40a9ff;background-color:#fff;border-color:#40a9ff}.ant-btn:focus>a:only-child,.ant-btn:hover>a:only-child{color:currentColor}.ant-btn:focus>a:only-child:after,.ant-btn:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn.active,.ant-btn:active{color:#096dd9;background-color:#fff;border-color:#096dd9}.ant-btn.active>a:only-child,.ant-btn:active>a:only-child{color:currentColor}.ant-btn.active>a:only-child:after,.ant-btn:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-disabled,.ant-btn-disabled.active,.ant-btn-disabled:active,.ant-btn-disabled:focus,.ant-btn-disabled:hover,.ant-btn.disabled,.ant-btn.disabled.active,.ant-btn.disabled:active,.ant-btn.disabled:focus,.ant-btn.disabled:hover,.ant-btn[disabled],.ant-btn[disabled].active,.ant-btn[disabled]:active,.ant-btn[disabled]:focus,.ant-btn[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-disabled.active>a:only-child,.ant-btn-disabled:active>a:only-child,.ant-btn-disabled:focus>a:only-child,.ant-btn-disabled:hover>a:only-child,.ant-btn-disabled>a:only-child,.ant-btn.disabled.active>a:only-child,.ant-btn.disabled:active>a:only-child,.ant-btn.disabled:focus>a:only-child,.ant-btn.disabled:hover>a:only-child,.ant-btn.disabled>a:only-child,.ant-btn[disabled].active>a:only-child,.ant-btn[disabled]:active>a:only-child,.ant-btn[disabled]:focus>a:only-child,.ant-btn[disabled]:hover>a:only-child,.ant-btn[disabled]>a:only-child{color:currentColor}.ant-btn-disabled.active>a:only-child:after,.ant-btn-disabled:active>a:only-child:after,.ant-btn-disabled:focus>a:only-child:after,.ant-btn-disabled:hover>a:only-child:after,.ant-btn-disabled>a:only-child:after,.ant-btn.disabled.active>a:only-child:after,.ant-btn.disabled:active>a:only-child:after,.ant-btn.disabled:focus>a:only-child:after,.ant-btn.disabled:hover>a:only-child:after,.ant-btn.disabled>a:only-child:after,.ant-btn[disabled].active>a:only-child:after,.ant-btn[disabled]:active>a:only-child:after,.ant-btn[disabled]:focus>a:only-child:after,.ant-btn[disabled]:hover>a:only-child:after,.ant-btn[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn.active,.ant-btn:active,.ant-btn:focus,.ant-btn:hover{text-decoration:none;background:#fff}.ant-btn>i,.ant-btn>span{display:inline-block;-webkit-transition:margin-left .3s cubic-bezier(.645,.045,.355,1);transition:margin-left .3s cubic-bezier(.645,.045,.355,1);pointer-events:none}.ant-btn-primary{color:#fff;background-color:#1890ff;border-color:#1890ff;text-shadow:0 -1px 0 rgba(0,0,0,.12);-webkit-box-shadow:0 2px 0 rgba(0,0,0,.045);box-shadow:0 2px 0 rgba(0,0,0,.045)}.ant-btn-primary>a:only-child{color:currentColor}.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary:focus,.ant-btn-primary:hover{color:#fff;background-color:#40a9ff;border-color:#40a9ff}.ant-btn-primary:focus>a:only-child,.ant-btn-primary:hover>a:only-child{color:currentColor}.ant-btn-primary:focus>a:only-child:after,.ant-btn-primary:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary.active,.ant-btn-primary:active{color:#fff;background-color:#096dd9;border-color:#096dd9}.ant-btn-primary.active>a:only-child,.ant-btn-primary:active>a:only-child{color:currentColor}.ant-btn-primary.active>a:only-child:after,.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary-disabled,.ant-btn-primary-disabled.active,.ant-btn-primary-disabled:active,.ant-btn-primary-disabled:focus,.ant-btn-primary-disabled:hover,.ant-btn-primary.disabled,.ant-btn-primary.disabled.active,.ant-btn-primary.disabled:active,.ant-btn-primary.disabled:focus,.ant-btn-primary.disabled:hover,.ant-btn-primary[disabled],.ant-btn-primary[disabled].active,.ant-btn-primary[disabled]:active,.ant-btn-primary[disabled]:focus,.ant-btn-primary[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-primary-disabled.active>a:only-child,.ant-btn-primary-disabled:active>a:only-child,.ant-btn-primary-disabled:focus>a:only-child,.ant-btn-primary-disabled:hover>a:only-child,.ant-btn-primary-disabled>a:only-child,.ant-btn-primary.disabled.active>a:only-child,.ant-btn-primary.disabled:active>a:only-child,.ant-btn-primary.disabled:focus>a:only-child,.ant-btn-primary.disabled:hover>a:only-child,.ant-btn-primary.disabled>a:only-child,.ant-btn-primary[disabled].active>a:only-child,.ant-btn-primary[disabled]:active>a:only-child,.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-primary[disabled]>a:only-child{color:currentColor}.ant-btn-primary-disabled.active>a:only-child:after,.ant-btn-primary-disabled:active>a:only-child:after,.ant-btn-primary-disabled:focus>a:only-child:after,.ant-btn-primary-disabled:hover>a:only-child:after,.ant-btn-primary-disabled>a:only-child:after,.ant-btn-primary.disabled.active>a:only-child:after,.ant-btn-primary.disabled:active>a:only-child:after,.ant-btn-primary.disabled:focus>a:only-child:after,.ant-btn-primary.disabled:hover>a:only-child:after,.ant-btn-primary.disabled>a:only-child:after,.ant-btn-primary[disabled].active>a:only-child:after,.ant-btn-primary[disabled]:active>a:only-child:after,.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-primary[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child){border-right-color:#40a9ff;border-left-color:#40a9ff}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled{border-color:#d9d9d9}.ant-btn-group .ant-btn-primary:first-child:not(:last-child){border-right-color:#40a9ff}.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled]{border-right-color:#d9d9d9}.ant-btn-group .ant-btn-primary+.ant-btn-primary,.ant-btn-group .ant-btn-primary:last-child:not(:first-child){border-left-color:#40a9ff}.ant-btn-group .ant-btn-primary+.ant-btn-primary[disabled],.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled]{border-left-color:#d9d9d9}.ant-btn-ghost{color:rgba(0,0,0,.65);background-color:transparent;border-color:#d9d9d9}.ant-btn-ghost>a:only-child{color:currentColor}.ant-btn-ghost>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost:focus,.ant-btn-ghost:hover{color:#40a9ff;background-color:transparent;border-color:#40a9ff}.ant-btn-ghost:focus>a:only-child,.ant-btn-ghost:hover>a:only-child{color:currentColor}.ant-btn-ghost:focus>a:only-child:after,.ant-btn-ghost:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost.active,.ant-btn-ghost:active{color:#096dd9;background-color:transparent;border-color:#096dd9}.ant-btn-ghost.active>a:only-child,.ant-btn-ghost:active>a:only-child{color:currentColor}.ant-btn-ghost.active>a:only-child:after,.ant-btn-ghost:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost-disabled,.ant-btn-ghost-disabled.active,.ant-btn-ghost-disabled:active,.ant-btn-ghost-disabled:focus,.ant-btn-ghost-disabled:hover,.ant-btn-ghost.disabled,.ant-btn-ghost.disabled.active,.ant-btn-ghost.disabled:active,.ant-btn-ghost.disabled:focus,.ant-btn-ghost.disabled:hover,.ant-btn-ghost[disabled],.ant-btn-ghost[disabled].active,.ant-btn-ghost[disabled]:active,.ant-btn-ghost[disabled]:focus,.ant-btn-ghost[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-ghost-disabled.active>a:only-child,.ant-btn-ghost-disabled:active>a:only-child,.ant-btn-ghost-disabled:focus>a:only-child,.ant-btn-ghost-disabled:hover>a:only-child,.ant-btn-ghost-disabled>a:only-child,.ant-btn-ghost.disabled.active>a:only-child,.ant-btn-ghost.disabled:active>a:only-child,.ant-btn-ghost.disabled:focus>a:only-child,.ant-btn-ghost.disabled:hover>a:only-child,.ant-btn-ghost.disabled>a:only-child,.ant-btn-ghost[disabled].active>a:only-child,.ant-btn-ghost[disabled]:active>a:only-child,.ant-btn-ghost[disabled]:focus>a:only-child,.ant-btn-ghost[disabled]:hover>a:only-child,.ant-btn-ghost[disabled]>a:only-child{color:currentColor}.ant-btn-ghost-disabled.active>a:only-child:after,.ant-btn-ghost-disabled:active>a:only-child:after,.ant-btn-ghost-disabled:focus>a:only-child:after,.ant-btn-ghost-disabled:hover>a:only-child:after,.ant-btn-ghost-disabled>a:only-child:after,.ant-btn-ghost.disabled.active>a:only-child:after,.ant-btn-ghost.disabled:active>a:only-child:after,.ant-btn-ghost.disabled:focus>a:only-child:after,.ant-btn-ghost.disabled:hover>a:only-child:after,.ant-btn-ghost.disabled>a:only-child:after,.ant-btn-ghost[disabled].active>a:only-child:after,.ant-btn-ghost[disabled]:active>a:only-child:after,.ant-btn-ghost[disabled]:focus>a:only-child:after,.ant-btn-ghost[disabled]:hover>a:only-child:after,.ant-btn-ghost[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed{color:rgba(0,0,0,.65);background-color:#fff;border-color:#d9d9d9;border-style:dashed}.ant-btn-dashed>a:only-child{color:currentColor}.ant-btn-dashed>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed:focus,.ant-btn-dashed:hover{color:#40a9ff;background-color:#fff;border-color:#40a9ff}.ant-btn-dashed:focus>a:only-child,.ant-btn-dashed:hover>a:only-child{color:currentColor}.ant-btn-dashed:focus>a:only-child:after,.ant-btn-dashed:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed.active,.ant-btn-dashed:active{color:#096dd9;background-color:#fff;border-color:#096dd9}.ant-btn-dashed.active>a:only-child,.ant-btn-dashed:active>a:only-child{color:currentColor}.ant-btn-dashed.active>a:only-child:after,.ant-btn-dashed:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed-disabled,.ant-btn-dashed-disabled.active,.ant-btn-dashed-disabled:active,.ant-btn-dashed-disabled:focus,.ant-btn-dashed-disabled:hover,.ant-btn-dashed.disabled,.ant-btn-dashed.disabled.active,.ant-btn-dashed.disabled:active,.ant-btn-dashed.disabled:focus,.ant-btn-dashed.disabled:hover,.ant-btn-dashed[disabled],.ant-btn-dashed[disabled].active,.ant-btn-dashed[disabled]:active,.ant-btn-dashed[disabled]:focus,.ant-btn-dashed[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-dashed-disabled.active>a:only-child,.ant-btn-dashed-disabled:active>a:only-child,.ant-btn-dashed-disabled:focus>a:only-child,.ant-btn-dashed-disabled:hover>a:only-child,.ant-btn-dashed-disabled>a:only-child,.ant-btn-dashed.disabled.active>a:only-child,.ant-btn-dashed.disabled:active>a:only-child,.ant-btn-dashed.disabled:focus>a:only-child,.ant-btn-dashed.disabled:hover>a:only-child,.ant-btn-dashed.disabled>a:only-child,.ant-btn-dashed[disabled].active>a:only-child,.ant-btn-dashed[disabled]:active>a:only-child,.ant-btn-dashed[disabled]:focus>a:only-child,.ant-btn-dashed[disabled]:hover>a:only-child,.ant-btn-dashed[disabled]>a:only-child{color:currentColor}.ant-btn-dashed-disabled.active>a:only-child:after,.ant-btn-dashed-disabled:active>a:only-child:after,.ant-btn-dashed-disabled:focus>a:only-child:after,.ant-btn-dashed-disabled:hover>a:only-child:after,.ant-btn-dashed-disabled>a:only-child:after,.ant-btn-dashed.disabled.active>a:only-child:after,.ant-btn-dashed.disabled:active>a:only-child:after,.ant-btn-dashed.disabled:focus>a:only-child:after,.ant-btn-dashed.disabled:hover>a:only-child:after,.ant-btn-dashed.disabled>a:only-child:after,.ant-btn-dashed[disabled].active>a:only-child:after,.ant-btn-dashed[disabled]:active>a:only-child:after,.ant-btn-dashed[disabled]:focus>a:only-child:after,.ant-btn-dashed[disabled]:hover>a:only-child:after,.ant-btn-dashed[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger{color:#fff;background-color:#ff4d4f;border-color:#ff4d4f;text-shadow:0 -1px 0 rgba(0,0,0,.12);-webkit-box-shadow:0 2px 0 rgba(0,0,0,.045);box-shadow:0 2px 0 rgba(0,0,0,.045)}.ant-btn-danger>a:only-child{color:currentColor}.ant-btn-danger>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger:focus,.ant-btn-danger:hover{color:#fff;background-color:#ff7875;border-color:#ff7875}.ant-btn-danger:focus>a:only-child,.ant-btn-danger:hover>a:only-child{color:currentColor}.ant-btn-danger:focus>a:only-child:after,.ant-btn-danger:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger.active,.ant-btn-danger:active{color:#fff;background-color:#d9363e;border-color:#d9363e}.ant-btn-danger.active>a:only-child,.ant-btn-danger:active>a:only-child{color:currentColor}.ant-btn-danger.active>a:only-child:after,.ant-btn-danger:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger-disabled,.ant-btn-danger-disabled.active,.ant-btn-danger-disabled:active,.ant-btn-danger-disabled:focus,.ant-btn-danger-disabled:hover,.ant-btn-danger.disabled,.ant-btn-danger.disabled.active,.ant-btn-danger.disabled:active,.ant-btn-danger.disabled:focus,.ant-btn-danger.disabled:hover,.ant-btn-danger[disabled],.ant-btn-danger[disabled].active,.ant-btn-danger[disabled]:active,.ant-btn-danger[disabled]:focus,.ant-btn-danger[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-danger-disabled.active>a:only-child,.ant-btn-danger-disabled:active>a:only-child,.ant-btn-danger-disabled:focus>a:only-child,.ant-btn-danger-disabled:hover>a:only-child,.ant-btn-danger-disabled>a:only-child,.ant-btn-danger.disabled.active>a:only-child,.ant-btn-danger.disabled:active>a:only-child,.ant-btn-danger.disabled:focus>a:only-child,.ant-btn-danger.disabled:hover>a:only-child,.ant-btn-danger.disabled>a:only-child,.ant-btn-danger[disabled].active>a:only-child,.ant-btn-danger[disabled]:active>a:only-child,.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-danger[disabled]>a:only-child{color:currentColor}.ant-btn-danger-disabled.active>a:only-child:after,.ant-btn-danger-disabled:active>a:only-child:after,.ant-btn-danger-disabled:focus>a:only-child:after,.ant-btn-danger-disabled:hover>a:only-child:after,.ant-btn-danger-disabled>a:only-child:after,.ant-btn-danger.disabled.active>a:only-child:after,.ant-btn-danger.disabled:active>a:only-child:after,.ant-btn-danger.disabled:focus>a:only-child:after,.ant-btn-danger.disabled:hover>a:only-child:after,.ant-btn-danger.disabled>a:only-child:after,.ant-btn-danger[disabled].active>a:only-child:after,.ant-btn-danger[disabled]:active>a:only-child:after,.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-danger[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link{color:#1890ff;background-color:transparent;border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.ant-btn-link>a:only-child{color:currentColor}.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link:focus,.ant-btn-link:hover{color:#40a9ff;background-color:transparent;border-color:#40a9ff}.ant-btn-link:focus>a:only-child,.ant-btn-link:hover>a:only-child{color:currentColor}.ant-btn-link:focus>a:only-child:after,.ant-btn-link:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link.active,.ant-btn-link:active{color:#096dd9;background-color:transparent;border-color:#096dd9}.ant-btn-link.active>a:only-child,.ant-btn-link:active>a:only-child{color:currentColor}.ant-btn-link.active>a:only-child:after,.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link-disabled,.ant-btn-link-disabled.active,.ant-btn-link-disabled:active,.ant-btn-link-disabled:focus,.ant-btn-link-disabled:hover,.ant-btn-link.disabled,.ant-btn-link.disabled.active,.ant-btn-link.disabled:active,.ant-btn-link.disabled:focus,.ant-btn-link.disabled:hover,.ant-btn-link[disabled],.ant-btn-link[disabled].active,.ant-btn-link[disabled]:active,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:hover{background-color:#f5f5f5;border-color:#d9d9d9}.ant-btn-link:active,.ant-btn-link:focus,.ant-btn-link:hover{border-color:transparent}.ant-btn-link-disabled,.ant-btn-link-disabled.active,.ant-btn-link-disabled:active,.ant-btn-link-disabled:focus,.ant-btn-link-disabled:hover,.ant-btn-link.disabled,.ant-btn-link.disabled.active,.ant-btn-link.disabled:active,.ant-btn-link.disabled:focus,.ant-btn-link.disabled:hover,.ant-btn-link[disabled],.ant-btn-link[disabled].active,.ant-btn-link[disabled]:active,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:hover{color:rgba(0,0,0,.25);background-color:transparent;border-color:transparent;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-link-disabled.active>a:only-child,.ant-btn-link-disabled:active>a:only-child,.ant-btn-link-disabled:focus>a:only-child,.ant-btn-link-disabled:hover>a:only-child,.ant-btn-link-disabled>a:only-child,.ant-btn-link.disabled.active>a:only-child,.ant-btn-link.disabled:active>a:only-child,.ant-btn-link.disabled:focus>a:only-child,.ant-btn-link.disabled:hover>a:only-child,.ant-btn-link.disabled>a:only-child,.ant-btn-link[disabled].active>a:only-child,.ant-btn-link[disabled]:active>a:only-child,.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-link[disabled]>a:only-child{color:currentColor}.ant-btn-link-disabled.active>a:only-child:after,.ant-btn-link-disabled:active>a:only-child:after,.ant-btn-link-disabled:focus>a:only-child:after,.ant-btn-link-disabled:hover>a:only-child:after,.ant-btn-link-disabled>a:only-child:after,.ant-btn-link.disabled.active>a:only-child:after,.ant-btn-link.disabled:active>a:only-child:after,.ant-btn-link.disabled:focus>a:only-child:after,.ant-btn-link.disabled:hover>a:only-child:after,.ant-btn-link.disabled>a:only-child:after,.ant-btn-link[disabled].active>a:only-child:after,.ant-btn-link[disabled]:active>a:only-child:after,.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-link[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-icon-only{width:32px;height:32px;padding:0;font-size:16px;border-radius:4px}.ant-btn-icon-only.ant-btn-lg{width:40px;height:40px;padding:0;font-size:18px;border-radius:4px}.ant-btn-icon-only.ant-btn-sm{width:24px;height:24px;padding:0;font-size:14px;border-radius:4px}.ant-btn-icon-only>i{vertical-align:middle}.ant-btn-round{height:32px;padding:0 16px;font-size:14px;border-radius:32px}.ant-btn-round.ant-btn-lg{height:40px;padding:0 20px;font-size:16px;border-radius:40px}.ant-btn-round.ant-btn-sm{height:24px;padding:0 12px;font-size:14px;border-radius:24px}.ant-btn-round.ant-btn-icon-only{width:auto}.ant-btn-circle,.ant-btn-circle-outline{min-width:32px;padding-right:0;padding-left:0;text-align:center;border-radius:50%}.ant-btn-circle-outline.ant-btn-lg,.ant-btn-circle.ant-btn-lg{min-width:40px;border-radius:50%}.ant-btn-circle-outline.ant-btn-sm,.ant-btn-circle.ant-btn-sm{min-width:24px;border-radius:50%}.ant-btn:before{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;z-index:1;display:none;background:#fff;border-radius:inherit;opacity:.35;-webkit-transition:opacity .2s;transition:opacity .2s;content:"";pointer-events:none}.ant-btn .anticon{-webkit-transition:margin-left .3s cubic-bezier(.645,.045,.355,1);transition:margin-left .3s cubic-bezier(.645,.045,.355,1)}.ant-btn .anticon.anticon-minus>svg,.ant-btn .anticon.anticon-plus>svg{shape-rendering:optimizeSpeed}.ant-btn.ant-btn-loading{position:relative}.ant-btn.ant-btn-loading:not([disabled]){pointer-events:none}.ant-btn.ant-btn-loading:before{display:block}.ant-btn.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only){padding-left:29px}.ant-btn.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only) .anticon:not(:last-child){margin-left:-14px}.ant-btn-sm.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only){padding-left:24px}.ant-btn-sm.ant-btn-loading:not(.ant-btn-circle):not(.ant-btn-circle-outline):not(.ant-btn-icon-only) .anticon{margin-left:-17px}.ant-btn-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.ant-btn-group,.ant-btn-group>.ant-btn,.ant-btn-group>span>.ant-btn{position:relative}.ant-btn-group>.ant-btn.active,.ant-btn-group>.ant-btn:active,.ant-btn-group>.ant-btn:focus,.ant-btn-group>.ant-btn:hover,.ant-btn-group>span>.ant-btn.active,.ant-btn-group>span>.ant-btn:active,.ant-btn-group>span>.ant-btn:focus,.ant-btn-group>span>.ant-btn:hover{z-index:2}.ant-btn-group>.ant-btn:disabled,.ant-btn-group>span>.ant-btn:disabled{z-index:0}.ant-btn-group>.ant-btn-icon-only{font-size:14px}.ant-btn-group-lg>.ant-btn,.ant-btn-group-lg>span>.ant-btn{height:40px;padding:0 15px;font-size:16px;border-radius:0;line-height:38px}.ant-btn-group-lg>.ant-btn.ant-btn-icon-only{width:40px;height:40px;padding-right:0;padding-left:0}.ant-btn-group-sm>.ant-btn,.ant-btn-group-sm>span>.ant-btn{height:24px;padding:0 7px;font-size:14px;border-radius:0;line-height:22px}.ant-btn-group-sm>.ant-btn>.anticon,.ant-btn-group-sm>span>.ant-btn>.anticon{font-size:14px}.ant-btn-group-sm>.ant-btn.ant-btn-icon-only{width:24px;height:24px;padding-right:0;padding-left:0}.ant-btn+.ant-btn-group,.ant-btn-group+.ant-btn,.ant-btn-group+.ant-btn-group,.ant-btn-group .ant-btn+.ant-btn,.ant-btn-group .ant-btn+span,.ant-btn-group>span+span,.ant-btn-group span+.ant-btn{margin-left:-1px}.ant-btn-group .ant-btn-primary+.ant-btn:not(.ant-btn-primary):not([disabled]){border-left-color:transparent}.ant-btn-group .ant-btn{border-radius:0}.ant-btn-group>.ant-btn:first-child,.ant-btn-group>span:first-child>.ant-btn{margin-left:0}.ant-btn-group>.ant-btn:only-child,.ant-btn-group>span:only-child>.ant-btn{border-radius:4px}.ant-btn-group>.ant-btn:first-child:not(:last-child),.ant-btn-group>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-btn-group>.ant-btn:last-child:not(:first-child),.ant-btn-group>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-btn-group-sm>.ant-btn:only-child,.ant-btn-group-sm>span:only-child>.ant-btn{border-radius:4px}.ant-btn-group-sm>.ant-btn:first-child:not(:last-child),.ant-btn-group-sm>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-btn-group-sm>.ant-btn:last-child:not(:first-child),.ant-btn-group-sm>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-btn-group>.ant-btn-group{float:left}.ant-btn-group>.ant-btn-group:not(:first-child):not(:last-child)>.ant-btn{border-radius:0}.ant-btn-group>.ant-btn-group:first-child:not(:last-child)>.ant-btn:last-child{padding-right:8px;border-top-right-radius:0;border-bottom-right-radius:0}.ant-btn-group>.ant-btn-group:last-child:not(:first-child)>.ant-btn:first-child{padding-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.ant-btn:active>span,.ant-btn:focus>span{position:relative}.ant-btn>.anticon+span,.ant-btn>span+.anticon{margin-left:8px}.ant-btn-background-ghost{color:#fff;background:transparent!important;border-color:#fff}.ant-btn-background-ghost.ant-btn-primary{color:#1890ff;background-color:transparent;border-color:#1890ff;text-shadow:none}.ant-btn-background-ghost.ant-btn-primary>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary:focus,.ant-btn-background-ghost.ant-btn-primary:hover{color:#40a9ff;background-color:transparent;border-color:#40a9ff}.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary.active,.ant-btn-background-ghost.ant-btn-primary:active{color:#096dd9;background-color:transparent;border-color:#096dd9}.ant-btn-background-ghost.ant-btn-primary.active>a:only-child,.ant-btn-background-ghost.ant-btn-primary:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary-disabled,.ant-btn-background-ghost.ant-btn-primary-disabled.active,.ant-btn-background-ghost.ant-btn-primary-disabled:active,.ant-btn-background-ghost.ant-btn-primary-disabled:focus,.ant-btn-background-ghost.ant-btn-primary-disabled:hover,.ant-btn-background-ghost.ant-btn-primary.disabled,.ant-btn-background-ghost.ant-btn-primary.disabled.active,.ant-btn-background-ghost.ant-btn-primary.disabled:active,.ant-btn-background-ghost.ant-btn-primary.disabled:focus,.ant-btn-background-ghost.ant-btn-primary.disabled:hover,.ant-btn-background-ghost.ant-btn-primary[disabled],.ant-btn-background-ghost.ant-btn-primary[disabled].active,.ant-btn-background-ghost.ant-btn-primary[disabled]:active,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-primary-disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-primary-disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-primary-disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary-disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary-disabled>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary.disabled>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled].active>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary-disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary-disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary-disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary-disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary-disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary.disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled].active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger{color:#ff4d4f;background-color:transparent;border-color:#ff4d4f;text-shadow:none}.ant-btn-background-ghost.ant-btn-danger>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger:focus,.ant-btn-background-ghost.ant-btn-danger:hover{color:#ff7875;background-color:transparent;border-color:#ff7875}.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger.active,.ant-btn-background-ghost.ant-btn-danger:active{color:#d9363e;background-color:transparent;border-color:#d9363e}.ant-btn-background-ghost.ant-btn-danger.active>a:only-child,.ant-btn-background-ghost.ant-btn-danger:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger-disabled,.ant-btn-background-ghost.ant-btn-danger-disabled.active,.ant-btn-background-ghost.ant-btn-danger-disabled:active,.ant-btn-background-ghost.ant-btn-danger-disabled:focus,.ant-btn-background-ghost.ant-btn-danger-disabled:hover,.ant-btn-background-ghost.ant-btn-danger.disabled,.ant-btn-background-ghost.ant-btn-danger.disabled.active,.ant-btn-background-ghost.ant-btn-danger.disabled:active,.ant-btn-background-ghost.ant-btn-danger.disabled:focus,.ant-btn-background-ghost.ant-btn-danger.disabled:hover,.ant-btn-background-ghost.ant-btn-danger[disabled],.ant-btn-background-ghost.ant-btn-danger[disabled].active,.ant-btn-background-ghost.ant-btn-danger[disabled]:active,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-danger-disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-danger-disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-danger-disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger-disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger-disabled>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger.disabled>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled].active>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger-disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger-disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger-disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger-disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger-disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger.disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled].active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-link{color:#1890ff;background-color:transparent;border-color:transparent;text-shadow:none;color:#fff}.ant-btn-background-ghost.ant-btn-link>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-link:focus,.ant-btn-background-ghost.ant-btn-link:hover{color:#40a9ff;background-color:transparent;border-color:transparent}.ant-btn-background-ghost.ant-btn-link:focus>a:only-child,.ant-btn-background-ghost.ant-btn-link:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-link:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-link:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-link.active,.ant-btn-background-ghost.ant-btn-link:active{color:#096dd9;background-color:transparent;border-color:transparent}.ant-btn-background-ghost.ant-btn-link.active>a:only-child,.ant-btn-background-ghost.ant-btn-link:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-link.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-link-disabled,.ant-btn-background-ghost.ant-btn-link-disabled.active,.ant-btn-background-ghost.ant-btn-link-disabled:active,.ant-btn-background-ghost.ant-btn-link-disabled:focus,.ant-btn-background-ghost.ant-btn-link-disabled:hover,.ant-btn-background-ghost.ant-btn-link.disabled,.ant-btn-background-ghost.ant-btn-link.disabled.active,.ant-btn-background-ghost.ant-btn-link.disabled:active,.ant-btn-background-ghost.ant-btn-link.disabled:focus,.ant-btn-background-ghost.ant-btn-link.disabled:hover,.ant-btn-background-ghost.ant-btn-link[disabled],.ant-btn-background-ghost.ant-btn-link[disabled].active,.ant-btn-background-ghost.ant-btn-link[disabled]:active,.ant-btn-background-ghost.ant-btn-link[disabled]:focus,.ant-btn-background-ghost.ant-btn-link[disabled]:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9;text-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-link-disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-link-disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-link-disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-link-disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-link-disabled>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled.active>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled:active>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled:focus>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled:hover>a:only-child,.ant-btn-background-ghost.ant-btn-link.disabled>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled].active>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-link[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-link-disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link-disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link-disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-link-disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-link-disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled.active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-link.disabled>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled].active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-link[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-two-chinese-chars:first-letter{letter-spacing:.34em}.ant-btn-two-chinese-chars>:not(.anticon){margin-right:-.34em;letter-spacing:.34em}.ant-btn-block{width:100%}.ant-btn:empty{vertical-align:top}a.ant-btn{padding-top:.1px;line-height:30px}a.ant-btn-lg{line-height:38px}a.ant-btn-sm{line-height:22px}.ant-tree.ant-tree-directory{position:relative}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-switcher,.ant-tree.ant-tree-directory>li span.ant-tree-switcher{position:relative;z-index:1}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-switcher.ant-tree-switcher-noop,.ant-tree.ant-tree-directory>li span.ant-tree-switcher.ant-tree-switcher-noop{pointer-events:none}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-checkbox,.ant-tree.ant-tree-directory>li span.ant-tree-checkbox{position:relative;z-index:1}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-node-content-wrapper,.ant-tree.ant-tree-directory>li span.ant-tree-node-content-wrapper{border-radius:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-node-content-wrapper:hover,.ant-tree.ant-tree-directory>li span.ant-tree-node-content-wrapper:hover{background:transparent}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-node-content-wrapper:hover:before,.ant-tree.ant-tree-directory>li span.ant-tree-node-content-wrapper:hover:before{background:#e6f7ff}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-node-content-wrapper.ant-tree-node-selected,.ant-tree.ant-tree-directory>li span.ant-tree-node-content-wrapper.ant-tree-node-selected{color:#fff;background:transparent}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-node-content-wrapper:before,.ant-tree.ant-tree-directory>li span.ant-tree-node-content-wrapper:before{position:absolute;right:0;left:0;height:24px;-webkit-transition:all .3s;transition:all .3s;content:""}.ant-tree.ant-tree-directory .ant-tree-child-tree>li span.ant-tree-node-content-wrapper>span,.ant-tree.ant-tree-directory>li span.ant-tree-node-content-wrapper>span{position:relative;z-index:1}.ant-tree.ant-tree-directory .ant-tree-child-tree>li.ant-tree-treenode-selected>span.ant-tree-switcher,.ant-tree.ant-tree-directory>li.ant-tree-treenode-selected>span.ant-tree-switcher{color:#fff}.ant-tree.ant-tree-directory .ant-tree-child-tree>li.ant-tree-treenode-selected>span.ant-tree-checkbox .ant-tree-checkbox-inner,.ant-tree.ant-tree-directory>li.ant-tree-treenode-selected>span.ant-tree-checkbox .ant-tree-checkbox-inner{border-color:#1890ff}.ant-tree.ant-tree-directory .ant-tree-child-tree>li.ant-tree-treenode-selected>span.ant-tree-checkbox.ant-tree-checkbox-checked:after,.ant-tree.ant-tree-directory>li.ant-tree-treenode-selected>span.ant-tree-checkbox.ant-tree-checkbox-checked:after{border-color:#fff}.ant-tree.ant-tree-directory .ant-tree-child-tree>li.ant-tree-treenode-selected>span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner,.ant-tree.ant-tree-directory>li.ant-tree-treenode-selected>span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner{background:#fff}.ant-tree.ant-tree-directory .ant-tree-child-tree>li.ant-tree-treenode-selected>span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after,.ant-tree.ant-tree-directory>li.ant-tree-treenode-selected>span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after{border-color:#1890ff}.ant-tree.ant-tree-directory .ant-tree-child-tree>li.ant-tree-treenode-selected>span.ant-tree-node-content-wrapper:before,.ant-tree.ant-tree-directory>li.ant-tree-treenode-selected>span.ant-tree-node-content-wrapper:before{background:#1890ff}.ant-tree-checkbox{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;top:-.09em;display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;outline:none;cursor:pointer}.ant-tree-checkbox-input:focus+.ant-tree-checkbox-inner,.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-inner,.ant-tree-checkbox:hover .ant-tree-checkbox-inner{border-color:#1890ff}.ant-tree-checkbox-checked:after{top:0;height:100%;border:1px solid #1890ff;border-radius:2px;visibility:hidden;-webkit-animation:antCheckboxEffect .36s ease-in-out;animation:antCheckboxEffect .36s ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;content:""}.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox:after,.ant-tree-checkbox:hover:after{visibility:visible}.ant-tree-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;-webkit-transition:all .3s;transition:all .3s}.ant-tree-checkbox-inner:after{position:absolute;top:50%;left:22%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(0) translate(-50%,-50%);transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;-webkit-transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-tree-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(1) translate(-50%,-50%);transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;-webkit-transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-tree-checkbox-checked .ant-tree-checkbox-inner{background-color:#1890ff;border-color:#1890ff}.ant-tree-checkbox-disabled{cursor:not-allowed}.ant-tree-checkbox-disabled.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after{border-color:rgba(0,0,0,.25);-webkit-animation-name:none;animation-name:none}.ant-tree-checkbox-disabled .ant-tree-checkbox-input{cursor:not-allowed}.ant-tree-checkbox-disabled .ant-tree-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;-webkit-animation-name:none;animation-name:none}.ant-tree-checkbox-disabled+span{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-tree-checkbox-disabled:hover:after,.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-disabled:after{visibility:hidden}.ant-tree-checkbox-wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block;line-height:unset;cursor:pointer}.ant-tree-checkbox-wrapper.ant-tree-checkbox-wrapper-disabled{cursor:not-allowed}.ant-tree-checkbox-wrapper+.ant-tree-checkbox-wrapper{margin-left:8px}.ant-tree-checkbox+span{padding-right:8px;padding-left:8px}.ant-tree-checkbox-group{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block}.ant-tree-checkbox-group-item{display:inline-block;margin-right:8px}.ant-tree-checkbox-group-item:last-child{margin-right:0}.ant-tree-checkbox-group-item+.ant-tree-checkbox-group-item{margin-left:0}.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#1890ff;border:0;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-tree-checkbox-indeterminate.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after{background-color:rgba(0,0,0,.25);border-color:rgba(0,0,0,.25)}.ant-tree{-webkit-box-sizing:border-box;box-sizing:border-box;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";margin:0;padding:0}.ant-tree-checkbox-checked:after{position:absolute;top:16.67%;left:0;width:100%;height:66.67%}.ant-tree ol,.ant-tree ul{margin:0;padding:0;list-style:none}.ant-tree li{margin:0;padding:4px 0;white-space:nowrap;list-style:none;outline:0}.ant-tree li span[draggable=true],.ant-tree li span[draggable]{line-height:20px;border-top:2px solid transparent;border-bottom:2px solid transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}.ant-tree li.drag-over>span[draggable]{color:#fff;background-color:#1890ff;opacity:.8}.ant-tree li.drag-over-gap-top>span[draggable]{border-top-color:#1890ff}.ant-tree li.drag-over-gap-bottom>span[draggable]{border-bottom-color:#1890ff}.ant-tree li.filter-node>span{color:#f5222d!important;font-weight:500!important}.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-loading-icon,.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-loading-icon{position:absolute;left:0;display:inline-block;width:24px;height:24px;color:#1890ff;font-size:14px;-webkit-transform:none;transform:none}.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-loading-icon svg,.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-loading-icon svg{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}:root .ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_close:after,:root .ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_open:after{opacity:0}.ant-tree li ul{margin:0;padding:0 0 0 18px}.ant-tree li .ant-tree-node-content-wrapper{display:inline-block;height:24px;margin:0;padding:0 5px;color:rgba(0,0,0,.65);line-height:24px;text-decoration:none;vertical-align:top;border-radius:2px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-tree li .ant-tree-node-content-wrapper:hover{background-color:#e6f7ff}.ant-tree li .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:#bae7ff}.ant-tree li span.ant-tree-checkbox{top:auto;height:24px;margin:0 4px 0 2px;padding:4px 0}.ant-tree li span.ant-tree-iconEle,.ant-tree li span.ant-tree-switcher{display:inline-block;width:24px;height:24px;margin:0;line-height:24px;text-align:center;vertical-align:top;border:0 none;outline:none;cursor:pointer}.ant-tree li span.ant-tree-iconEle:empty{display:none}.ant-tree li span.ant-tree-switcher{position:relative}.ant-tree li span.ant-tree-switcher.ant-tree-switcher-noop{cursor:default}.ant-tree li span.ant-tree-switcher.ant-tree-switcher_open .ant-select-switcher-icon,.ant-tree li span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-icon{font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg);display:inline-block;font-weight:700}:root .ant-tree li span.ant-tree-switcher.ant-tree-switcher_open .ant-select-switcher-icon,:root .ant-tree li span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-icon{font-size:12px}.ant-tree li span.ant-tree-switcher.ant-tree-switcher_open .ant-select-switcher-icon svg,.ant-tree li span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-tree li span.ant-tree-switcher.ant-tree-switcher_close .ant-select-switcher-icon,.ant-tree li span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-icon{font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg);display:inline-block;font-weight:700}:root .ant-tree li span.ant-tree-switcher.ant-tree-switcher_close .ant-select-switcher-icon,:root .ant-tree li span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-icon{font-size:12px}.ant-tree li span.ant-tree-switcher.ant-tree-switcher_close .ant-select-switcher-icon svg,.ant-tree li span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-tree li span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-icon svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.ant-tree li:last-child>span.ant-tree-iconEle:before,.ant-tree li:last-child>span.ant-tree-switcher:before{display:none}.ant-tree>li:first-child{padding-top:7px}.ant-tree>li:last-child{padding-bottom:7px}.ant-tree-child-tree>li:first-child{padding-top:8px}.ant-tree-child-tree>li:last-child{padding-bottom:0}li.ant-tree-treenode-disabled>.ant-tree-node-content-wrapper,li.ant-tree-treenode-disabled>.ant-tree-node-content-wrapper span,li.ant-tree-treenode-disabled>span:not(.ant-tree-switcher){color:rgba(0,0,0,.25);cursor:not-allowed}li.ant-tree-treenode-disabled>.ant-tree-node-content-wrapper:hover{background:transparent}.ant-tree-icon__close,.ant-tree-icon__open{margin-right:2px;vertical-align:top}.ant-tree.ant-tree-show-line li{position:relative}.ant-tree.ant-tree-show-line li span.ant-tree-switcher{color:rgba(0,0,0,.45);background:#fff}.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher-noop .ant-select-switcher-icon,.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher-noop .ant-tree-switcher-icon{display:inline-block;font-weight:400;font-size:12px}.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher-noop .ant-select-switcher-icon svg,.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher-noop .ant-tree-switcher-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_open .ant-select-switcher-icon,.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-icon{display:inline-block;font-weight:400;font-size:12px}.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_open .ant-select-switcher-icon svg,.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_close .ant-select-switcher-icon,.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-icon{display:inline-block;font-weight:400;font-size:12px}.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_close .ant-select-switcher-icon svg,.ant-tree.ant-tree-show-line li span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-tree.ant-tree-show-line li:not(:last-child):before{position:absolute;left:12px;width:1px;height:100%;height:calc(100% - 22px);margin:22px 0 0;border-left:1px solid #d9d9d9;content:" "}.ant-tree.ant-tree-icon-hide .ant-tree-treenode-loading .ant-tree-iconEle{display:none}.ant-tree.ant-tree-block-node li .ant-tree-node-content-wrapper{width:calc(100% - 24px)}.ant-tree.ant-tree-block-node li span.ant-tree-checkbox+.ant-tree-node-content-wrapper{width:calc(100% - 46px)}.ant-divider{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";background:#e8e8e8}.ant-divider,.ant-divider-vertical{position:relative;top:-.06em;display:inline-block;width:1px;height:.9em;margin:0 8px;vertical-align:middle}.ant-divider-horizontal{display:block;clear:both;width:100%;min-width:100%;height:1px;margin:24px 0}.ant-divider-horizontal.ant-divider-with-text-center,.ant-divider-horizontal.ant-divider-with-text-left,.ant-divider-horizontal.ant-divider-with-text-right{display:table;margin:16px 0;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;white-space:nowrap;text-align:center;background:transparent}.ant-divider-horizontal.ant-divider-with-text-center:after,.ant-divider-horizontal.ant-divider-with-text-center:before,.ant-divider-horizontal.ant-divider-with-text-left:after,.ant-divider-horizontal.ant-divider-with-text-left:before,.ant-divider-horizontal.ant-divider-with-text-right:after,.ant-divider-horizontal.ant-divider-with-text-right:before{position:relative;top:50%;display:table-cell;width:50%;border-top:1px solid #e8e8e8;-webkit-transform:translateY(50%);transform:translateY(50%);content:""}.ant-divider-horizontal.ant-divider-with-text-left .ant-divider-inner-text,.ant-divider-horizontal.ant-divider-with-text-right .ant-divider-inner-text{display:inline-block;padding:0 10px}.ant-divider-horizontal.ant-divider-with-text-left:before{top:50%;width:5%}.ant-divider-horizontal.ant-divider-with-text-left:after,.ant-divider-horizontal.ant-divider-with-text-right:before{top:50%;width:95%}.ant-divider-horizontal.ant-divider-with-text-right:after{top:50%;width:5%}.ant-divider-inner-text{display:inline-block;padding:0 24px}.ant-divider-dashed{background:none;border-color:#e8e8e8;border-style:dashed;border-width:1px 0 0}.ant-divider-horizontal.ant-divider-with-text-center.ant-divider-dashed,.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed,.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed{border-top:0}.ant-divider-horizontal.ant-divider-with-text-center.ant-divider-dashed:after,.ant-divider-horizontal.ant-divider-with-text-center.ant-divider-dashed:before,.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed:after,.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed:before,.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed:after,.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed:before{border-style:dashed none none}.ant-divider-vertical.ant-divider-dashed{border-width:0 0 0 1px}.ant-tag{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block;height:auto;margin-right:8px;padding:0 7px;font-size:12px;line-height:20px;white-space:nowrap;background:#fafafa;border:1px solid #d9d9d9;border-radius:4px;cursor:default;opacity:1;-webkit-transition:all .3s cubic-bezier(.78,.14,.15,.86);transition:all .3s cubic-bezier(.78,.14,.15,.86)}.ant-tag:hover{opacity:.85}.ant-tag,.ant-tag a,.ant-tag a:hover{color:rgba(0,0,0,.65)}.ant-tag>a:first-child:last-child{display:inline-block;margin:0 -8px;padding:0 8px}.ant-tag .anticon-close{display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg);margin-left:3px;color:rgba(0,0,0,.45);font-weight:700;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.78,.14,.15,.86);transition:all .3s cubic-bezier(.78,.14,.15,.86)}:root .ant-tag .anticon-close{font-size:12px}.ant-tag .anticon-close:hover{color:rgba(0,0,0,.85)}.ant-tag-has-color{border-color:transparent}.ant-tag-has-color,.ant-tag-has-color .anticon-close,.ant-tag-has-color .anticon-close:hover,.ant-tag-has-color a,.ant-tag-has-color a:hover{color:#fff}.ant-tag-checkable{background-color:transparent;border-color:transparent}.ant-tag-checkable:not(.ant-tag-checkable-checked):hover{color:#1890ff}.ant-tag-checkable-checked,.ant-tag-checkable:active{color:#fff}.ant-tag-checkable-checked{background-color:#1890ff}.ant-tag-checkable:active{background-color:#096dd9}.ant-tag-hidden{display:none}.ant-tag-pink{color:#eb2f96;background:#fff0f6;border-color:#ffadd2}.ant-tag-pink-inverse{color:#fff;background:#eb2f96;border-color:#eb2f96}.ant-tag-magenta{color:#eb2f96;background:#fff0f6;border-color:#ffadd2}.ant-tag-magenta-inverse{color:#fff;background:#eb2f96;border-color:#eb2f96}.ant-tag-red{color:#f5222d;background:#fff1f0;border-color:#ffa39e}.ant-tag-red-inverse{color:#fff;background:#f5222d;border-color:#f5222d}.ant-tag-volcano{color:#fa541c;background:#fff2e8;border-color:#ffbb96}.ant-tag-volcano-inverse{color:#fff;background:#fa541c;border-color:#fa541c}.ant-tag-orange{color:#fa8c16;background:#fff7e6;border-color:#ffd591}.ant-tag-orange-inverse{color:#fff;background:#fa8c16;border-color:#fa8c16}.ant-tag-yellow{color:#fadb14;background:#feffe6;border-color:#fffb8f}.ant-tag-yellow-inverse{color:#fff;background:#fadb14;border-color:#fadb14}.ant-tag-gold{color:#faad14;background:#fffbe6;border-color:#ffe58f}.ant-tag-gold-inverse{color:#fff;background:#faad14;border-color:#faad14}.ant-tag-cyan{color:#13c2c2;background:#e6fffb;border-color:#87e8de}.ant-tag-cyan-inverse{color:#fff;background:#13c2c2;border-color:#13c2c2}.ant-tag-lime{color:#a0d911;background:#fcffe6;border-color:#eaff8f}.ant-tag-lime-inverse{color:#fff;background:#a0d911;border-color:#a0d911}.ant-tag-green{color:#52c41a;background:#f6ffed;border-color:#b7eb8f}.ant-tag-green-inverse{color:#fff;background:#52c41a;border-color:#52c41a}.ant-tag-blue{color:#1890ff;background:#e6f7ff;border-color:#91d5ff}.ant-tag-blue-inverse{color:#fff;background:#1890ff;border-color:#1890ff}.ant-tag-geekblue{color:#2f54eb;background:#f0f5ff;border-color:#adc6ff}.ant-tag-geekblue-inverse{color:#fff;background:#2f54eb;border-color:#2f54eb}.ant-tag-purple{color:#722ed1;background:#f9f0ff;border-color:#d3adf7}.ant-tag-purple-inverse{color:#fff;background:#722ed1;border-color:#722ed1}.ant-layout{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:auto;flex:auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:0;background:#f0f2f5}.ant-layout,.ant-layout *{-webkit-box-sizing:border-box;box-sizing:border-box}.ant-layout.ant-layout-has-sider{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.ant-layout.ant-layout-has-sider>.ant-layout,.ant-layout.ant-layout-has-sider>.ant-layout-content{overflow-x:hidden}.ant-layout-footer,.ant-layout-header{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.ant-layout-header{height:64px;padding:0 50px;line-height:64px;background:#001529}.ant-layout-footer{padding:24px 50px;color:rgba(0,0,0,.65);font-size:14px;background:#f0f2f5}.ant-layout-content{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-height:0}.ant-layout-sider{position:relative;min-width:0;background:#001529;-webkit-transition:all .2s;transition:all .2s}.ant-layout-sider-children{height:100%;margin-top:-.1px;padding-top:.1px}.ant-layout-sider-has-trigger{padding-bottom:48px}.ant-layout-sider-right{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-layout-sider-trigger{position:fixed;bottom:0;z-index:1;height:48px;color:#fff;line-height:48px;text-align:center;background:#002140;cursor:pointer;-webkit-transition:all .2s;transition:all .2s}.ant-layout-sider-zero-width>*{overflow:hidden}.ant-layout-sider-zero-width-trigger{position:absolute;top:64px;right:-36px;z-index:1;width:36px;height:42px;color:#fff;font-size:18px;line-height:42px;text-align:center;background:#001529;border-radius:0 4px 4px 0;cursor:pointer;-webkit-transition:background .3s ease;transition:background .3s ease}.ant-layout-sider-zero-width-trigger:hover{background:#192c3e}.ant-layout-sider-zero-width-trigger-right{left:-36px;border-radius:4px 0 0 4px}.ant-layout-sider-light{background:#fff}.ant-layout-sider-light .ant-layout-sider-trigger,.ant-layout-sider-light .ant-layout-sider-zero-width-trigger{color:rgba(0,0,0,.65);background:#fff}.ant-radio-group,.ant-radio-wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block}.ant-radio-wrapper{margin-right:8px}.ant-radio,.ant-radio-wrapper{position:relative;white-space:nowrap;cursor:pointer}.ant-radio{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block;line-height:1;vertical-align:sub;outline:none}.ant-radio-input:focus+.ant-radio-inner,.ant-radio-wrapper:hover .ant-radio,.ant-radio:hover .ant-radio-inner{border-color:#1890ff}.ant-radio-input:focus+.ant-radio-inner{-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.08);box-shadow:0 0 0 3px rgba(24,144,255,.08)}.ant-radio-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:50%;visibility:hidden;-webkit-animation:antRadioEffect .36s ease-in-out;animation:antRadioEffect .36s ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both;content:""}.ant-radio-wrapper:hover .ant-radio:after,.ant-radio:hover:after{visibility:visible}.ant-radio-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;background-color:#fff;border-color:#d9d9d9;border-style:solid;border-width:1px;border-radius:100px;-webkit-transition:all .3s;transition:all .3s}.ant-radio-inner:after{position:absolute;top:3px;left:3px;display:table;width:8px;height:8px;background-color:#1890ff;border-top:0;border-left:0;border-radius:8px;-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-transition:all .3s cubic-bezier(.78,.14,.15,.86);transition:all .3s cubic-bezier(.78,.14,.15,.86);content:" "}.ant-radio-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;cursor:pointer;opacity:0}.ant-radio-checked .ant-radio-inner{border-color:#1890ff}.ant-radio-checked .ant-radio-inner:after{-webkit-transform:scale(1);transform:scale(1);opacity:1;-webkit-transition:all .3s cubic-bezier(.78,.14,.15,.86);transition:all .3s cubic-bezier(.78,.14,.15,.86)}.ant-radio-disabled .ant-radio-inner{background-color:#f5f5f5;border-color:#d9d9d9!important;cursor:not-allowed}.ant-radio-disabled .ant-radio-inner:after{background-color:rgba(0,0,0,.2)}.ant-radio-disabled .ant-radio-input{cursor:not-allowed}.ant-radio-disabled+span{color:rgba(0,0,0,.25);cursor:not-allowed}span.ant-radio+*{padding-right:8px;padding-left:8px}.ant-radio-button-wrapper{position:relative;display:inline-block;height:32px;margin:0;padding:0 15px;color:rgba(0,0,0,.65);line-height:30px;background:#fff;border:1px solid #d9d9d9;border-top-width:1.02px;border-left:0;cursor:pointer;-webkit-transition:color .3s,background .3s,border-color .3s,-webkit-box-shadow .3s;transition:color .3s,background .3s,border-color .3s,-webkit-box-shadow .3s;transition:color .3s,background .3s,border-color .3s,box-shadow .3s;transition:color .3s,background .3s,border-color .3s,box-shadow .3s,-webkit-box-shadow .3s}.ant-radio-button-wrapper a{color:rgba(0,0,0,.65)}.ant-radio-button-wrapper>.ant-radio-button{display:block;width:0;height:0;margin-left:0}.ant-radio-group-large .ant-radio-button-wrapper{height:40px;font-size:16px;line-height:38px}.ant-radio-group-small .ant-radio-button-wrapper{height:24px;padding:0 7px;line-height:22px}.ant-radio-button-wrapper:not(:first-child):before{position:absolute;top:-1px;left:-1px;display:block;-webkit-box-sizing:content-box;box-sizing:content-box;width:1px;height:100%;padding:1px 0;background-color:#d9d9d9;-webkit-transition:background-color .3s;transition:background-color .3s;content:""}.ant-radio-button-wrapper:first-child{border-left:1px solid #d9d9d9;border-radius:4px 0 0 4px}.ant-radio-button-wrapper:last-child{border-radius:0 4px 4px 0}.ant-radio-button-wrapper:first-child:last-child{border-radius:4px}.ant-radio-button-wrapper:hover{position:relative;color:#1890ff}.ant-radio-button-wrapper:focus-within{-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.08);box-shadow:0 0 0 3px rgba(24,144,255,.08)}.ant-radio-button-wrapper .ant-radio-inner,.ant-radio-button-wrapper input[type=checkbox],.ant-radio-button-wrapper input[type=radio]{width:0;height:0;opacity:0;pointer-events:none}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){z-index:1;color:#1890ff;background:#fff;border-color:#1890ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):before{background-color:#1890ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):first-child{border-color:#1890ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#40a9ff;border-color:#40a9ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover:before{background-color:#40a9ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#096dd9;border-color:#096dd9}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active:before{background-color:#096dd9}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within{-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.08);box-shadow:0 0 0 3px rgba(24,144,255,.08)}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){color:#fff;background:#1890ff;border-color:#1890ff}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#fff;background:#40a9ff;border-color:#40a9ff}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#fff;background:#096dd9;border-color:#096dd9}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within{-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.08);box-shadow:0 0 0 3px rgba(24,144,255,.08)}.ant-radio-button-wrapper-disabled{cursor:not-allowed}.ant-radio-button-wrapper-disabled,.ant-radio-button-wrapper-disabled:first-child,.ant-radio-button-wrapper-disabled:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9}.ant-radio-button-wrapper-disabled:first-child{border-left-color:#d9d9d9}.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked{color:#fff;background-color:#e6e6e6;border-color:#d9d9d9;-webkit-box-shadow:none;box-shadow:none}@-webkit-keyframes antRadioEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}@keyframes antRadioEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}@supports (-moz-appearance:meterbar) and (background-blend-mode:difference,normal){.ant-radio{vertical-align:text-bottom}}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-nav-container{height:40px}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-ink-bar{visibility:hidden}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab{height:40px;margin:0;margin-right:2px;padding:0 16px;line-height:38px;background:#fafafa;border:1px solid #e8e8e8;border-radius:4px 4px 0 0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active{height:40px;color:#1890ff;background:#fff;border-color:#e8e8e8;border-bottom:1px solid #fff}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active:before{border-top:2px solid transparent}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-disabled{color:#1890ff;color:rgba(0,0,0,.25)}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-inactive{padding:0}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-nav-wrap{margin-bottom:0}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab .ant-tabs-close-x{width:16px;height:16px;height:14px;margin-right:-5px;margin-left:3px;overflow:hidden;color:rgba(0,0,0,.45);font-size:12px;vertical-align:middle;-webkit-transition:all .3s;transition:all .3s}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab .ant-tabs-close-x:hover{color:rgba(0,0,0,.85)}.ant-tabs.ant-tabs-card .ant-tabs-card-content>.ant-tabs-tabpane,.ant-tabs.ant-tabs-editable-card .ant-tabs-card-content>.ant-tabs-tabpane{-webkit-transition:none!important;transition:none!important}.ant-tabs.ant-tabs-card .ant-tabs-card-content>.ant-tabs-tabpane-inactive,.ant-tabs.ant-tabs-editable-card .ant-tabs-card-content>.ant-tabs-tabpane-inactive{overflow:hidden}.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab:hover .anticon-close{opacity:1}.ant-tabs-extra-content{line-height:45px}.ant-tabs-extra-content .ant-tabs-new-tab{position:relative;width:20px;height:20px;color:rgba(0,0,0,.65);font-size:12px;line-height:20px;text-align:center;border:1px solid #e8e8e8;border-radius:2px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-tabs-extra-content .ant-tabs-new-tab:hover{color:#1890ff;border-color:#1890ff}.ant-tabs-extra-content .ant-tabs-new-tab svg{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.ant-tabs.ant-tabs-large .ant-tabs-extra-content{line-height:56px}.ant-tabs.ant-tabs-small .ant-tabs-extra-content{line-height:37px}.ant-tabs.ant-tabs-card .ant-tabs-extra-content{line-height:40px}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-nav-container,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-nav-container{height:100%}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab{margin-bottom:8px;border-bottom:1px solid #e8e8e8}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab-active,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab-active{padding-bottom:4px}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab:last-child,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab:last-child{margin-bottom:8px}.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-new-tab,.ant-tabs-vertical.ant-tabs-card .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-new-tab{width:90%}.ant-tabs-vertical.ant-tabs-card.ant-tabs-left .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-nav-wrap{margin-right:0}.ant-tabs-vertical.ant-tabs-card.ant-tabs-left .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab{margin-right:1px;border-right:0;border-radius:4px 0 0 4px}.ant-tabs-vertical.ant-tabs-card.ant-tabs-left .ant-tabs-card-bar.ant-tabs-left-bar .ant-tabs-tab-active{margin-right:-1px;padding-right:18px}.ant-tabs-vertical.ant-tabs-card.ant-tabs-right .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-nav-wrap{margin-left:0}.ant-tabs-vertical.ant-tabs-card.ant-tabs-right .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab{margin-left:1px;border-left:0;border-radius:0 4px 4px 0}.ant-tabs-vertical.ant-tabs-card.ant-tabs-right .ant-tabs-card-bar.ant-tabs-right-bar .ant-tabs-tab-active{margin-left:-1px;padding-left:18px}.ant-tabs .ant-tabs-card-bar.ant-tabs-bottom-bar .ant-tabs-tab{height:auto;border-top:0;border-bottom:1px solid #e8e8e8;border-radius:0 0 4px 4px}.ant-tabs .ant-tabs-card-bar.ant-tabs-bottom-bar .ant-tabs-tab-active{padding-top:1px;padding-bottom:0;color:#1890ff}.ant-tabs{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;overflow:hidden;zoom:1}.ant-tabs:after,.ant-tabs:before{display:table;content:""}.ant-tabs:after{clear:both}.ant-tabs-ink-bar{position:absolute;bottom:1px;left:0;z-index:1;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:2px;background-color:#1890ff;-webkit-transform-origin:0 0;transform-origin:0 0}.ant-tabs-bar{margin:0 0 16px 0;border-bottom:1px solid #e8e8e8;outline:none}.ant-tabs-bar,.ant-tabs-nav-container{-webkit-transition:padding .3s cubic-bezier(.645,.045,.355,1);transition:padding .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-nav-container{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;margin-bottom:-1px;overflow:hidden;font-size:14px;line-height:1.5;white-space:nowrap;zoom:1}.ant-tabs-nav-container:after,.ant-tabs-nav-container:before{display:table;content:""}.ant-tabs-nav-container:after{clear:both}.ant-tabs-nav-container-scrolling{padding-right:32px;padding-left:32px}.ant-tabs-bottom .ant-tabs-bottom-bar{margin-top:16px;margin-bottom:0;border-top:1px solid #e8e8e8;border-bottom:none}.ant-tabs-bottom .ant-tabs-bottom-bar .ant-tabs-ink-bar{top:1px;bottom:auto}.ant-tabs-bottom .ant-tabs-bottom-bar .ant-tabs-nav-container{margin-top:-1px;margin-bottom:0}.ant-tabs-tab-next,.ant-tabs-tab-prev{position:absolute;z-index:2;width:0;height:100%;color:rgba(0,0,0,.45);text-align:center;background-color:transparent;border:0;cursor:pointer;opacity:0;-webkit-transition:width .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1);transition:width .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.ant-tabs-tab-next.ant-tabs-tab-arrow-show,.ant-tabs-tab-prev.ant-tabs-tab-arrow-show{width:32px;height:100%;opacity:1;pointer-events:auto}.ant-tabs-tab-next:hover,.ant-tabs-tab-prev:hover{color:rgba(0,0,0,.65)}.ant-tabs-tab-next-icon,.ant-tabs-tab-prev-icon{position:absolute;top:50%;left:50%;font-weight:700;font-style:normal;font-variant:normal;line-height:inherit;text-align:center;text-transform:none;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ant-tabs-tab-next-icon-target,.ant-tabs-tab-prev-icon-target{display:block;display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}:root .ant-tabs-tab-next-icon-target,:root .ant-tabs-tab-prev-icon-target{font-size:12px}.ant-tabs-tab-btn-disabled{cursor:not-allowed}.ant-tabs-tab-btn-disabled,.ant-tabs-tab-btn-disabled:hover{color:rgba(0,0,0,.25)}.ant-tabs-tab-next{right:2px}.ant-tabs-tab-prev{left:0}:root .ant-tabs-tab-prev{-webkit-filter:none;filter:none}.ant-tabs-nav-wrap{margin-bottom:-1px;overflow:hidden}.ant-tabs-nav-scroll{overflow:hidden;white-space:nowrap}.ant-tabs-nav{position:relative;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding-left:0;list-style:none;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-nav:after,.ant-tabs-nav:before{display:table;content:" "}.ant-tabs-nav:after{clear:both}.ant-tabs-nav .ant-tabs-tab{position:relative;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;margin:0 32px 0 0;padding:12px 16px;text-decoration:none;cursor:pointer;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-nav .ant-tabs-tab:before{position:absolute;top:-1px;left:0;width:100%;border-top:2px solid transparent;border-radius:4px 4px 0 0;-webkit-transition:all .3s;transition:all .3s;content:"";pointer-events:none}.ant-tabs-nav .ant-tabs-tab:last-child{margin-right:0}.ant-tabs-nav .ant-tabs-tab:hover{color:#40a9ff}.ant-tabs-nav .ant-tabs-tab:active{color:#096dd9}.ant-tabs-nav .ant-tabs-tab .anticon{margin-right:8px}.ant-tabs-nav .ant-tabs-tab-active{color:#1890ff;text-shadow:0 0 .25px currentColor}.ant-tabs-nav .ant-tabs-tab-disabled,.ant-tabs-nav .ant-tabs-tab-disabled:hover{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-tabs .ant-tabs-large-bar .ant-tabs-nav-container{font-size:16px}.ant-tabs .ant-tabs-large-bar .ant-tabs-tab{padding:16px}.ant-tabs .ant-tabs-small-bar .ant-tabs-nav-container{font-size:14px}.ant-tabs .ant-tabs-small-bar .ant-tabs-tab{padding:8px 16px}.ant-tabs-content:before{display:block;overflow:hidden;content:""}.ant-tabs .ant-tabs-bottom-content,.ant-tabs .ant-tabs-top-content{width:100%}.ant-tabs .ant-tabs-bottom-content>.ant-tabs-tabpane,.ant-tabs .ant-tabs-top-content>.ant-tabs-tabpane{-ms-flex-negative:0;flex-shrink:0;width:100%;-webkit-backface-visibility:hidden;opacity:1;-webkit-transition:opacity .45s;transition:opacity .45s}.ant-tabs .ant-tabs-bottom-content>.ant-tabs-tabpane-inactive,.ant-tabs .ant-tabs-top-content>.ant-tabs-tabpane-inactive{height:0;padding:0!important;overflow:hidden;opacity:0;pointer-events:none}.ant-tabs .ant-tabs-bottom-content>.ant-tabs-tabpane-inactive input,.ant-tabs .ant-tabs-top-content>.ant-tabs-tabpane-inactive input{visibility:hidden}.ant-tabs .ant-tabs-bottom-content.ant-tabs-content-animated,.ant-tabs .ant-tabs-top-content.ant-tabs-content-animated{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-transition:margin-left .3s cubic-bezier(.645,.045,.355,1);transition:margin-left .3s cubic-bezier(.645,.045,.355,1);will-change:margin-left}.ant-tabs .ant-tabs-left-bar,.ant-tabs .ant-tabs-right-bar{height:100%;border-bottom:0}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab-arrow-show,.ant-tabs .ant-tabs-right-bar .ant-tabs-tab-arrow-show{width:100%;height:32px}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab,.ant-tabs .ant-tabs-right-bar .ant-tabs-tab{display:block;float:none;margin:0 0 16px 0;padding:8px 24px}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab:last-child,.ant-tabs .ant-tabs-right-bar .ant-tabs-tab:last-child{margin-bottom:0}.ant-tabs .ant-tabs-left-bar .ant-tabs-extra-content,.ant-tabs .ant-tabs-right-bar .ant-tabs-extra-content{text-align:center}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-scroll,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-scroll{width:auto}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-wrap,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-wrap{height:100%}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-container{margin-bottom:0}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-container.ant-tabs-nav-container-scrolling,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-container.ant-tabs-nav-container-scrolling{padding:32px 0}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-wrap,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-wrap{margin-bottom:0}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav{width:100%}.ant-tabs .ant-tabs-left-bar .ant-tabs-ink-bar,.ant-tabs .ant-tabs-right-bar .ant-tabs-ink-bar{top:0;bottom:auto;left:auto;width:2px;height:0}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab-next,.ant-tabs .ant-tabs-right-bar .ant-tabs-tab-next{right:0;bottom:0;width:100%;height:32px}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab-prev,.ant-tabs .ant-tabs-right-bar .ant-tabs-tab-prev{top:0;width:100%;height:32px}.ant-tabs .ant-tabs-left-content,.ant-tabs .ant-tabs-right-content{width:auto;margin-top:0!important;overflow:hidden}.ant-tabs .ant-tabs-left-bar{float:left;margin-right:-1px;margin-bottom:0;border-right:1px solid #e8e8e8}.ant-tabs .ant-tabs-left-bar .ant-tabs-tab{text-align:right}.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-left-bar .ant-tabs-nav-wrap{margin-right:-1px}.ant-tabs .ant-tabs-left-bar .ant-tabs-ink-bar{right:1px}.ant-tabs .ant-tabs-left-content{padding-left:24px;border-left:1px solid #e8e8e8}.ant-tabs .ant-tabs-right-bar{float:right;margin-bottom:0;margin-left:-1px;border-left:1px solid #e8e8e8}.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-container,.ant-tabs .ant-tabs-right-bar .ant-tabs-nav-wrap{margin-left:-1px}.ant-tabs .ant-tabs-right-bar .ant-tabs-ink-bar{left:1px}.ant-tabs .ant-tabs-right-content{padding-right:24px;border-right:1px solid #e8e8e8}.ant-tabs-bottom .ant-tabs-ink-bar-animated,.ant-tabs-top .ant-tabs-ink-bar-animated{-webkit-transition:width .2s cubic-bezier(.645,.045,.355,1),left .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:width .2s cubic-bezier(.645,.045,.355,1),left .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),width .2s cubic-bezier(.645,.045,.355,1),left .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),width .2s cubic-bezier(.645,.045,.355,1),left .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-left .ant-tabs-ink-bar-animated,.ant-tabs-right .ant-tabs-ink-bar-animated{-webkit-transition:height .2s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:height .2s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),height .2s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),height .2s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-no-animation>.ant-tabs-content>.ant-tabs-content-animated,.no-flex>.ant-tabs-content>.ant-tabs-content-animated{margin-left:0!important;-webkit-transform:none!important;transform:none!important}.ant-tabs-no-animation>.ant-tabs-content>.ant-tabs-tabpane-inactive,.no-flex>.ant-tabs-content>.ant-tabs-tabpane-inactive{height:0;padding:0!important;overflow:hidden;opacity:0;pointer-events:none}.ant-tabs-no-animation>.ant-tabs-content>.ant-tabs-tabpane-inactive input,.no-flex>.ant-tabs-content>.ant-tabs-tabpane-inactive input{visibility:hidden}.ant-tabs-left-content>.ant-tabs-content-animated,.ant-tabs-right-content>.ant-tabs-content-animated{margin-left:0!important;-webkit-transform:none!important;transform:none!important}.ant-tabs-left-content>.ant-tabs-tabpane-inactive,.ant-tabs-right-content>.ant-tabs-tabpane-inactive{height:0;padding:0!important;overflow:hidden;opacity:0;pointer-events:none}.ant-tabs-left-content>.ant-tabs-tabpane-inactive input,.ant-tabs-right-content>.ant-tabs-tabpane-inactive input{visibility:hidden}.ant-table-wrapper{zoom:1}.ant-table-wrapper:after,.ant-table-wrapper:before{display:table;content:""}.ant-table-wrapper:after{clear:both}.ant-table{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;clear:both}.ant-table-body{-webkit-transition:opacity .3s;transition:opacity .3s}.ant-table-empty .ant-table-body{overflow-x:auto!important;overflow-y:hidden!important}.ant-table table{width:100%;text-align:left;border-radius:4px 4px 0 0;border-collapse:separate;border-spacing:0}.ant-table-layout-fixed table{table-layout:fixed}.ant-table-thead>tr>th{color:rgba(0,0,0,.85);font-weight:500;text-align:left;background:#fafafa;border-bottom:1px solid #e8e8e8;-webkit-transition:background .3s ease;transition:background .3s ease}.ant-table-thead>tr>th[colspan]:not([colspan="1"]){text-align:center}.ant-table-thead>tr>th .ant-table-filter-icon,.ant-table-thead>tr>th .anticon-filter{position:absolute;top:0;right:0;width:28px;height:100%;color:#bfbfbf;font-size:12px;text-align:center;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-table-thead>tr>th .ant-table-filter-icon>svg,.ant-table-thead>tr>th .anticon-filter>svg{position:absolute;top:50%;left:50%;margin-top:-5px;margin-left:-6px}.ant-table-thead>tr>th .ant-table-filter-selected.anticon{color:#1890ff}.ant-table-thead>tr>th .ant-table-column-sorter{display:table-cell;vertical-align:middle}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner{height:1em;margin-top:.35em;margin-left:.57142857em;color:#bfbfbf;line-height:1em;text-align:center;-webkit-transition:all .3s;transition:all .3s}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-down,.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-up{display:inline-block;font-size:12px;font-size:11px\9;-webkit-transform:scale(.91666667) rotate(0deg);transform:scale(.91666667) rotate(0deg);display:block;height:1em;line-height:1em;-webkit-transition:all .3s;transition:all .3s}:root .ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-down,:root .ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-up{font-size:12px}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-down.on,.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-up.on{color:#1890ff}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner-full{margin-top:-.15em}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner-full .ant-table-column-sorter-down,.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner-full .ant-table-column-sorter-up{height:.5em;line-height:.5em}.ant-table-thead>tr>th .ant-table-column-sorter .ant-table-column-sorter-inner-full .ant-table-column-sorter-down{margin-top:.125em}.ant-table-thead>tr>th.ant-table-column-has-actions{position:relative;background-clip:padding-box;-webkit-background-clip:border-box}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters{padding-right:30px!important}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters .ant-table-filter-icon.ant-table-filter-open,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters .anticon-filter.ant-table-filter-open,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters:hover .ant-table-filter-icon:hover,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters:hover .anticon-filter:hover{color:rgba(0,0,0,.45);background:#e5e5e5}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters:hover .ant-table-filter-icon:active,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-filters:hover .anticon-filter:active{color:rgba(0,0,0,.65)}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters{cursor:pointer}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:hover,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:hover .ant-table-filter-icon,.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:hover .anticon-filter{background:#f2f2f2}.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:active .ant-table-column-sorter-down:not(.on),.ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:active .ant-table-column-sorter-up:not(.on){color:rgba(0,0,0,.45)}.ant-table-thead>tr>th .ant-table-header-column{display:inline-block;max-width:100%;vertical-align:top}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters{display:table}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>.ant-table-column-title{display:table-cell;vertical-align:middle}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>:not(.ant-table-column-sorter){position:relative}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters:before{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;-webkit-transition:all .3s;transition:all .3s;content:""}.ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters:hover:before{background:rgba(0,0,0,.04)}.ant-table-thead>tr>th.ant-table-column-has-sorters{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-table-thead>tr:first-child>th:first-child{border-top-left-radius:4px}.ant-table-thead>tr:first-child>th:last-child{border-top-right-radius:4px}.ant-table-thead>tr:not(:last-child)>th[colspan]{border-bottom:0}.ant-table-tbody>tr>td{border-bottom:1px solid #e8e8e8;-webkit-transition:background .3s;transition:background .3s}.ant-table-tbody>tr.ant-table-row-hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)>td,.ant-table-tbody>tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)>td,.ant-table-thead>tr.ant-table-row-hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)>td,.ant-table-thead>tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)>td{background:#e6f7ff}.ant-table-tbody>tr.ant-table-row-selected>td.ant-table-column-sort,.ant-table-tbody>tr:hover.ant-table-row-selected>td,.ant-table-tbody>tr:hover.ant-table-row-selected>td.ant-table-column-sort,.ant-table-thead>tr.ant-table-row-selected>td.ant-table-column-sort,.ant-table-thead>tr:hover.ant-table-row-selected>td,.ant-table-thead>tr:hover.ant-table-row-selected>td.ant-table-column-sort{background:#fafafa}.ant-table-thead>tr:hover{background:none}.ant-table-footer{position:relative;padding:16px 16px;color:rgba(0,0,0,.85);background:#fafafa;border-top:1px solid #e8e8e8;border-radius:0 0 4px 4px}.ant-table-footer:before{position:absolute;top:-1px;left:0;width:100%;height:1px;background:#fafafa;content:""}.ant-table.ant-table-bordered .ant-table-footer{border:1px solid #e8e8e8}.ant-table-title{position:relative;top:1px;padding:16px 0;border-radius:4px 4px 0 0}.ant-table.ant-table-bordered .ant-table-title{padding-right:16px;padding-left:16px;border:1px solid #e8e8e8}.ant-table-title+.ant-table-content{position:relative;border-radius:4px 4px 0 0}.ant-table-bordered .ant-table-title+.ant-table-content,.ant-table-bordered .ant-table-title+.ant-table-content .ant-table-thead>tr:first-child>th,.ant-table-bordered .ant-table-title+.ant-table-content table,.ant-table-without-column-header .ant-table-title+.ant-table-content,.ant-table-without-column-header table{border-radius:0}.ant-table-without-column-header.ant-table-bordered.ant-table-empty .ant-table-placeholder{border-top:1px solid #e8e8e8;border-radius:4px}.ant-table-tbody>tr.ant-table-row-selected td{color:inherit;background:#fafafa}.ant-table-thead>tr>th.ant-table-column-sort{background:#f5f5f5}.ant-table-tbody>tr>td.ant-table-column-sort{background:rgba(0,0,0,.01)}.ant-table-tbody>tr>td,.ant-table-thead>tr>th{padding:16px 16px;overflow-wrap:break-word}.ant-table-expand-icon-th,.ant-table-row-expand-icon-cell{width:50px;min-width:50px;text-align:center}.ant-table-header{overflow:hidden;background:#fafafa}.ant-table-header table{border-radius:4px 4px 0 0}.ant-table-loading{position:relative}.ant-table-loading .ant-table-body{background:#fff;opacity:.5}.ant-table-loading .ant-table-spin-holder{position:absolute;top:50%;left:50%;height:20px;margin-left:-30px;line-height:20px}.ant-table-loading .ant-table-with-pagination{margin-top:-20px}.ant-table-loading .ant-table-without-pagination{margin-top:10px}.ant-table-bordered .ant-table-body>table,.ant-table-bordered .ant-table-fixed-left table,.ant-table-bordered .ant-table-fixed-right table,.ant-table-bordered .ant-table-header>table{border:1px solid #e8e8e8;border-right:0;border-bottom:0}.ant-table-bordered.ant-table-empty .ant-table-placeholder{border-right:1px solid #e8e8e8;border-left:1px solid #e8e8e8}.ant-table-bordered.ant-table-fixed-header .ant-table-header>table{border-bottom:0}.ant-table-bordered.ant-table-fixed-header .ant-table-body>table{border-top-left-radius:0;border-top-right-radius:0}.ant-table-bordered.ant-table-fixed-header .ant-table-body-inner>table,.ant-table-bordered.ant-table-fixed-header .ant-table-header+.ant-table-body>table{border-top:0}.ant-table-bordered .ant-table-thead>tr:not(:last-child)>th{border-bottom:1px solid #e8e8e8}.ant-table-bordered .ant-table-tbody>tr>td,.ant-table-bordered .ant-table-thead>tr>th{border-right:1px solid #e8e8e8}.ant-table-placeholder{position:relative;z-index:1;margin-top:-1px;padding:16px 16px;color:rgba(0,0,0,.25);font-size:14px;text-align:center;background:#fff;border-top:1px solid #e8e8e8;border-bottom:1px solid #e8e8e8;border-radius:0 0 4px 4px}.ant-table-pagination.ant-pagination{float:right;margin:16px 0}.ant-table-filter-dropdown{position:relative;min-width:96px;margin-left:-8px;background:#fff;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-table-filter-dropdown .ant-dropdown-menu{max-height:calc(100vh - 130px);overflow-x:hidden;border:0;border-radius:4px 4px 0 0;-webkit-box-shadow:none;box-shadow:none}.ant-table-filter-dropdown .ant-dropdown-menu-item>label+span{padding-right:0}.ant-table-filter-dropdown .ant-dropdown-menu-sub{border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-table-filter-dropdown .ant-dropdown-menu .ant-dropdown-submenu-contain-selected .ant-dropdown-menu-submenu-title:after{color:#1890ff;font-weight:700;text-shadow:0 0 2px #bae7ff}.ant-table-filter-dropdown .ant-dropdown-menu-item{overflow:hidden}.ant-table-filter-dropdown>.ant-dropdown-menu>.ant-dropdown-menu-item:last-child,.ant-table-filter-dropdown>.ant-dropdown-menu>.ant-dropdown-menu-submenu:last-child .ant-dropdown-menu-submenu-title{border-radius:0}.ant-table-filter-dropdown-btns{padding:7px 8px;overflow:hidden;border-top:1px solid #e8e8e8}.ant-table-filter-dropdown-link{color:#1890ff}.ant-table-filter-dropdown-link:hover{color:#40a9ff}.ant-table-filter-dropdown-link:active{color:#096dd9}.ant-table-filter-dropdown-link.confirm{float:left}.ant-table-filter-dropdown-link.clear{float:right}.ant-table-selection{white-space:nowrap}.ant-table-selection-select-all-custom{margin-right:4px!important}.ant-table-selection .anticon-down{color:#bfbfbf;-webkit-transition:all .3s;transition:all .3s}.ant-table-selection-menu{min-width:96px;margin-top:5px;margin-left:-30px;background:#fff;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-table-selection-menu .ant-action-down{color:#bfbfbf}.ant-table-selection-down{display:inline-block;padding:0;line-height:1;cursor:pointer}.ant-table-selection-down:hover .anticon-down{color:rgba(0,0,0,.6)}.ant-table-row-expand-icon{color:#1890ff;text-decoration:none;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;display:inline-block;width:17px;height:17px;color:inherit;line-height:13px;text-align:center;background:#fff;border:1px solid #e8e8e8;border-radius:2px;outline:none;-webkit-transition:all .3s;transition:all .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-table-row-expand-icon:focus,.ant-table-row-expand-icon:hover{color:#40a9ff}.ant-table-row-expand-icon:active{color:#096dd9}.ant-table-row-expand-icon:active,.ant-table-row-expand-icon:focus,.ant-table-row-expand-icon:hover{border-color:currentColor}.ant-table-row-expanded:after{content:"-"}.ant-table-row-collapsed:after{content:"+"}.ant-table-row-spaced{visibility:hidden}.ant-table-row-spaced:after{content:"."}.ant-table-row-cell-ellipsis,.ant-table-row-cell-ellipsis .ant-table-column-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-table-row-cell-ellipsis .ant-table-column-title{display:block}.ant-table-row-cell-break-word{word-wrap:break-word;word-break:break-word}tr.ant-table-expanded-row,tr.ant-table-expanded-row:hover{background:#fbfbfb}tr.ant-table-expanded-row td>.ant-table-wrapper{margin:-16px -16px -17px}.ant-table .ant-table-row-indent+.ant-table-row-expand-icon{margin-right:8px}.ant-table-scroll{overflow:auto;overflow-x:hidden}.ant-table-scroll table{min-width:100%}.ant-table-scroll table .ant-table-fixed-columns-in-body:not([colspan]){color:transparent}.ant-table-scroll table .ant-table-fixed-columns-in-body:not([colspan])>*{visibility:hidden}.ant-table-body-inner{height:100%}.ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body{position:relative;background:#fff}.ant-table-fixed-header .ant-table-body-inner{overflow:scroll}.ant-table-fixed-header .ant-table-scroll .ant-table-header{margin-bottom:-20px;padding-bottom:20px;overflow:scroll;opacity:.9999}.ant-table-fixed-header .ant-table-scroll .ant-table-header::-webkit-scrollbar{border:1px solid #e8e8e8;border-width:0 0 1px 0}.ant-table-hide-scrollbar{scrollbar-color:transparent transparent;min-width:unset}.ant-table-hide-scrollbar::-webkit-scrollbar{min-width:inherit;background-color:transparent}.ant-table-bordered.ant-table-fixed-header .ant-table-scroll .ant-table-header::-webkit-scrollbar{border:1px solid #e8e8e8;border-width:1px 1px 1px 0}.ant-table-bordered.ant-table-fixed-header .ant-table-scroll .ant-table-header.ant-table-hide-scrollbar .ant-table-thead>tr:only-child>th:last-child{border-right-color:transparent}.ant-table-fixed-left,.ant-table-fixed-right{position:absolute;top:0;z-index:1;overflow:hidden;border-radius:0;-webkit-transition:-webkit-box-shadow .3s ease;transition:-webkit-box-shadow .3s ease;transition:box-shadow .3s ease;transition:box-shadow .3s ease,-webkit-box-shadow .3s ease}.ant-table-fixed-left table,.ant-table-fixed-right table{width:auto;background:#fff}.ant-table-fixed-header .ant-table-fixed-left .ant-table-body-outer .ant-table-fixed,.ant-table-fixed-header .ant-table-fixed-right .ant-table-body-outer .ant-table-fixed{border-radius:0}.ant-table-fixed-left{left:0;-webkit-box-shadow:6px 0 6px -4px rgba(0,0,0,.15);box-shadow:6px 0 6px -4px rgba(0,0,0,.15)}.ant-table-fixed-left .ant-table-header{overflow-y:hidden}.ant-table-fixed-left .ant-table-body-inner{margin-right:-20px;padding-right:20px}.ant-table-fixed-header .ant-table-fixed-left .ant-table-body-inner{padding-right:0}.ant-table-fixed-left,.ant-table-fixed-left table{border-radius:4px 0 0 0}.ant-table-fixed-left .ant-table-thead>tr>th:last-child{border-top-right-radius:0}.ant-table-fixed-right{right:0;-webkit-box-shadow:-6px 0 6px -4px rgba(0,0,0,.15);box-shadow:-6px 0 6px -4px rgba(0,0,0,.15)}.ant-table-fixed-right,.ant-table-fixed-right table{border-radius:0 4px 0 0}.ant-table-fixed-right .ant-table-expanded-row{color:transparent;pointer-events:none}.ant-table-fixed-right .ant-table-thead>tr>th:first-child{border-top-left-radius:0}.ant-table.ant-table-scroll-position-left .ant-table-fixed-left,.ant-table.ant-table-scroll-position-right .ant-table-fixed-right{-webkit-box-shadow:none;box-shadow:none}.ant-table colgroup>col.ant-table-selection-col{width:60px}.ant-table-thead>tr>th.ant-table-selection-column-custom .ant-table-selection{margin-right:-15px}.ant-table-tbody>tr>td.ant-table-selection-column,.ant-table-thead>tr>th.ant-table-selection-column{text-align:center}.ant-table-tbody>tr>td.ant-table-selection-column .ant-radio-wrapper,.ant-table-thead>tr>th.ant-table-selection-column .ant-radio-wrapper{margin-right:0}.ant-table-row[class*=ant-table-row-level-0] .ant-table-selection-column>span{display:inline-block}.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span,.ant-table-filter-dropdown .ant-checkbox-wrapper+span{padding-left:8px}@supports (-moz-appearance:meterbar){.ant-table-thead>tr>th.ant-table-column-has-actions{background-clip:padding-box}}.ant-table-middle>.ant-table-content>.ant-table-body>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-footer,.ant-table-middle>.ant-table-content>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-middle>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-middle>.ant-table-title{padding:12px 8px}.ant-table-middle tr.ant-table-expanded-row td>.ant-table-wrapper{margin:-12px -8px -13px}.ant-table-small{border:1px solid #e8e8e8;border-radius:4px}.ant-table-small>.ant-table-content>.ant-table-footer,.ant-table-small>.ant-table-title{padding:8px 8px}.ant-table-small>.ant-table-title{top:0;border-bottom:1px solid #e8e8e8}.ant-table-small>.ant-table-content>.ant-table-footer{background-color:transparent;border-top:1px solid #e8e8e8}.ant-table-small>.ant-table-content>.ant-table-footer:before{background-color:transparent}.ant-table-small>.ant-table-content>.ant-table-body{margin:0 8px}.ant-table-small>.ant-table-content>.ant-table-body>table,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table{border:0}.ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-tbody>tr>td,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-thead>tr>th{padding:8px 8px}.ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-header>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-thead>tr>th,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-thead>tr>th{background-color:transparent}.ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-header>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-thead>tr,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-thead>tr{border-bottom:1px solid #e8e8e8}.ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-header>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table>.ant-table-thead>tr>th.ant-table-column-sort,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table>.ant-table-thead>tr>th.ant-table-column-sort{background-color:rgba(0,0,0,.01)}.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-body-outer>.ant-table-body-inner>table,.ant-table-small>.ant-table-content>.ant-table-fixed-left>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-body-outer>.ant-table-body-inner>table,.ant-table-small>.ant-table-content>.ant-table-fixed-right>.ant-table-header>table,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-body>table,.ant-table-small>.ant-table-content>.ant-table-scroll>.ant-table-header>table{padding:0}.ant-table-small>.ant-table-content .ant-table-header{background-color:transparent;border-radius:4px 4px 0 0}.ant-table-small>.ant-table-content .ant-table-placeholder,.ant-table-small>.ant-table-content .ant-table-row:last-child td{border-bottom:0}.ant-table-small.ant-table-bordered{border-right:0}.ant-table-small.ant-table-bordered .ant-table-title{border:0;border-right:1px solid #e8e8e8;border-bottom:1px solid #e8e8e8}.ant-table-small.ant-table-bordered .ant-table-content{border-right:1px solid #e8e8e8}.ant-table-small.ant-table-bordered .ant-table-footer{border:0;border-top:1px solid #e8e8e8}.ant-table-small.ant-table-bordered .ant-table-footer:before{display:none}.ant-table-small.ant-table-bordered .ant-table-placeholder{border-right:0;border-bottom:0;border-left:0}.ant-table-small.ant-table-bordered .ant-table-tbody>tr>td:last-child,.ant-table-small.ant-table-bordered .ant-table-thead>tr>th.ant-table-row-cell-last{border-right:none}.ant-table-small.ant-table-bordered .ant-table-fixed-left .ant-table-tbody>tr>td:last-child,.ant-table-small.ant-table-bordered .ant-table-fixed-left .ant-table-thead>tr>th:last-child{border-right:1px solid #e8e8e8}.ant-table-small.ant-table-bordered .ant-table-fixed-right{border-right:1px solid #e8e8e8;border-left:1px solid #e8e8e8}.ant-table-small tr.ant-table-expanded-row td>.ant-table-wrapper{margin:-8px -8px -9px}.ant-table-small.ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body{border-radius:0 0 4px 4px}.ant-empty{margin:0 8px;font-size:14px;line-height:22px;text-align:center}.ant-empty-image{height:100px;margin-bottom:8px}.ant-empty-image img{height:100%}.ant-empty-image svg{height:100%;margin:auto}.ant-empty-description{margin:0}.ant-empty-footer{margin-top:16px}.ant-empty-normal{margin:32px 0;color:rgba(0,0,0,.25)}.ant-empty-normal .ant-empty-image{height:40px}.ant-empty-small{margin:8px 0;color:rgba(0,0,0,.25)}.ant-empty-small .ant-empty-image{height:35px}@-webkit-keyframes antCheckboxEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}@keyframes antCheckboxEffect{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.5}to{-webkit-transform:scale(1.6);transform:scale(1.6);opacity:0}}.ant-checkbox{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;top:-.09em;display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;outline:none;cursor:pointer}.ant-checkbox-input:focus+.ant-checkbox-inner,.ant-checkbox-wrapper:hover .ant-checkbox-inner,.ant-checkbox:hover .ant-checkbox-inner{border-color:#1890ff}.ant-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:2px;visibility:hidden;-webkit-animation:antCheckboxEffect .36s ease-in-out;animation:antCheckboxEffect .36s ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;content:""}.ant-checkbox-wrapper:hover .ant-checkbox:after,.ant-checkbox:hover:after{visibility:visible}.ant-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;-webkit-transition:all .3s;transition:all .3s}.ant-checkbox-inner:after{position:absolute;top:50%;left:22%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(0) translate(-50%,-50%);transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;-webkit-transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-checkbox-checked .ant-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(1) translate(-50%,-50%);transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;-webkit-transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-checkbox-checked .ant-checkbox-inner{background-color:#1890ff;border-color:#1890ff}.ant-checkbox-disabled{cursor:not-allowed}.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after{border-color:rgba(0,0,0,.25);-webkit-animation-name:none;animation-name:none}.ant-checkbox-disabled .ant-checkbox-input{cursor:not-allowed}.ant-checkbox-disabled .ant-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-checkbox-disabled .ant-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;-webkit-animation-name:none;animation-name:none}.ant-checkbox-disabled+span{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-checkbox-disabled:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox-disabled:after{visibility:hidden}.ant-checkbox-wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block;line-height:unset;cursor:pointer}.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled{cursor:not-allowed}.ant-checkbox-wrapper+.ant-checkbox-wrapper{margin-left:8px}.ant-checkbox+span{padding-right:8px;padding-left:8px}.ant-checkbox-group{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:inline-block}.ant-checkbox-group-item{display:inline-block;margin-right:8px}.ant-checkbox-group-item:last-child{margin-right:0}.ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:0}.ant-checkbox-indeterminate .ant-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-checkbox-indeterminate .ant-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#1890ff;border:0;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after{background-color:rgba(0,0,0,.25);border-color:rgba(0,0,0,.25)}.ant-spin{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;display:none;color:#1890ff;text-align:center;vertical-align:middle;opacity:0;-webkit-transition:-webkit-transform .3s cubic-bezier(.78,.14,.15,.86);transition:-webkit-transform .3s cubic-bezier(.78,.14,.15,.86);transition:transform .3s cubic-bezier(.78,.14,.15,.86);transition:transform .3s cubic-bezier(.78,.14,.15,.86),-webkit-transform .3s cubic-bezier(.78,.14,.15,.86)}.ant-spin-spinning{position:static;display:inline-block;opacity:1}.ant-spin-nested-loading{position:relative}.ant-spin-nested-loading>div>.ant-spin{position:absolute;top:0;left:0;z-index:4;display:block;width:100%;height:100%;max-height:400px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-dot{position:absolute;top:50%;left:50%;margin:-10px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-text{position:absolute;top:50%;width:100%;padding-top:5px;text-shadow:0 1px 2px #fff}.ant-spin-nested-loading>div>.ant-spin.ant-spin-show-text .ant-spin-dot{margin-top:-20px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-dot{margin:-7px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-text{padding-top:2px}.ant-spin-nested-loading>div>.ant-spin-sm.ant-spin-show-text .ant-spin-dot{margin-top:-17px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-dot{margin:-16px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-text{padding-top:11px}.ant-spin-nested-loading>div>.ant-spin-lg.ant-spin-show-text .ant-spin-dot{margin-top:-26px}.ant-spin-container{position:relative;-webkit-transition:opacity .3s;transition:opacity .3s}.ant-spin-container:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;display:none\9;width:100%;height:100%;background:#fff;opacity:0;-webkit-transition:all .3s;transition:all .3s;content:"";pointer-events:none}.ant-spin-blur{clear:both;overflow:hidden;opacity:.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.ant-spin-blur:after{opacity:.4;pointer-events:auto}.ant-spin-tip{color:rgba(0,0,0,.45)}.ant-spin-dot{position:relative;display:inline-block;font-size:20px;width:1em;height:1em}.ant-spin-dot-item{position:absolute;display:block;width:9px;height:9px;background-color:#1890ff;border-radius:100%;-webkit-transform:scale(.75);transform:scale(.75);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;opacity:.3;-webkit-animation:antSpinMove 1s linear infinite alternate;animation:antSpinMove 1s linear infinite alternate}.ant-spin-dot-item:first-child{top:0;left:0}.ant-spin-dot-item:nth-child(2){top:0;right:0;-webkit-animation-delay:.4s;animation-delay:.4s}.ant-spin-dot-item:nth-child(3){right:0;bottom:0;-webkit-animation-delay:.8s;animation-delay:.8s}.ant-spin-dot-item:nth-child(4){bottom:0;left:0;-webkit-animation-delay:1.2s;animation-delay:1.2s}.ant-spin-dot-spin{-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-animation:antRotate 1.2s linear infinite;animation:antRotate 1.2s linear infinite}.ant-spin-sm .ant-spin-dot{font-size:14px}.ant-spin-sm .ant-spin-dot i{width:6px;height:6px}.ant-spin-lg .ant-spin-dot{font-size:32px}.ant-spin-lg .ant-spin-dot i{width:14px;height:14px}.ant-spin.ant-spin-show-text .ant-spin-text{display:block}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.ant-spin-blur{background:#fff;opacity:.5}}@-webkit-keyframes antSpinMove{to{opacity:1}}@keyframes antSpinMove{to{opacity:1}}@-webkit-keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}.ant-pagination{-webkit-box-sizing:border-box;box-sizing:border-box;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.ant-pagination,.ant-pagination ol,.ant-pagination ul{margin:0;padding:0;list-style:none}.ant-pagination:after{display:block;clear:both;height:0;overflow:hidden;visibility:hidden;content:" "}.ant-pagination-item,.ant-pagination-total-text{display:inline-block;height:32px;margin-right:8px;line-height:30px;vertical-align:middle}.ant-pagination-item{min-width:32px;font-family:Arial;text-align:center;list-style:none;background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;outline:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-pagination-item a{display:block;padding:0 6px;color:rgba(0,0,0,.65);-webkit-transition:none;transition:none}.ant-pagination-item a:hover{text-decoration:none}.ant-pagination-item:focus,.ant-pagination-item:hover{border-color:#1890ff;-webkit-transition:all .3s;transition:all .3s}.ant-pagination-item:focus a,.ant-pagination-item:hover a{color:#1890ff}.ant-pagination-item-active{font-weight:500;background:#fff;border-color:#1890ff}.ant-pagination-item-active a{color:#1890ff}.ant-pagination-item-active:focus,.ant-pagination-item-active:hover{border-color:#40a9ff}.ant-pagination-item-active:focus a,.ant-pagination-item-active:hover a{color:#40a9ff}.ant-pagination-jump-next,.ant-pagination-jump-prev{outline:0}.ant-pagination-jump-next .ant-pagination-item-container,.ant-pagination-jump-prev .ant-pagination-item-container{position:relative}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon{display:inline-block;font-size:12px;font-size:12px\9;-webkit-transform:scale(1) rotate(0deg);transform:scale(1) rotate(0deg);color:#1890ff;letter-spacing:-1px;opacity:0;-webkit-transition:all .2s;transition:all .2s}:root .ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon,:root .ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon{font-size:12px}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon-svg,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon-svg{top:0;right:0;bottom:0;left:0;margin:auto}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-ellipsis,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-ellipsis{position:absolute;top:0;right:0;bottom:0;left:0;display:block;margin:auto;color:rgba(0,0,0,.25);letter-spacing:2px;text-align:center;text-indent:.13em;opacity:1;-webkit-transition:all .2s;transition:all .2s}.ant-pagination-jump-next:focus .ant-pagination-item-link-icon,.ant-pagination-jump-next:hover .ant-pagination-item-link-icon,.ant-pagination-jump-prev:focus .ant-pagination-item-link-icon,.ant-pagination-jump-prev:hover .ant-pagination-item-link-icon{opacity:1}.ant-pagination-jump-next:focus .ant-pagination-item-ellipsis,.ant-pagination-jump-next:hover .ant-pagination-item-ellipsis,.ant-pagination-jump-prev:focus .ant-pagination-item-ellipsis,.ant-pagination-jump-prev:hover .ant-pagination-item-ellipsis{opacity:0}.ant-pagination-jump-next,.ant-pagination-jump-prev,.ant-pagination-prev{margin-right:8px}.ant-pagination-jump-next,.ant-pagination-jump-prev,.ant-pagination-next,.ant-pagination-prev{display:inline-block;min-width:32px;height:32px;color:rgba(0,0,0,.65);font-family:Arial;line-height:32px;text-align:center;vertical-align:middle;list-style:none;border-radius:4px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-pagination-next,.ant-pagination-prev{outline:0}.ant-pagination-next a,.ant-pagination-prev a{color:rgba(0,0,0,.65);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-pagination-next:hover a,.ant-pagination-prev:hover a{border-color:#40a9ff}.ant-pagination-next .ant-pagination-item-link,.ant-pagination-prev .ant-pagination-item-link{display:block;height:100%;font-size:12px;text-align:center;background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;outline:none;-webkit-transition:all .3s;transition:all .3s}.ant-pagination-next:focus .ant-pagination-item-link,.ant-pagination-next:hover .ant-pagination-item-link,.ant-pagination-prev:focus .ant-pagination-item-link,.ant-pagination-prev:hover .ant-pagination-item-link{color:#1890ff;border-color:#1890ff}.ant-pagination-disabled,.ant-pagination-disabled:focus,.ant-pagination-disabled:hover{cursor:not-allowed}.ant-pagination-disabled .ant-pagination-item-link,.ant-pagination-disabled:focus .ant-pagination-item-link,.ant-pagination-disabled:focus a,.ant-pagination-disabled:hover .ant-pagination-item-link,.ant-pagination-disabled:hover a,.ant-pagination-disabled a{color:rgba(0,0,0,.25);border-color:#d9d9d9;cursor:not-allowed}.ant-pagination-slash{margin:0 10px 0 5px}.ant-pagination-options{display:inline-block;margin-left:16px;vertical-align:middle}.ant-pagination-options-size-changer.ant-select{display:inline-block;width:auto;margin-right:8px}.ant-pagination-options-quick-jumper{display:inline-block;height:32px;line-height:32px;vertical-align:top}.ant-pagination-options-quick-jumper input{position:relative;display:inline-block;width:100%;height:32px;padding:4px 11px;color:rgba(0,0,0,.65);font-size:14px;line-height:1.5;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:4px;-webkit-transition:all .3s;transition:all .3s;width:50px;margin:0 8px}.ant-pagination-options-quick-jumper input::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-pagination-options-quick-jumper input:-ms-input-placeholder{color:#bfbfbf}.ant-pagination-options-quick-jumper input::-webkit-input-placeholder{color:#bfbfbf}.ant-pagination-options-quick-jumper input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:-ms-input-placeholder{text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:placeholder-shown{text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:focus,.ant-pagination-options-quick-jumper input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-pagination-options-quick-jumper input:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-pagination-options-quick-jumper input-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-pagination-options-quick-jumper input-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-pagination-options-quick-jumper input[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-pagination-options-quick-jumper input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}textarea.ant-pagination-options-quick-jumper input{max-width:100%;height:auto;min-height:32px;line-height:1.5;vertical-align:bottom;-webkit-transition:all .3s,height 0s;transition:all .3s,height 0s}.ant-pagination-options-quick-jumper input-lg{height:40px;padding:6px 11px;font-size:16px}.ant-pagination-options-quick-jumper input-sm{height:24px;padding:1px 7px}.ant-pagination-simple .ant-pagination-next,.ant-pagination-simple .ant-pagination-prev{height:24px;line-height:24px;vertical-align:top}.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link,.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link{height:24px;border:0}.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link:after,.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link:after{height:24px;line-height:24px}.ant-pagination-simple .ant-pagination-simple-pager{display:inline-block;height:24px;margin-right:8px}.ant-pagination-simple .ant-pagination-simple-pager input{-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;margin-right:8px;padding:0 6px;text-align:center;background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;outline:none;-webkit-transition:border-color .3s;transition:border-color .3s}.ant-pagination-simple .ant-pagination-simple-pager input:hover{border-color:#1890ff}.ant-pagination.mini .ant-pagination-simple-pager,.ant-pagination.mini .ant-pagination-total-text{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-item{min-width:24px;height:24px;margin:0;line-height:22px}.ant-pagination.mini .ant-pagination-item:not(.ant-pagination-item-active){background:transparent;border-color:transparent}.ant-pagination.mini .ant-pagination-next,.ant-pagination.mini .ant-pagination-prev{min-width:24px;height:24px;margin:0;line-height:24px}.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link,.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link{background:transparent;border-color:transparent}.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link:after,.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link:after{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-jump-next,.ant-pagination.mini .ant-pagination-jump-prev{height:24px;margin-right:0;line-height:24px}.ant-pagination.mini .ant-pagination-options{margin-left:2px}.ant-pagination.mini .ant-pagination-options-quick-jumper{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-options-quick-jumper input{height:24px;padding:1px 7px;width:44px}.ant-pagination.ant-pagination-disabled{cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item{background:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item a{color:rgba(0,0,0,.25);background:transparent;border:none;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active{background:#dbdbdb;border-color:transparent}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active a{color:#fff}.ant-pagination.ant-pagination-disabled .ant-pagination-item-link,.ant-pagination.ant-pagination-disabled .ant-pagination-item-link:focus,.ant-pagination.ant-pagination-disabled .ant-pagination-item-link:hover{color:rgba(0,0,0,.45);background:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-jump-next:focus .ant-pagination-item-link-icon,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-next:hover .ant-pagination-item-link-icon,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-prev:focus .ant-pagination-item-link-icon,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-prev:hover .ant-pagination-item-link-icon{opacity:0}.ant-pagination.ant-pagination-disabled .ant-pagination-jump-next:focus .ant-pagination-item-ellipsis,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-next:hover .ant-pagination-item-ellipsis,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-prev:focus .ant-pagination-item-ellipsis,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-prev:hover .ant-pagination-item-ellipsis{opacity:1}@media only screen and (max-width:992px){.ant-pagination-item-after-jump-prev,.ant-pagination-item-before-jump-next{display:none}}@media only screen and (max-width:576px){.ant-pagination-options{display:none}}.ant-select{-webkit-box-sizing:border-box;box-sizing:border-box;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;outline:0}.ant-select,.ant-select ol,.ant-select ul{margin:0;padding:0;list-style:none}.ant-select>ul>li>a{padding:0;background-color:#fff}.ant-select-arrow{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:50%;right:11px;margin-top:-6px;color:rgba(0,0,0,.25);font-size:12px;line-height:1;-webkit-transform-origin:50% 50%;transform-origin:50% 50%}.ant-select-arrow>*{line-height:1}.ant-select-arrow svg{display:inline-block}.ant-select-arrow:before{display:none}.ant-select-arrow .ant-select-arrow-icon{display:block}.ant-select-arrow .ant-select-arrow-icon svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ant-select-selection{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;border:1px solid #d9d9d9;border-top-width:1.02px;border-radius:4px;outline:none;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-select-selection:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-select-focused .ant-select-selection,.ant-select-selection:active,.ant-select-selection:focus{border-color:#40a9ff;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-select-selection__clear{position:absolute;top:50%;right:11px;z-index:1;display:inline-block;width:12px;height:12px;margin-top:-6px;color:rgba(0,0,0,.25);font-size:12px;font-style:normal;line-height:12px;text-align:center;text-transform:none;background:#fff;cursor:pointer;opacity:0;-webkit-transition:color .3s ease,opacity .15s ease;transition:color .3s ease,opacity .15s ease;text-rendering:auto}.ant-select-selection__clear:before{display:block}.ant-select-selection__clear:hover{color:rgba(0,0,0,.45)}.ant-select-selection:hover .ant-select-selection__clear{opacity:1}.ant-select-selection-selected-value{float:left;max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-select-no-arrow .ant-select-selection-selected-value{padding-right:0}.ant-select-disabled{color:rgba(0,0,0,.25)}.ant-select-disabled .ant-select-selection{background:#f5f5f5;cursor:not-allowed}.ant-select-disabled .ant-select-selection:active,.ant-select-disabled .ant-select-selection:focus,.ant-select-disabled .ant-select-selection:hover{border-color:#d9d9d9;-webkit-box-shadow:none;box-shadow:none}.ant-select-disabled .ant-select-selection__clear{display:none;visibility:hidden;pointer-events:none}.ant-select-disabled .ant-select-selection--multiple .ant-select-selection__choice{padding-right:10px;color:rgba(0,0,0,.33);background:#f5f5f5}.ant-select-disabled .ant-select-selection--multiple .ant-select-selection__choice__remove{display:none}.ant-select-selection--single{position:relative;height:32px;cursor:pointer}.ant-select-selection--single .ant-select-selection__rendered{margin-right:24px}.ant-select-no-arrow .ant-select-selection__rendered{margin-right:11px}.ant-select-selection__rendered{position:relative;display:block;margin-right:11px;margin-left:11px;line-height:30px}.ant-select-selection__rendered:after{display:inline-block;width:0;visibility:hidden;content:".";pointer-events:none}.ant-select-lg{font-size:16px}.ant-select-lg .ant-select-selection--single{height:40px}.ant-select-lg .ant-select-selection__rendered{line-height:38px}.ant-select-lg .ant-select-selection--multiple{min-height:40px}.ant-select-lg .ant-select-selection--multiple .ant-select-selection__rendered li{height:32px;line-height:32px}.ant-select-lg .ant-select-selection--multiple .ant-select-arrow,.ant-select-lg .ant-select-selection--multiple .ant-select-selection__clear{top:20px}.ant-select-sm .ant-select-selection--single{height:24px}.ant-select-sm .ant-select-selection__rendered{margin-left:7px;line-height:22px}.ant-select-sm .ant-select-selection--multiple{min-height:24px}.ant-select-sm .ant-select-selection--multiple .ant-select-selection__rendered li{height:16px;line-height:14px}.ant-select-sm .ant-select-selection--multiple .ant-select-arrow,.ant-select-sm .ant-select-selection--multiple .ant-select-selection__clear{top:12px}.ant-select-sm .ant-select-arrow,.ant-select-sm .ant-select-selection__clear{right:8px}.ant-select-disabled .ant-select-selection__choice__remove{color:rgba(0,0,0,.25);cursor:default}.ant-select-disabled .ant-select-selection__choice__remove:hover{color:rgba(0,0,0,.25)}.ant-select-search__field__wrap{position:relative;display:inline-block}.ant-select-search__field__placeholder,.ant-select-selection__placeholder{position:absolute;top:50%;right:9px;left:0;max-width:100%;height:20px;margin-top:-10px;overflow:hidden;color:#bfbfbf;line-height:20px;white-space:nowrap;text-align:left;text-overflow:ellipsis}.ant-select-search__field__placeholder{left:12px}.ant-select-search__field__mirror{position:absolute;top:0;left:0;white-space:pre;opacity:0;pointer-events:none}.ant-select-search--inline{position:absolute;width:100%;height:100%}.ant-select-search--inline .ant-select-search__field__wrap{width:100%;height:100%}.ant-select-search--inline .ant-select-search__field{width:100%;height:100%;font-size:100%;line-height:1;background:transparent;border-width:0;border-radius:4px;outline:0}.ant-select-search--inline>i{float:right}.ant-select-selection--multiple{min-height:32px;padding-bottom:3px;cursor:text;zoom:1}.ant-select-selection--multiple:after,.ant-select-selection--multiple:before{display:table;content:""}.ant-select-selection--multiple:after{clear:both}.ant-select-selection--multiple .ant-select-search--inline{position:static;float:left;width:auto;max-width:100%;padding:0}.ant-select-selection--multiple .ant-select-search--inline .ant-select-search__field{width:.75em;max-width:100%;padding:1px}.ant-select-selection--multiple .ant-select-selection__rendered{height:auto;margin-bottom:-3px;margin-left:5px}.ant-select-selection--multiple .ant-select-selection__placeholder{margin-left:6px}.ant-select-selection--multiple .ant-select-selection__rendered>ul>li,.ant-select-selection--multiple>ul>li{height:24px;margin-top:3px;line-height:22px}.ant-select-selection--multiple .ant-select-selection__choice{position:relative;float:left;max-width:99%;margin-right:4px;padding:0 20px 0 10px;overflow:hidden;color:rgba(0,0,0,.65);background-color:#fafafa;border:1px solid #e8e8e8;border-radius:2px;cursor:default;-webkit-transition:padding .3s cubic-bezier(.645,.045,.355,1);transition:padding .3s cubic-bezier(.645,.045,.355,1)}.ant-select-selection--multiple .ant-select-selection__choice__disabled{padding:0 10px}.ant-select-selection--multiple .ant-select-selection__choice__content{display:inline-block;max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-transition:margin .3s cubic-bezier(.645,.045,.355,1);transition:margin .3s cubic-bezier(.645,.045,.355,1)}.ant-select-selection--multiple .ant-select-selection__choice__remove{color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;right:4px;color:rgba(0,0,0,.45);font-weight:700;line-height:inherit;cursor:pointer;-webkit-transition:all .3s;transition:all .3s;display:inline-block;font-size:12px;font-size:10px\9;-webkit-transform:scale(.83333333) rotate(0deg);transform:scale(.83333333) rotate(0deg)}.ant-select-selection--multiple .ant-select-selection__choice__remove>*{line-height:1}.ant-select-selection--multiple .ant-select-selection__choice__remove svg{display:inline-block}.ant-select-selection--multiple .ant-select-selection__choice__remove:before{display:none}.ant-select-selection--multiple .ant-select-selection__choice__remove .ant-select-selection--multiple .ant-select-selection__choice__remove-icon{display:block}:root .ant-select-selection--multiple .ant-select-selection__choice__remove{font-size:12px}.ant-select-selection--multiple .ant-select-selection__choice__remove:hover{color:rgba(0,0,0,.75)}.ant-select-selection--multiple .ant-select-arrow,.ant-select-selection--multiple .ant-select-selection__clear{top:16px}.ant-select-allow-clear .ant-select-selection--multiple .ant-select-selection__rendered,.ant-select-show-arrow .ant-select-selection--multiple .ant-select-selection__rendered{margin-right:20px}.ant-select-open .ant-select-arrow-icon svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.ant-select-open .ant-select-selection{border-color:#40a9ff;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-select-combobox .ant-select-arrow{display:none}.ant-select-combobox .ant-select-search--inline{float:none;width:100%;height:100%}.ant-select-combobox .ant-select-search__field__wrap{width:100%;height:100%}.ant-select-combobox .ant-select-search__field{position:relative;z-index:1;width:100%;height:100%;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1),height 0s;transition:all .3s cubic-bezier(.645,.045,.355,1),height 0s}.ant-select-combobox.ant-select-allow-clear .ant-select-selection:hover .ant-select-selection__rendered,.ant-select-combobox.ant-select-show-arrow .ant-select-selection:hover .ant-select-selection__rendered{margin-right:20px}.ant-select-dropdown{margin:0;padding:0;color:rgba(0,0,0,.65);font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:14px;font-variant:normal;background-color:#fff;border-radius:4px;outline:none;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-select-dropdown.slide-up-appear.slide-up-appear-active.ant-select-dropdown-placement-bottomLeft,.ant-select-dropdown.slide-up-enter.slide-up-enter-active.ant-select-dropdown-placement-bottomLeft{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn}.ant-select-dropdown.slide-up-appear.slide-up-appear-active.ant-select-dropdown-placement-topLeft,.ant-select-dropdown.slide-up-enter.slide-up-enter-active.ant-select-dropdown-placement-topLeft{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn}.ant-select-dropdown.slide-up-leave.slide-up-leave-active.ant-select-dropdown-placement-bottomLeft{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut}.ant-select-dropdown.slide-up-leave.slide-up-leave-active.ant-select-dropdown-placement-topLeft{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut}.ant-select-dropdown-hidden{display:none}.ant-select-dropdown-menu{max-height:250px;margin-bottom:0;padding:4px 0;padding-left:0;overflow:auto;list-style:none;outline:none}.ant-select-dropdown-menu-item-group-list{margin:0;padding:0}.ant-select-dropdown-menu-item-group-list>.ant-select-dropdown-menu-item{padding-left:20px}.ant-select-dropdown-menu-item-group-title{height:32px;padding:0 12px;color:rgba(0,0,0,.45);font-size:12px;line-height:32px}.ant-select-dropdown-menu-item-group-list .ant-select-dropdown-menu-item:first-child:not(:last-child),.ant-select-dropdown-menu-item-group:not(:last-child) .ant-select-dropdown-menu-item-group-list .ant-select-dropdown-menu-item:last-child{border-radius:0}.ant-select-dropdown-menu-item{position:relative;display:block;padding:5px 12px;overflow:hidden;color:rgba(0,0,0,.65);font-weight:400;font-size:14px;line-height:22px;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;-webkit-transition:background .3s ease;transition:background .3s ease}.ant-select-dropdown-menu-item:hover:not(.ant-select-dropdown-menu-item-disabled){background-color:#e6f7ff}.ant-select-dropdown-menu-item-selected{color:rgba(0,0,0,.65);font-weight:600;background-color:#fafafa}.ant-select-dropdown-menu-item-disabled,.ant-select-dropdown-menu-item-disabled:hover{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-select-dropdown-menu-item-active:not(.ant-select-dropdown-menu-item-disabled){background-color:#e6f7ff}.ant-select-dropdown-menu-item-divider{height:1px;margin:1px 0;overflow:hidden;line-height:0;background-color:#e8e8e8}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item{padding-right:32px}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item .ant-select-selected-icon{position:absolute;top:50%;right:12px;color:transparent;font-weight:700;font-size:12px;text-shadow:0 .1px 0,.1px 0 0,0 -.1px 0,-.1px 0;-webkit-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:all .2s;transition:all .2s}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item:hover .ant-select-selected-icon{color:rgba(0,0,0,.87)}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-disabled .ant-select-selected-icon{display:none}.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-selected .ant-select-selected-icon,.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-selected:hover .ant-select-selected-icon{display:inline-block;color:#1890ff}.ant-select-dropdown--empty.ant-select-dropdown--multiple .ant-select-dropdown-menu-item{padding-right:12px}.ant-select-dropdown-container-open .ant-select-dropdown,.ant-select-dropdown-open .ant-select-dropdown{display:block}.ant-input{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;font-variant:tabular-nums;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;width:100%;height:32px;padding:4px 11px;color:rgba(0,0,0,.65);font-size:14px;line-height:1.5;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:4px;-webkit-transition:all .3s;transition:all .3s}.ant-input::-moz-placeholder{color:#bfbfbf;opacity:1}.ant-input:-ms-input-placeholder{color:#bfbfbf}.ant-input::-webkit-input-placeholder{color:#bfbfbf}.ant-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input:-ms-input-placeholder{text-overflow:ellipsis}.ant-input:placeholder-shown{text-overflow:ellipsis}.ant-input:focus,.ant-input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-input:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-input-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-input-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}textarea.ant-input{max-width:100%;height:auto;min-height:32px;line-height:1.5;vertical-align:bottom;-webkit-transition:all .3s,height 0s;transition:all .3s,height 0s}.ant-input-lg{height:40px;padding:6px 11px;font-size:16px}.ant-input-sm{height:24px;padding:1px 7px}.ant-input-group{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:table;width:100%;border-collapse:separate;border-spacing:0}.ant-input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.ant-input-group>[class*=col-]{padding-right:8px}.ant-input-group>[class*=col-]:last-child{padding-right:0}.ant-input-group-addon,.ant-input-group-wrap,.ant-input-group>.ant-input{display:table-cell}.ant-input-group-addon:not(:first-child):not(:last-child),.ant-input-group-wrap:not(:first-child):not(:last-child),.ant-input-group>.ant-input:not(:first-child):not(:last-child){border-radius:0}.ant-input-group-addon,.ant-input-group-wrap{width:1px;white-space:nowrap;vertical-align:middle}.ant-input-group-wrap>*{display:block!important}.ant-input-group .ant-input{float:left;width:100%;margin-bottom:0;text-align:inherit}.ant-input-group .ant-input:focus,.ant-input-group .ant-input:hover{z-index:1;border-right-width:1px}.ant-input-group-addon{position:relative;padding:0 11px;color:rgba(0,0,0,.65);font-weight:400;font-size:14px;text-align:center;background-color:#fafafa;border:1px solid #d9d9d9;border-radius:4px;-webkit-transition:all .3s;transition:all .3s}.ant-input-group-addon .ant-select{margin:-5px -11px}.ant-input-group-addon .ant-select .ant-select-selection{margin:-1px;background-color:inherit;border:1px solid transparent;-webkit-box-shadow:none;box-shadow:none}.ant-input-group-addon .ant-select-focused .ant-select-selection,.ant-input-group-addon .ant-select-open .ant-select-selection{color:#1890ff}.ant-input-group-addon>i:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;content:""}.ant-input-group-addon:first-child,.ant-input-group-addon:first-child .ant-select .ant-select-selection,.ant-input-group>.ant-input:first-child,.ant-input-group>.ant-input:first-child .ant-select .ant-select-selection{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:first-child) .ant-input{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:last-child) .ant-input{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group-addon:first-child{border-right:0}.ant-input-group-addon:last-child{border-left:0}.ant-input-group-addon:last-child,.ant-input-group-addon:last-child .ant-select .ant-select-selection,.ant-input-group>.ant-input:last-child,.ant-input-group>.ant-input:last-child .ant-select .ant-select-selection{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group-lg .ant-input,.ant-input-group-lg>.ant-input-group-addon{height:40px;padding:6px 11px;font-size:16px}.ant-input-group-sm .ant-input,.ant-input-group-sm>.ant-input-group-addon{height:24px;padding:1px 7px}.ant-input-group-lg .ant-select-selection--single{height:40px}.ant-input-group-sm .ant-select-selection--single{height:24px}.ant-input-group .ant-input-affix-wrapper{display:table-cell;float:left;width:100%}.ant-input-group.ant-input-group-compact{display:block;zoom:1}.ant-input-group.ant-input-group-compact:after,.ant-input-group.ant-input-group-compact:before{display:table;content:""}.ant-input-group.ant-input-group-compact:after{clear:both}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child){border-right-width:1px}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):hover{z-index:1}.ant-input-group.ant-input-group-compact>*{display:inline-block;float:none;vertical-align:top;border-radius:0}.ant-input-group.ant-input-group-compact>:not(:last-child){margin-right:-1px;border-right-width:1px}.ant-input-group.ant-input-group-compact .ant-input{float:none}.ant-input-group.ant-input-group-compact>.ant-calendar-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selection,.ant-input-group.ant-input-group-compact>.ant-time-picker .ant-time-picker-input{border-right-width:1px;border-radius:0}.ant-input-group.ant-input-group-compact>.ant-calendar-picker .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-calendar-picker .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper .ant-mention-editor:focus,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper .ant-mention-editor:hover,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-select-focused,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selection:focus,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selection:hover,.ant-input-group.ant-input-group-compact>.ant-time-picker .ant-time-picker-input:focus,.ant-input-group.ant-input-group-compact>.ant-time-picker .ant-time-picker-input:hover{z-index:1}.ant-input-group.ant-input-group-compact>.ant-calendar-picker:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper:first-child .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selection,.ant-input-group.ant-input-group-compact>.ant-time-picker:first-child .ant-time-picker-input,.ant-input-group.ant-input-group-compact>:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-input-group.ant-input-group-compact>.ant-calendar-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker-focused:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper:last-child .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selection,.ant-input-group.ant-input-group-compact>.ant-time-picker:last-child .ant-time-picker-input,.ant-input-group.ant-input-group-compact>:last-child{border-right-width:1px;border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input{vertical-align:top}.ant-input-group-wrapper{display:inline-block;width:100%;text-align:start;vertical-align:top}.ant-input-affix-wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;width:100%;text-align:start}.ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled){border-color:#40a9ff;border-right-width:1px!important}.ant-input-affix-wrapper .ant-input{position:relative;text-align:inherit}.ant-input-affix-wrapper .ant-input-prefix,.ant-input-affix-wrapper .ant-input-suffix{position:absolute;top:50%;z-index:2;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:rgba(0,0,0,.65);line-height:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ant-input-affix-wrapper .ant-input-prefix :not(.anticon),.ant-input-affix-wrapper .ant-input-suffix :not(.anticon){line-height:1.5}.ant-input-affix-wrapper .ant-input-disabled~.ant-input-suffix .anticon{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-input-affix-wrapper .ant-input-prefix{left:12px}.ant-input-affix-wrapper .ant-input-suffix{right:12px}.ant-input-affix-wrapper .ant-input:not(:first-child){padding-left:30px}.ant-input-affix-wrapper .ant-input:not(:last-child){padding-right:30px}.ant-input-affix-wrapper.ant-input-affix-wrapper-input-with-clear-btn .ant-input:not(:last-child){padding-right:49px}.ant-input-affix-wrapper.ant-input-affix-wrapper-textarea-with-clear-btn .ant-input{padding-right:22px}.ant-input-password-icon{color:rgba(0,0,0,.45);cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-input-password-icon:hover{color:#333}.ant-input-clear-icon{color:rgba(0,0,0,.25);font-size:12px;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;vertical-align:0}.ant-input-clear-icon:hover{color:rgba(0,0,0,.45)}.ant-input-clear-icon:active{color:rgba(0,0,0,.65)}.ant-input-clear-icon+i{margin-left:6px}.ant-input-textarea-clear-icon{color:rgba(0,0,0,.25);font-size:12px;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;position:absolute;top:0;right:0;margin:8px 8px 0 0}.ant-input-textarea-clear-icon:hover{color:rgba(0,0,0,.45)}.ant-input-textarea-clear-icon:active{color:rgba(0,0,0,.65)}.ant-input-textarea-clear-icon+i{margin-left:6px}.ant-input-search-icon{color:rgba(0,0,0,.45);cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-input-search-icon:hover{color:rgba(0,0,0,.8)}.ant-input-search-enter-button input{border-right:0}.ant-input-search-enter-button+.ant-input-group-addon,.ant-input-search-enter-button input+.ant-input-group-addon{padding:0;border:0}.ant-input-search-enter-button+.ant-input-group-addon .ant-input-search-button,.ant-input-search-enter-button input+.ant-input-group-addon .ant-input-search-button{border-top-left-radius:0;border-bottom-left-radius:0}.ant-menu{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;font-size:14px;font-variant:tabular-nums;line-height:1.5;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";margin-bottom:0;padding-left:0;color:rgba(0,0,0,.65);line-height:0;list-style:none;background:#fff;outline:none;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15);-webkit-transition:background .3s,width .3s cubic-bezier(.2,0,0,1) 0s;transition:background .3s,width .3s cubic-bezier(.2,0,0,1) 0s;zoom:1}.ant-menu:after,.ant-menu:before{display:table;content:""}.ant-menu:after{clear:both}.ant-menu ol,.ant-menu ul{margin:0;padding:0;list-style:none}.ant-menu-hidden{display:none}.ant-menu-item-group-title{padding:8px 16px;color:rgba(0,0,0,.45);font-size:14px;line-height:1.5;-webkit-transition:all .3s;transition:all .3s}.ant-menu-submenu,.ant-menu-submenu-inline{-webkit-transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1);transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-selected{color:#1890ff}.ant-menu-item:active,.ant-menu-submenu-title:active{background:#e6f7ff}.ant-menu-submenu .ant-menu-sub{cursor:auto;-webkit-transition:background .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:background .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item>a{display:block;color:rgba(0,0,0,.65)}.ant-menu-item>a:hover{color:#1890ff}.ant-menu-item>a:before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:transparent;content:""}.ant-menu-item>.ant-badge>a{color:rgba(0,0,0,.65)}.ant-menu-item>.ant-badge>a:hover{color:#1890ff}.ant-menu-item-divider{height:1px;overflow:hidden;line-height:0;background-color:#e8e8e8}.ant-menu-item-active,.ant-menu-item:hover,.ant-menu-submenu-active,.ant-menu-submenu-title:hover,.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open{color:#1890ff}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu{margin-top:-1px}.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-submenu .ant-menu-submenu-title:hover{background-color:transparent}.ant-menu-item-selected,.ant-menu-item-selected>a,.ant-menu-item-selected>a:hover{color:#1890ff}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:#e6f7ff}.ant-menu-inline,.ant-menu-vertical,.ant-menu-vertical-left{border-right:1px solid #e8e8e8}.ant-menu-vertical-right{border-left:1px solid #e8e8e8}.ant-menu-vertical-left.ant-menu-sub,.ant-menu-vertical-right.ant-menu-sub,.ant-menu-vertical.ant-menu-sub{min-width:160px;padding:0;border-right:0;-webkit-transform-origin:0 0;transform-origin:0 0}.ant-menu-vertical-left.ant-menu-sub .ant-menu-item,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item,.ant-menu-vertical.ant-menu-sub .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-vertical-left.ant-menu-sub .ant-menu-item:after,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item:after,.ant-menu-vertical.ant-menu-sub .ant-menu-item:after{border-right:0}.ant-menu-vertical-left.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-left.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical.ant-menu-sub>.ant-menu-item,.ant-menu-vertical.ant-menu-sub>.ant-menu-submenu{-webkit-transform-origin:0 0;transform-origin:0 0}.ant-menu-horizontal.ant-menu-sub{min-width:114px}.ant-menu-item,.ant-menu-submenu-title{position:relative;display:block;margin:0;padding:0 20px;white-space:nowrap;cursor:pointer;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-item .anticon,.ant-menu-submenu-title .anticon{min-width:14px;margin-right:10px;font-size:14px;-webkit-transition:font-size .15s cubic-bezier(.215,.61,.355,1),margin .3s cubic-bezier(.645,.045,.355,1);transition:font-size .15s cubic-bezier(.215,.61,.355,1),margin .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item .anticon+span,.ant-menu-submenu-title .anticon+span{opacity:1;-webkit-transition:opacity .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1);transition:opacity .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1)}.ant-menu>.ant-menu-item-divider{height:1px;margin:1px 0;padding:0;overflow:hidden;line-height:0;background-color:#e8e8e8}.ant-menu-submenu-popup{position:absolute;z-index:1050;border-radius:4px}.ant-menu-submenu-popup .submenu-title-wrapper{padding-right:20px}.ant-menu-submenu-popup:before{position:absolute;top:-7px;right:0;bottom:0;left:0;opacity:.0001;content:" "}.ant-menu-submenu>.ant-menu{background-color:#fff;border-radius:4px}.ant-menu-submenu>.ant-menu-submenu-title:after{-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow{position:absolute;top:50%;right:16px;width:10px;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{position:absolute;width:6px;height:1.5px;background:#fff;background:rgba(0,0,0,.65)\9;background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.65)),to(rgba(0,0,0,.65)));background-image:linear-gradient(90deg,rgba(0,0,0,.65),rgba(0,0,0,.65));background-image:none\9;border-radius:2px;-webkit-transition:background .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:background .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:background .3s cubic-bezier(.645,.045,.355,1),transform .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1);transition:background .3s cubic-bezier(.645,.045,.355,1),transform .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);content:""}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{-webkit-transform:rotate(45deg) translateY(-2px);transform:rotate(45deg) translateY(-2px)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:after{-webkit-transform:rotate(-45deg) translateY(2px);transform:rotate(-45deg) translateY(2px)}.ant-menu-submenu-inline>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after,.ant-menu-submenu-inline>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before,.ant-menu-submenu-vertical>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after,.ant-menu-submenu-vertical>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before{background:-webkit-gradient(linear,left top,right top,from(#1890ff),to(#1890ff));background:linear-gradient(90deg,#1890ff,#1890ff)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{-webkit-transform:rotate(-45deg) translateX(2px);transform:rotate(-45deg) translateX(2px)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:after{-webkit-transform:rotate(45deg) translateX(-2px);transform:rotate(45deg) translateX(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow{-webkit-transform:translateY(-2px);transform:translateY(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:after{-webkit-transform:rotate(-45deg) translateX(-2px);transform:rotate(-45deg) translateX(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{-webkit-transform:rotate(45deg) translateX(2px);transform:rotate(45deg) translateX(2px)}.ant-menu-vertical-left .ant-menu-submenu-selected,.ant-menu-vertical-left .ant-menu-submenu-selected>a,.ant-menu-vertical-right .ant-menu-submenu-selected,.ant-menu-vertical-right .ant-menu-submenu-selected>a,.ant-menu-vertical .ant-menu-submenu-selected,.ant-menu-vertical .ant-menu-submenu-selected>a{color:#1890ff}.ant-menu-horizontal{line-height:46px;white-space:nowrap;border:0;border-bottom:1px solid #e8e8e8;-webkit-box-shadow:none;box-shadow:none}.ant-menu-horizontal>.ant-menu-item,.ant-menu-horizontal>.ant-menu-submenu{position:relative;top:1px;display:inline-block;vertical-align:bottom;border-bottom:2px solid transparent}.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-item-open,.ant-menu-horizontal>.ant-menu-item-selected,.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-submenu-active,.ant-menu-horizontal>.ant-menu-submenu-open,.ant-menu-horizontal>.ant-menu-submenu-selected,.ant-menu-horizontal>.ant-menu-submenu:hover{color:#1890ff;border-bottom:2px solid #1890ff}.ant-menu-horizontal>.ant-menu-item>a{display:block;color:rgba(0,0,0,.65)}.ant-menu-horizontal>.ant-menu-item>a:hover{color:#1890ff}.ant-menu-horizontal>.ant-menu-item>a:before{bottom:-2px}.ant-menu-horizontal>.ant-menu-item-selected>a{color:#1890ff}.ant-menu-horizontal:after{display:block;clear:both;height:0;content:"\20"}.ant-menu-inline .ant-menu-item,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-right .ant-menu-item,.ant-menu-vertical .ant-menu-item{position:relative}.ant-menu-inline .ant-menu-item:after,.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-vertical .ant-menu-item:after{position:absolute;top:0;right:0;bottom:0;border-right:3px solid #1890ff;-webkit-transform:scaleY(.0001);transform:scaleY(.0001);opacity:0;-webkit-transition:opacity .15s cubic-bezier(.215,.61,.355,1),-webkit-transform .15s cubic-bezier(.215,.61,.355,1);transition:opacity .15s cubic-bezier(.215,.61,.355,1),-webkit-transform .15s cubic-bezier(.215,.61,.355,1);transition:transform .15s cubic-bezier(.215,.61,.355,1),opacity .15s cubic-bezier(.215,.61,.355,1);transition:transform .15s cubic-bezier(.215,.61,.355,1),opacity .15s cubic-bezier(.215,.61,.355,1),-webkit-transform .15s cubic-bezier(.215,.61,.355,1);content:""}.ant-menu-inline .ant-menu-item,.ant-menu-inline .ant-menu-submenu-title,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-left .ant-menu-submenu-title,.ant-menu-vertical-right .ant-menu-item,.ant-menu-vertical-right .ant-menu-submenu-title,.ant-menu-vertical .ant-menu-item,.ant-menu-vertical .ant-menu-submenu-title{height:40px;margin-top:4px;margin-bottom:4px;padding:0 16px;overflow:hidden;font-size:14px;line-height:40px;text-overflow:ellipsis}.ant-menu-inline .ant-menu-submenu,.ant-menu-vertical-left .ant-menu-submenu,.ant-menu-vertical-right .ant-menu-submenu,.ant-menu-vertical .ant-menu-submenu{padding-bottom:.02px}.ant-menu-inline .ant-menu-item:not(:last-child),.ant-menu-vertical-left .ant-menu-item:not(:last-child),.ant-menu-vertical-right .ant-menu-item:not(:last-child),.ant-menu-vertical .ant-menu-item:not(:last-child){margin-bottom:8px}.ant-menu-inline>.ant-menu-item,.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-left>.ant-menu-item,.ant-menu-vertical-left>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-right>.ant-menu-item,.ant-menu-vertical-right>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical>.ant-menu-item,.ant-menu-vertical>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px}.ant-menu-inline{width:100%}.ant-menu-inline .ant-menu-item-selected:after,.ant-menu-inline .ant-menu-selected:after{-webkit-transform:scaleY(1);transform:scaleY(1);opacity:1;-webkit-transition:opacity .15s cubic-bezier(.645,.045,.355,1),-webkit-transform .15s cubic-bezier(.645,.045,.355,1);transition:opacity .15s cubic-bezier(.645,.045,.355,1),-webkit-transform .15s cubic-bezier(.645,.045,.355,1);transition:transform .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1);transition:transform .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1),-webkit-transform .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-inline .ant-menu-item,.ant-menu-inline .ant-menu-submenu-title{width:calc(100% + 1px)}.ant-menu-inline .ant-menu-submenu-title{padding-right:34px}.ant-menu-inline-collapsed{width:80px}.ant-menu-inline-collapsed>.ant-menu-item,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title{left:0;padding:0 32px!important;text-overflow:clip}.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow{display:none}.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon,.ant-menu-inline-collapsed>.ant-menu-item .anticon,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon{margin:0;font-size:16px;line-height:40px}.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon+span,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span,.ant-menu-inline-collapsed>.ant-menu-item .anticon+span,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span{display:inline-block;max-width:0;opacity:0}.ant-menu-inline-collapsed-tooltip{pointer-events:none}.ant-menu-inline-collapsed-tooltip .anticon{display:none}.ant-menu-inline-collapsed-tooltip a{color:hsla(0,0%,100%,.85)}.ant-menu-inline-collapsed .ant-menu-item-group-title{padding-right:4px;padding-left:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-menu-item-group-list{margin:0;padding:0}.ant-menu-item-group-list .ant-menu-item,.ant-menu-item-group-list .ant-menu-submenu-title{padding:0 16px 0 28px}.ant-menu-root.ant-menu-inline,.ant-menu-root.ant-menu-vertical,.ant-menu-root.ant-menu-vertical-left,.ant-menu-root.ant-menu-vertical-right,.ant-menu-sub.ant-menu-inline{-webkit-box-shadow:none;box-shadow:none}.ant-menu-sub.ant-menu-inline{padding:0;border:0;border-radius:0}.ant-menu-sub.ant-menu-inline>.ant-menu-item,.ant-menu-sub.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px;list-style-position:inside;list-style-type:disc}.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title{padding-left:32px}.ant-menu-item-disabled,.ant-menu-submenu-disabled{color:rgba(0,0,0,.25)!important;background:none;border-color:transparent!important;cursor:not-allowed}.ant-menu-item-disabled>a,.ant-menu-submenu-disabled>a{color:rgba(0,0,0,.25)!important;pointer-events:none}.ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-submenu-disabled>.ant-menu-submenu-title{color:rgba(0,0,0,.25)!important;cursor:not-allowed}.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:rgba(0,0,0,.25)!important}.ant-menu-dark,.ant-menu-dark .ant-menu-sub{color:hsla(0,0%,100%,.65);background:#001529}.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow{opacity:.45;-webkit-transition:all .3s;transition:all .3s}.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:before{background:#fff}.ant-menu-dark.ant-menu-submenu-popup{background:transparent}.ant-menu-dark .ant-menu-inline.ant-menu-sub{background:#000c17;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.45) inset;box-shadow:inset 0 2px 8px rgba(0,0,0,.45)}.ant-menu-dark.ant-menu-horizontal{border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item,.ant-menu-dark.ant-menu-horizontal>.ant-menu-submenu{top:0;margin-top:0;border-color:#001529;border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item>a:before{bottom:0}.ant-menu-dark .ant-menu-item,.ant-menu-dark .ant-menu-item-group-title,.ant-menu-dark .ant-menu-item>a{color:hsla(0,0%,100%,.65)}.ant-menu-dark.ant-menu-inline,.ant-menu-dark.ant-menu-vertical,.ant-menu-dark.ant-menu-vertical-left,.ant-menu-dark.ant-menu-vertical-right{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item,.ant-menu-dark.ant-menu-vertical .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical .ant-menu-item:after{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-inline .ant-menu-submenu-title{width:100%}.ant-menu-dark .ant-menu-item-active,.ant-menu-dark .ant-menu-item:hover,.ant-menu-dark .ant-menu-submenu-active,.ant-menu-dark .ant-menu-submenu-open,.ant-menu-dark .ant-menu-submenu-selected,.ant-menu-dark .ant-menu-submenu-title:hover{color:#fff;background-color:transparent}.ant-menu-dark .ant-menu-item-active>a,.ant-menu-dark .ant-menu-item:hover>a,.ant-menu-dark .ant-menu-submenu-active>a,.ant-menu-dark .ant-menu-submenu-open>a,.ant-menu-dark .ant-menu-submenu-selected>a,.ant-menu-dark .ant-menu-submenu-title:hover>a{color:#fff}.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow{opacity:1}.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:#fff}.ant-menu-dark .ant-menu-item:hover{background-color:transparent}.ant-menu-dark .ant-menu-item-selected{color:#fff;border-right:0}.ant-menu-dark .ant-menu-item-selected:after{border-right:0}.ant-menu-dark .ant-menu-item-selected .anticon,.ant-menu-dark .ant-menu-item-selected .anticon+span,.ant-menu-dark .ant-menu-item-selected>a,.ant-menu-dark .ant-menu-item-selected>a:hover{color:#fff}.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected,.ant-menu.ant-menu-dark .ant-menu-item-selected{background-color:#1890ff}.ant-menu-dark .ant-menu-item-disabled,.ant-menu-dark .ant-menu-item-disabled>a,.ant-menu-dark .ant-menu-submenu-disabled,.ant-menu-dark .ant-menu-submenu-disabled>a{color:hsla(0,0%,100%,.35)!important;opacity:.8}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title{color:hsla(0,0%,100%,.35)!important}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:hsla(0,0%,100%,.35)!important}.ant-tooltip{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:absolute;z-index:1060;display:block;max-width:250px;visibility:visible}.ant-tooltip-hidden{display:none}.ant-tooltip-placement-top,.ant-tooltip-placement-topLeft,.ant-tooltip-placement-topRight{padding-bottom:8px}.ant-tooltip-placement-right,.ant-tooltip-placement-rightBottom,.ant-tooltip-placement-rightTop{padding-left:8px}.ant-tooltip-placement-bottom,.ant-tooltip-placement-bottomLeft,.ant-tooltip-placement-bottomRight{padding-top:8px}.ant-tooltip-placement-left,.ant-tooltip-placement-leftBottom,.ant-tooltip-placement-leftTop{padding-right:8px}.ant-tooltip-inner{min-width:30px;min-height:32px;padding:6px 8px;color:#fff;text-align:left;text-decoration:none;word-wrap:break-word;background-color:rgba(0,0,0,.75);border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-tooltip-arrow{position:absolute;display:block;width:13.07106781px;height:13.07106781px;overflow:hidden;background:transparent;pointer-events:none}.ant-tooltip-arrow:before{position:absolute;top:0;right:0;bottom:0;left:0;display:block;width:5px;height:5px;margin:auto;background-color:rgba(0,0,0,.75);content:"";pointer-events:auto}.ant-tooltip-placement-top .ant-tooltip-arrow,.ant-tooltip-placement-topLeft .ant-tooltip-arrow,.ant-tooltip-placement-topRight .ant-tooltip-arrow{bottom:-5.07106781px}.ant-tooltip-placement-top .ant-tooltip-arrow:before,.ant-tooltip-placement-topLeft .ant-tooltip-arrow:before,.ant-tooltip-placement-topRight .ant-tooltip-arrow:before{-webkit-box-shadow:3px 3px 7px rgba(0,0,0,.07);box-shadow:3px 3px 7px rgba(0,0,0,.07);-webkit-transform:translateY(-6.53553391px) rotate(45deg);transform:translateY(-6.53553391px) rotate(45deg)}.ant-tooltip-placement-top .ant-tooltip-arrow{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.ant-tooltip-placement-topLeft .ant-tooltip-arrow{left:13px}.ant-tooltip-placement-topRight .ant-tooltip-arrow{right:13px}.ant-tooltip-placement-right .ant-tooltip-arrow,.ant-tooltip-placement-rightBottom .ant-tooltip-arrow,.ant-tooltip-placement-rightTop .ant-tooltip-arrow{left:-5.07106781px}.ant-tooltip-placement-right .ant-tooltip-arrow:before,.ant-tooltip-placement-rightBottom .ant-tooltip-arrow:before,.ant-tooltip-placement-rightTop .ant-tooltip-arrow:before{-webkit-box-shadow:-3px 3px 7px rgba(0,0,0,.07);box-shadow:-3px 3px 7px rgba(0,0,0,.07);-webkit-transform:translateX(6.53553391px) rotate(45deg);transform:translateX(6.53553391px) rotate(45deg)}.ant-tooltip-placement-right .ant-tooltip-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ant-tooltip-placement-rightTop .ant-tooltip-arrow{top:5px}.ant-tooltip-placement-rightBottom .ant-tooltip-arrow{bottom:5px}.ant-tooltip-placement-left .ant-tooltip-arrow,.ant-tooltip-placement-leftBottom .ant-tooltip-arrow,.ant-tooltip-placement-leftTop .ant-tooltip-arrow{right:-5.07106781px}.ant-tooltip-placement-left .ant-tooltip-arrow:before,.ant-tooltip-placement-leftBottom .ant-tooltip-arrow:before,.ant-tooltip-placement-leftTop .ant-tooltip-arrow:before{-webkit-box-shadow:3px -3px 7px rgba(0,0,0,.07);box-shadow:3px -3px 7px rgba(0,0,0,.07);-webkit-transform:translateX(-6.53553391px) rotate(45deg);transform:translateX(-6.53553391px) rotate(45deg)}.ant-tooltip-placement-left .ant-tooltip-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ant-tooltip-placement-leftTop .ant-tooltip-arrow{top:5px}.ant-tooltip-placement-leftBottom .ant-tooltip-arrow{bottom:5px}.ant-tooltip-placement-bottom .ant-tooltip-arrow,.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow,.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{top:-5.07106781px}.ant-tooltip-placement-bottom .ant-tooltip-arrow:before,.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow:before,.ant-tooltip-placement-bottomRight .ant-tooltip-arrow:before{-webkit-box-shadow:-3px -3px 7px rgba(0,0,0,.07);box-shadow:-3px -3px 7px rgba(0,0,0,.07);-webkit-transform:translateY(6.53553391px) rotate(45deg);transform:translateY(6.53553391px) rotate(45deg)}.ant-tooltip-placement-bottom .ant-tooltip-arrow{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow{left:13px}.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{right:13px}.ant-row{position:relative;height:auto;margin-right:0;margin-left:0;zoom:1;display:block;-webkit-box-sizing:border-box;box-sizing:border-box}.ant-row:after,.ant-row:before{display:table;content:""}.ant-row+.ant-row:before,.ant-row:after{clear:both}.ant-row-flex{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.ant-row-flex,.ant-row-flex:after,.ant-row-flex:before{display:-webkit-box;display:-ms-flexbox;display:flex}.ant-row-flex-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.ant-row-flex-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.ant-row-flex-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.ant-row-flex-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.ant-row-flex-space-around{-ms-flex-pack:distribute;justify-content:space-around}.ant-row-flex-top{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.ant-row-flex-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ant-row-flex-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.ant-col{position:relative;min-height:1px}.ant-col-1,.ant-col-2,.ant-col-3,.ant-col-4,.ant-col-5,.ant-col-6,.ant-col-7,.ant-col-8,.ant-col-9,.ant-col-10,.ant-col-11,.ant-col-12,.ant-col-13,.ant-col-14,.ant-col-15,.ant-col-16,.ant-col-17,.ant-col-18,.ant-col-19,.ant-col-20,.ant-col-21,.ant-col-22,.ant-col-23,.ant-col-24,.ant-col-lg-1,.ant-col-lg-2,.ant-col-lg-3,.ant-col-lg-4,.ant-col-lg-5,.ant-col-lg-6,.ant-col-lg-7,.ant-col-lg-8,.ant-col-lg-9,.ant-col-lg-10,.ant-col-lg-11,.ant-col-lg-12,.ant-col-lg-13,.ant-col-lg-14,.ant-col-lg-15,.ant-col-lg-16,.ant-col-lg-17,.ant-col-lg-18,.ant-col-lg-19,.ant-col-lg-20,.ant-col-lg-21,.ant-col-lg-22,.ant-col-lg-23,.ant-col-lg-24,.ant-col-md-1,.ant-col-md-2,.ant-col-md-3,.ant-col-md-4,.ant-col-md-5,.ant-col-md-6,.ant-col-md-7,.ant-col-md-8,.ant-col-md-9,.ant-col-md-10,.ant-col-md-11,.ant-col-md-12,.ant-col-md-13,.ant-col-md-14,.ant-col-md-15,.ant-col-md-16,.ant-col-md-17,.ant-col-md-18,.ant-col-md-19,.ant-col-md-20,.ant-col-md-21,.ant-col-md-22,.ant-col-md-23,.ant-col-md-24,.ant-col-sm-1,.ant-col-sm-2,.ant-col-sm-3,.ant-col-sm-4,.ant-col-sm-5,.ant-col-sm-6,.ant-col-sm-7,.ant-col-sm-8,.ant-col-sm-9,.ant-col-sm-10,.ant-col-sm-11,.ant-col-sm-12,.ant-col-sm-13,.ant-col-sm-14,.ant-col-sm-15,.ant-col-sm-16,.ant-col-sm-17,.ant-col-sm-18,.ant-col-sm-19,.ant-col-sm-20,.ant-col-sm-21,.ant-col-sm-22,.ant-col-sm-23,.ant-col-sm-24,.ant-col-xs-1,.ant-col-xs-2,.ant-col-xs-3,.ant-col-xs-4,.ant-col-xs-5,.ant-col-xs-6,.ant-col-xs-7,.ant-col-xs-8,.ant-col-xs-9,.ant-col-xs-10,.ant-col-xs-11,.ant-col-xs-12,.ant-col-xs-13,.ant-col-xs-14,.ant-col-xs-15,.ant-col-xs-16,.ant-col-xs-17,.ant-col-xs-18,.ant-col-xs-19,.ant-col-xs-20,.ant-col-xs-21,.ant-col-xs-22,.ant-col-xs-23,.ant-col-xs-24{position:relative;padding-right:0;padding-left:0}.ant-col-1,.ant-col-2,.ant-col-3,.ant-col-4,.ant-col-5,.ant-col-6,.ant-col-7,.ant-col-8,.ant-col-9,.ant-col-10,.ant-col-11,.ant-col-12,.ant-col-13,.ant-col-14,.ant-col-15,.ant-col-16,.ant-col-17,.ant-col-18,.ant-col-19,.ant-col-20,.ant-col-21,.ant-col-22,.ant-col-23,.ant-col-24{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-push-24{left:100%}.ant-col-pull-24{right:100%}.ant-col-offset-24{margin-left:100%}.ant-col-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ant-col-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-push-23{left:95.83333333%}.ant-col-pull-23{right:95.83333333%}.ant-col-offset-23{margin-left:95.83333333%}.ant-col-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ant-col-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-push-22{left:91.66666667%}.ant-col-pull-22{right:91.66666667%}.ant-col-offset-22{margin-left:91.66666667%}.ant-col-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ant-col-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-push-21{left:87.5%}.ant-col-pull-21{right:87.5%}.ant-col-offset-21{margin-left:87.5%}.ant-col-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ant-col-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-push-20{left:83.33333333%}.ant-col-pull-20{right:83.33333333%}.ant-col-offset-20{margin-left:83.33333333%}.ant-col-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ant-col-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-push-19{left:79.16666667%}.ant-col-pull-19{right:79.16666667%}.ant-col-offset-19{margin-left:79.16666667%}.ant-col-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ant-col-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-push-18{left:75%}.ant-col-pull-18{right:75%}.ant-col-offset-18{margin-left:75%}.ant-col-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ant-col-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-push-17{left:70.83333333%}.ant-col-pull-17{right:70.83333333%}.ant-col-offset-17{margin-left:70.83333333%}.ant-col-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ant-col-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-push-16{left:66.66666667%}.ant-col-pull-16{right:66.66666667%}.ant-col-offset-16{margin-left:66.66666667%}.ant-col-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ant-col-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-push-15{left:62.5%}.ant-col-pull-15{right:62.5%}.ant-col-offset-15{margin-left:62.5%}.ant-col-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ant-col-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-push-14{left:58.33333333%}.ant-col-pull-14{right:58.33333333%}.ant-col-offset-14{margin-left:58.33333333%}.ant-col-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ant-col-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-push-13{left:54.16666667%}.ant-col-pull-13{right:54.16666667%}.ant-col-offset-13{margin-left:54.16666667%}.ant-col-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ant-col-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-push-12{left:50%}.ant-col-pull-12{right:50%}.ant-col-offset-12{margin-left:50%}.ant-col-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ant-col-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-push-11{left:45.83333333%}.ant-col-pull-11{right:45.83333333%}.ant-col-offset-11{margin-left:45.83333333%}.ant-col-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ant-col-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-push-10{left:41.66666667%}.ant-col-pull-10{right:41.66666667%}.ant-col-offset-10{margin-left:41.66666667%}.ant-col-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ant-col-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-push-9{left:37.5%}.ant-col-pull-9{right:37.5%}.ant-col-offset-9{margin-left:37.5%}.ant-col-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ant-col-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-push-8{left:33.33333333%}.ant-col-pull-8{right:33.33333333%}.ant-col-offset-8{margin-left:33.33333333%}.ant-col-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ant-col-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-push-7{left:29.16666667%}.ant-col-pull-7{right:29.16666667%}.ant-col-offset-7{margin-left:29.16666667%}.ant-col-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ant-col-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-push-6{left:25%}.ant-col-pull-6{right:25%}.ant-col-offset-6{margin-left:25%}.ant-col-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ant-col-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-push-5{left:20.83333333%}.ant-col-pull-5{right:20.83333333%}.ant-col-offset-5{margin-left:20.83333333%}.ant-col-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ant-col-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-push-4{left:16.66666667%}.ant-col-pull-4{right:16.66666667%}.ant-col-offset-4{margin-left:16.66666667%}.ant-col-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ant-col-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-push-3{left:12.5%}.ant-col-pull-3{right:12.5%}.ant-col-offset-3{margin-left:12.5%}.ant-col-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ant-col-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-push-2{left:8.33333333%}.ant-col-pull-2{right:8.33333333%}.ant-col-offset-2{margin-left:8.33333333%}.ant-col-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ant-col-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-push-1{left:4.16666667%}.ant-col-pull-1{right:4.16666667%}.ant-col-offset-1{margin-left:4.16666667%}.ant-col-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-col-0{display:none}.ant-col-offset-0{margin-left:0}.ant-col-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.ant-col-xs-1,.ant-col-xs-2,.ant-col-xs-3,.ant-col-xs-4,.ant-col-xs-5,.ant-col-xs-6,.ant-col-xs-7,.ant-col-xs-8,.ant-col-xs-9,.ant-col-xs-10,.ant-col-xs-11,.ant-col-xs-12,.ant-col-xs-13,.ant-col-xs-14,.ant-col-xs-15,.ant-col-xs-16,.ant-col-xs-17,.ant-col-xs-18,.ant-col-xs-19,.ant-col-xs-20,.ant-col-xs-21,.ant-col-xs-22,.ant-col-xs-23,.ant-col-xs-24{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-xs-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-xs-push-24{left:100%}.ant-col-xs-pull-24{right:100%}.ant-col-xs-offset-24{margin-left:100%}.ant-col-xs-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ant-col-xs-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-xs-push-23{left:95.83333333%}.ant-col-xs-pull-23{right:95.83333333%}.ant-col-xs-offset-23{margin-left:95.83333333%}.ant-col-xs-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ant-col-xs-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-xs-push-22{left:91.66666667%}.ant-col-xs-pull-22{right:91.66666667%}.ant-col-xs-offset-22{margin-left:91.66666667%}.ant-col-xs-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ant-col-xs-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-xs-push-21{left:87.5%}.ant-col-xs-pull-21{right:87.5%}.ant-col-xs-offset-21{margin-left:87.5%}.ant-col-xs-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ant-col-xs-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-xs-push-20{left:83.33333333%}.ant-col-xs-pull-20{right:83.33333333%}.ant-col-xs-offset-20{margin-left:83.33333333%}.ant-col-xs-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ant-col-xs-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-xs-push-19{left:79.16666667%}.ant-col-xs-pull-19{right:79.16666667%}.ant-col-xs-offset-19{margin-left:79.16666667%}.ant-col-xs-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ant-col-xs-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-xs-push-18{left:75%}.ant-col-xs-pull-18{right:75%}.ant-col-xs-offset-18{margin-left:75%}.ant-col-xs-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ant-col-xs-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-xs-push-17{left:70.83333333%}.ant-col-xs-pull-17{right:70.83333333%}.ant-col-xs-offset-17{margin-left:70.83333333%}.ant-col-xs-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ant-col-xs-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-xs-push-16{left:66.66666667%}.ant-col-xs-pull-16{right:66.66666667%}.ant-col-xs-offset-16{margin-left:66.66666667%}.ant-col-xs-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ant-col-xs-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-xs-push-15{left:62.5%}.ant-col-xs-pull-15{right:62.5%}.ant-col-xs-offset-15{margin-left:62.5%}.ant-col-xs-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ant-col-xs-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-xs-push-14{left:58.33333333%}.ant-col-xs-pull-14{right:58.33333333%}.ant-col-xs-offset-14{margin-left:58.33333333%}.ant-col-xs-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ant-col-xs-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-xs-push-13{left:54.16666667%}.ant-col-xs-pull-13{right:54.16666667%}.ant-col-xs-offset-13{margin-left:54.16666667%}.ant-col-xs-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ant-col-xs-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-xs-push-12{left:50%}.ant-col-xs-pull-12{right:50%}.ant-col-xs-offset-12{margin-left:50%}.ant-col-xs-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ant-col-xs-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-xs-push-11{left:45.83333333%}.ant-col-xs-pull-11{right:45.83333333%}.ant-col-xs-offset-11{margin-left:45.83333333%}.ant-col-xs-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ant-col-xs-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-xs-push-10{left:41.66666667%}.ant-col-xs-pull-10{right:41.66666667%}.ant-col-xs-offset-10{margin-left:41.66666667%}.ant-col-xs-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ant-col-xs-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-xs-push-9{left:37.5%}.ant-col-xs-pull-9{right:37.5%}.ant-col-xs-offset-9{margin-left:37.5%}.ant-col-xs-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ant-col-xs-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-xs-push-8{left:33.33333333%}.ant-col-xs-pull-8{right:33.33333333%}.ant-col-xs-offset-8{margin-left:33.33333333%}.ant-col-xs-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ant-col-xs-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-xs-push-7{left:29.16666667%}.ant-col-xs-pull-7{right:29.16666667%}.ant-col-xs-offset-7{margin-left:29.16666667%}.ant-col-xs-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ant-col-xs-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-xs-push-6{left:25%}.ant-col-xs-pull-6{right:25%}.ant-col-xs-offset-6{margin-left:25%}.ant-col-xs-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ant-col-xs-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-xs-push-5{left:20.83333333%}.ant-col-xs-pull-5{right:20.83333333%}.ant-col-xs-offset-5{margin-left:20.83333333%}.ant-col-xs-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ant-col-xs-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-xs-push-4{left:16.66666667%}.ant-col-xs-pull-4{right:16.66666667%}.ant-col-xs-offset-4{margin-left:16.66666667%}.ant-col-xs-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ant-col-xs-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-xs-push-3{left:12.5%}.ant-col-xs-pull-3{right:12.5%}.ant-col-xs-offset-3{margin-left:12.5%}.ant-col-xs-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ant-col-xs-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-xs-push-2{left:8.33333333%}.ant-col-xs-pull-2{right:8.33333333%}.ant-col-xs-offset-2{margin-left:8.33333333%}.ant-col-xs-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ant-col-xs-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-xs-push-1{left:4.16666667%}.ant-col-xs-pull-1{right:4.16666667%}.ant-col-xs-offset-1{margin-left:4.16666667%}.ant-col-xs-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-col-xs-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xs-push-0{left:auto}.ant-col-xs-pull-0{right:auto}.ant-col-xs-offset-0{margin-left:0}.ant-col-xs-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}@media (min-width:576px){.ant-col-sm-1,.ant-col-sm-2,.ant-col-sm-3,.ant-col-sm-4,.ant-col-sm-5,.ant-col-sm-6,.ant-col-sm-7,.ant-col-sm-8,.ant-col-sm-9,.ant-col-sm-10,.ant-col-sm-11,.ant-col-sm-12,.ant-col-sm-13,.ant-col-sm-14,.ant-col-sm-15,.ant-col-sm-16,.ant-col-sm-17,.ant-col-sm-18,.ant-col-sm-19,.ant-col-sm-20,.ant-col-sm-21,.ant-col-sm-22,.ant-col-sm-23,.ant-col-sm-24{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-sm-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-sm-push-24{left:100%}.ant-col-sm-pull-24{right:100%}.ant-col-sm-offset-24{margin-left:100%}.ant-col-sm-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ant-col-sm-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-sm-push-23{left:95.83333333%}.ant-col-sm-pull-23{right:95.83333333%}.ant-col-sm-offset-23{margin-left:95.83333333%}.ant-col-sm-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ant-col-sm-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-sm-push-22{left:91.66666667%}.ant-col-sm-pull-22{right:91.66666667%}.ant-col-sm-offset-22{margin-left:91.66666667%}.ant-col-sm-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ant-col-sm-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-sm-push-21{left:87.5%}.ant-col-sm-pull-21{right:87.5%}.ant-col-sm-offset-21{margin-left:87.5%}.ant-col-sm-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ant-col-sm-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-sm-push-20{left:83.33333333%}.ant-col-sm-pull-20{right:83.33333333%}.ant-col-sm-offset-20{margin-left:83.33333333%}.ant-col-sm-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ant-col-sm-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-sm-push-19{left:79.16666667%}.ant-col-sm-pull-19{right:79.16666667%}.ant-col-sm-offset-19{margin-left:79.16666667%}.ant-col-sm-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ant-col-sm-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-sm-push-18{left:75%}.ant-col-sm-pull-18{right:75%}.ant-col-sm-offset-18{margin-left:75%}.ant-col-sm-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ant-col-sm-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-sm-push-17{left:70.83333333%}.ant-col-sm-pull-17{right:70.83333333%}.ant-col-sm-offset-17{margin-left:70.83333333%}.ant-col-sm-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ant-col-sm-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-sm-push-16{left:66.66666667%}.ant-col-sm-pull-16{right:66.66666667%}.ant-col-sm-offset-16{margin-left:66.66666667%}.ant-col-sm-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ant-col-sm-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-sm-push-15{left:62.5%}.ant-col-sm-pull-15{right:62.5%}.ant-col-sm-offset-15{margin-left:62.5%}.ant-col-sm-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ant-col-sm-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-sm-push-14{left:58.33333333%}.ant-col-sm-pull-14{right:58.33333333%}.ant-col-sm-offset-14{margin-left:58.33333333%}.ant-col-sm-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ant-col-sm-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-sm-push-13{left:54.16666667%}.ant-col-sm-pull-13{right:54.16666667%}.ant-col-sm-offset-13{margin-left:54.16666667%}.ant-col-sm-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ant-col-sm-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-sm-push-12{left:50%}.ant-col-sm-pull-12{right:50%}.ant-col-sm-offset-12{margin-left:50%}.ant-col-sm-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ant-col-sm-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-sm-push-11{left:45.83333333%}.ant-col-sm-pull-11{right:45.83333333%}.ant-col-sm-offset-11{margin-left:45.83333333%}.ant-col-sm-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ant-col-sm-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-sm-push-10{left:41.66666667%}.ant-col-sm-pull-10{right:41.66666667%}.ant-col-sm-offset-10{margin-left:41.66666667%}.ant-col-sm-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ant-col-sm-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-sm-push-9{left:37.5%}.ant-col-sm-pull-9{right:37.5%}.ant-col-sm-offset-9{margin-left:37.5%}.ant-col-sm-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ant-col-sm-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-sm-push-8{left:33.33333333%}.ant-col-sm-pull-8{right:33.33333333%}.ant-col-sm-offset-8{margin-left:33.33333333%}.ant-col-sm-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ant-col-sm-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-sm-push-7{left:29.16666667%}.ant-col-sm-pull-7{right:29.16666667%}.ant-col-sm-offset-7{margin-left:29.16666667%}.ant-col-sm-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ant-col-sm-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-sm-push-6{left:25%}.ant-col-sm-pull-6{right:25%}.ant-col-sm-offset-6{margin-left:25%}.ant-col-sm-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ant-col-sm-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-sm-push-5{left:20.83333333%}.ant-col-sm-pull-5{right:20.83333333%}.ant-col-sm-offset-5{margin-left:20.83333333%}.ant-col-sm-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ant-col-sm-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-sm-push-4{left:16.66666667%}.ant-col-sm-pull-4{right:16.66666667%}.ant-col-sm-offset-4{margin-left:16.66666667%}.ant-col-sm-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ant-col-sm-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-sm-push-3{left:12.5%}.ant-col-sm-pull-3{right:12.5%}.ant-col-sm-offset-3{margin-left:12.5%}.ant-col-sm-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ant-col-sm-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-sm-push-2{left:8.33333333%}.ant-col-sm-pull-2{right:8.33333333%}.ant-col-sm-offset-2{margin-left:8.33333333%}.ant-col-sm-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ant-col-sm-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-sm-push-1{left:4.16666667%}.ant-col-sm-pull-1{right:4.16666667%}.ant-col-sm-offset-1{margin-left:4.16666667%}.ant-col-sm-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-col-sm-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-sm-push-0{left:auto}.ant-col-sm-pull-0{right:auto}.ant-col-sm-offset-0{margin-left:0}.ant-col-sm-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}@media (min-width:768px){.ant-col-md-1,.ant-col-md-2,.ant-col-md-3,.ant-col-md-4,.ant-col-md-5,.ant-col-md-6,.ant-col-md-7,.ant-col-md-8,.ant-col-md-9,.ant-col-md-10,.ant-col-md-11,.ant-col-md-12,.ant-col-md-13,.ant-col-md-14,.ant-col-md-15,.ant-col-md-16,.ant-col-md-17,.ant-col-md-18,.ant-col-md-19,.ant-col-md-20,.ant-col-md-21,.ant-col-md-22,.ant-col-md-23,.ant-col-md-24{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-md-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-md-push-24{left:100%}.ant-col-md-pull-24{right:100%}.ant-col-md-offset-24{margin-left:100%}.ant-col-md-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ant-col-md-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-md-push-23{left:95.83333333%}.ant-col-md-pull-23{right:95.83333333%}.ant-col-md-offset-23{margin-left:95.83333333%}.ant-col-md-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ant-col-md-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-md-push-22{left:91.66666667%}.ant-col-md-pull-22{right:91.66666667%}.ant-col-md-offset-22{margin-left:91.66666667%}.ant-col-md-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ant-col-md-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-md-push-21{left:87.5%}.ant-col-md-pull-21{right:87.5%}.ant-col-md-offset-21{margin-left:87.5%}.ant-col-md-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ant-col-md-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-md-push-20{left:83.33333333%}.ant-col-md-pull-20{right:83.33333333%}.ant-col-md-offset-20{margin-left:83.33333333%}.ant-col-md-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ant-col-md-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-md-push-19{left:79.16666667%}.ant-col-md-pull-19{right:79.16666667%}.ant-col-md-offset-19{margin-left:79.16666667%}.ant-col-md-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ant-col-md-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-md-push-18{left:75%}.ant-col-md-pull-18{right:75%}.ant-col-md-offset-18{margin-left:75%}.ant-col-md-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ant-col-md-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-md-push-17{left:70.83333333%}.ant-col-md-pull-17{right:70.83333333%}.ant-col-md-offset-17{margin-left:70.83333333%}.ant-col-md-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ant-col-md-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-md-push-16{left:66.66666667%}.ant-col-md-pull-16{right:66.66666667%}.ant-col-md-offset-16{margin-left:66.66666667%}.ant-col-md-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ant-col-md-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-md-push-15{left:62.5%}.ant-col-md-pull-15{right:62.5%}.ant-col-md-offset-15{margin-left:62.5%}.ant-col-md-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ant-col-md-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-md-push-14{left:58.33333333%}.ant-col-md-pull-14{right:58.33333333%}.ant-col-md-offset-14{margin-left:58.33333333%}.ant-col-md-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ant-col-md-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-md-push-13{left:54.16666667%}.ant-col-md-pull-13{right:54.16666667%}.ant-col-md-offset-13{margin-left:54.16666667%}.ant-col-md-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ant-col-md-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-md-push-12{left:50%}.ant-col-md-pull-12{right:50%}.ant-col-md-offset-12{margin-left:50%}.ant-col-md-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ant-col-md-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-md-push-11{left:45.83333333%}.ant-col-md-pull-11{right:45.83333333%}.ant-col-md-offset-11{margin-left:45.83333333%}.ant-col-md-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ant-col-md-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-md-push-10{left:41.66666667%}.ant-col-md-pull-10{right:41.66666667%}.ant-col-md-offset-10{margin-left:41.66666667%}.ant-col-md-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ant-col-md-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-md-push-9{left:37.5%}.ant-col-md-pull-9{right:37.5%}.ant-col-md-offset-9{margin-left:37.5%}.ant-col-md-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ant-col-md-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-md-push-8{left:33.33333333%}.ant-col-md-pull-8{right:33.33333333%}.ant-col-md-offset-8{margin-left:33.33333333%}.ant-col-md-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ant-col-md-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-md-push-7{left:29.16666667%}.ant-col-md-pull-7{right:29.16666667%}.ant-col-md-offset-7{margin-left:29.16666667%}.ant-col-md-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ant-col-md-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-md-push-6{left:25%}.ant-col-md-pull-6{right:25%}.ant-col-md-offset-6{margin-left:25%}.ant-col-md-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ant-col-md-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-md-push-5{left:20.83333333%}.ant-col-md-pull-5{right:20.83333333%}.ant-col-md-offset-5{margin-left:20.83333333%}.ant-col-md-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ant-col-md-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-md-push-4{left:16.66666667%}.ant-col-md-pull-4{right:16.66666667%}.ant-col-md-offset-4{margin-left:16.66666667%}.ant-col-md-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ant-col-md-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-md-push-3{left:12.5%}.ant-col-md-pull-3{right:12.5%}.ant-col-md-offset-3{margin-left:12.5%}.ant-col-md-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ant-col-md-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-md-push-2{left:8.33333333%}.ant-col-md-pull-2{right:8.33333333%}.ant-col-md-offset-2{margin-left:8.33333333%}.ant-col-md-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ant-col-md-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-md-push-1{left:4.16666667%}.ant-col-md-pull-1{right:4.16666667%}.ant-col-md-offset-1{margin-left:4.16666667%}.ant-col-md-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-col-md-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-md-push-0{left:auto}.ant-col-md-pull-0{right:auto}.ant-col-md-offset-0{margin-left:0}.ant-col-md-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}@media (min-width:992px){.ant-col-lg-1,.ant-col-lg-2,.ant-col-lg-3,.ant-col-lg-4,.ant-col-lg-5,.ant-col-lg-6,.ant-col-lg-7,.ant-col-lg-8,.ant-col-lg-9,.ant-col-lg-10,.ant-col-lg-11,.ant-col-lg-12,.ant-col-lg-13,.ant-col-lg-14,.ant-col-lg-15,.ant-col-lg-16,.ant-col-lg-17,.ant-col-lg-18,.ant-col-lg-19,.ant-col-lg-20,.ant-col-lg-21,.ant-col-lg-22,.ant-col-lg-23,.ant-col-lg-24{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-lg-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-lg-push-24{left:100%}.ant-col-lg-pull-24{right:100%}.ant-col-lg-offset-24{margin-left:100%}.ant-col-lg-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ant-col-lg-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-lg-push-23{left:95.83333333%}.ant-col-lg-pull-23{right:95.83333333%}.ant-col-lg-offset-23{margin-left:95.83333333%}.ant-col-lg-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ant-col-lg-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-lg-push-22{left:91.66666667%}.ant-col-lg-pull-22{right:91.66666667%}.ant-col-lg-offset-22{margin-left:91.66666667%}.ant-col-lg-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ant-col-lg-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-lg-push-21{left:87.5%}.ant-col-lg-pull-21{right:87.5%}.ant-col-lg-offset-21{margin-left:87.5%}.ant-col-lg-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ant-col-lg-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-lg-push-20{left:83.33333333%}.ant-col-lg-pull-20{right:83.33333333%}.ant-col-lg-offset-20{margin-left:83.33333333%}.ant-col-lg-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ant-col-lg-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-lg-push-19{left:79.16666667%}.ant-col-lg-pull-19{right:79.16666667%}.ant-col-lg-offset-19{margin-left:79.16666667%}.ant-col-lg-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ant-col-lg-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-lg-push-18{left:75%}.ant-col-lg-pull-18{right:75%}.ant-col-lg-offset-18{margin-left:75%}.ant-col-lg-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ant-col-lg-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-lg-push-17{left:70.83333333%}.ant-col-lg-pull-17{right:70.83333333%}.ant-col-lg-offset-17{margin-left:70.83333333%}.ant-col-lg-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ant-col-lg-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-lg-push-16{left:66.66666667%}.ant-col-lg-pull-16{right:66.66666667%}.ant-col-lg-offset-16{margin-left:66.66666667%}.ant-col-lg-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ant-col-lg-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-lg-push-15{left:62.5%}.ant-col-lg-pull-15{right:62.5%}.ant-col-lg-offset-15{margin-left:62.5%}.ant-col-lg-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ant-col-lg-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-lg-push-14{left:58.33333333%}.ant-col-lg-pull-14{right:58.33333333%}.ant-col-lg-offset-14{margin-left:58.33333333%}.ant-col-lg-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ant-col-lg-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-lg-push-13{left:54.16666667%}.ant-col-lg-pull-13{right:54.16666667%}.ant-col-lg-offset-13{margin-left:54.16666667%}.ant-col-lg-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ant-col-lg-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-lg-push-12{left:50%}.ant-col-lg-pull-12{right:50%}.ant-col-lg-offset-12{margin-left:50%}.ant-col-lg-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ant-col-lg-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-lg-push-11{left:45.83333333%}.ant-col-lg-pull-11{right:45.83333333%}.ant-col-lg-offset-11{margin-left:45.83333333%}.ant-col-lg-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ant-col-lg-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-lg-push-10{left:41.66666667%}.ant-col-lg-pull-10{right:41.66666667%}.ant-col-lg-offset-10{margin-left:41.66666667%}.ant-col-lg-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ant-col-lg-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-lg-push-9{left:37.5%}.ant-col-lg-pull-9{right:37.5%}.ant-col-lg-offset-9{margin-left:37.5%}.ant-col-lg-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ant-col-lg-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-lg-push-8{left:33.33333333%}.ant-col-lg-pull-8{right:33.33333333%}.ant-col-lg-offset-8{margin-left:33.33333333%}.ant-col-lg-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ant-col-lg-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-lg-push-7{left:29.16666667%}.ant-col-lg-pull-7{right:29.16666667%}.ant-col-lg-offset-7{margin-left:29.16666667%}.ant-col-lg-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ant-col-lg-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-lg-push-6{left:25%}.ant-col-lg-pull-6{right:25%}.ant-col-lg-offset-6{margin-left:25%}.ant-col-lg-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ant-col-lg-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-lg-push-5{left:20.83333333%}.ant-col-lg-pull-5{right:20.83333333%}.ant-col-lg-offset-5{margin-left:20.83333333%}.ant-col-lg-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ant-col-lg-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-lg-push-4{left:16.66666667%}.ant-col-lg-pull-4{right:16.66666667%}.ant-col-lg-offset-4{margin-left:16.66666667%}.ant-col-lg-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ant-col-lg-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-lg-push-3{left:12.5%}.ant-col-lg-pull-3{right:12.5%}.ant-col-lg-offset-3{margin-left:12.5%}.ant-col-lg-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ant-col-lg-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-lg-push-2{left:8.33333333%}.ant-col-lg-pull-2{right:8.33333333%}.ant-col-lg-offset-2{margin-left:8.33333333%}.ant-col-lg-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ant-col-lg-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-lg-push-1{left:4.16666667%}.ant-col-lg-pull-1{right:4.16666667%}.ant-col-lg-offset-1{margin-left:4.16666667%}.ant-col-lg-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-col-lg-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-lg-push-0{left:auto}.ant-col-lg-pull-0{right:auto}.ant-col-lg-offset-0{margin-left:0}.ant-col-lg-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}@media (min-width:1200px){.ant-col-xl-1,.ant-col-xl-2,.ant-col-xl-3,.ant-col-xl-4,.ant-col-xl-5,.ant-col-xl-6,.ant-col-xl-7,.ant-col-xl-8,.ant-col-xl-9,.ant-col-xl-10,.ant-col-xl-11,.ant-col-xl-12,.ant-col-xl-13,.ant-col-xl-14,.ant-col-xl-15,.ant-col-xl-16,.ant-col-xl-17,.ant-col-xl-18,.ant-col-xl-19,.ant-col-xl-20,.ant-col-xl-21,.ant-col-xl-22,.ant-col-xl-23,.ant-col-xl-24{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-xl-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-xl-push-24{left:100%}.ant-col-xl-pull-24{right:100%}.ant-col-xl-offset-24{margin-left:100%}.ant-col-xl-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ant-col-xl-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-xl-push-23{left:95.83333333%}.ant-col-xl-pull-23{right:95.83333333%}.ant-col-xl-offset-23{margin-left:95.83333333%}.ant-col-xl-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ant-col-xl-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-xl-push-22{left:91.66666667%}.ant-col-xl-pull-22{right:91.66666667%}.ant-col-xl-offset-22{margin-left:91.66666667%}.ant-col-xl-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ant-col-xl-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-xl-push-21{left:87.5%}.ant-col-xl-pull-21{right:87.5%}.ant-col-xl-offset-21{margin-left:87.5%}.ant-col-xl-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ant-col-xl-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-xl-push-20{left:83.33333333%}.ant-col-xl-pull-20{right:83.33333333%}.ant-col-xl-offset-20{margin-left:83.33333333%}.ant-col-xl-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ant-col-xl-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-xl-push-19{left:79.16666667%}.ant-col-xl-pull-19{right:79.16666667%}.ant-col-xl-offset-19{margin-left:79.16666667%}.ant-col-xl-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ant-col-xl-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-xl-push-18{left:75%}.ant-col-xl-pull-18{right:75%}.ant-col-xl-offset-18{margin-left:75%}.ant-col-xl-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ant-col-xl-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-xl-push-17{left:70.83333333%}.ant-col-xl-pull-17{right:70.83333333%}.ant-col-xl-offset-17{margin-left:70.83333333%}.ant-col-xl-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ant-col-xl-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-xl-push-16{left:66.66666667%}.ant-col-xl-pull-16{right:66.66666667%}.ant-col-xl-offset-16{margin-left:66.66666667%}.ant-col-xl-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ant-col-xl-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-xl-push-15{left:62.5%}.ant-col-xl-pull-15{right:62.5%}.ant-col-xl-offset-15{margin-left:62.5%}.ant-col-xl-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ant-col-xl-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-xl-push-14{left:58.33333333%}.ant-col-xl-pull-14{right:58.33333333%}.ant-col-xl-offset-14{margin-left:58.33333333%}.ant-col-xl-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ant-col-xl-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-xl-push-13{left:54.16666667%}.ant-col-xl-pull-13{right:54.16666667%}.ant-col-xl-offset-13{margin-left:54.16666667%}.ant-col-xl-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ant-col-xl-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-xl-push-12{left:50%}.ant-col-xl-pull-12{right:50%}.ant-col-xl-offset-12{margin-left:50%}.ant-col-xl-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ant-col-xl-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-xl-push-11{left:45.83333333%}.ant-col-xl-pull-11{right:45.83333333%}.ant-col-xl-offset-11{margin-left:45.83333333%}.ant-col-xl-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ant-col-xl-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-xl-push-10{left:41.66666667%}.ant-col-xl-pull-10{right:41.66666667%}.ant-col-xl-offset-10{margin-left:41.66666667%}.ant-col-xl-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ant-col-xl-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-xl-push-9{left:37.5%}.ant-col-xl-pull-9{right:37.5%}.ant-col-xl-offset-9{margin-left:37.5%}.ant-col-xl-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ant-col-xl-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-xl-push-8{left:33.33333333%}.ant-col-xl-pull-8{right:33.33333333%}.ant-col-xl-offset-8{margin-left:33.33333333%}.ant-col-xl-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ant-col-xl-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-xl-push-7{left:29.16666667%}.ant-col-xl-pull-7{right:29.16666667%}.ant-col-xl-offset-7{margin-left:29.16666667%}.ant-col-xl-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ant-col-xl-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-xl-push-6{left:25%}.ant-col-xl-pull-6{right:25%}.ant-col-xl-offset-6{margin-left:25%}.ant-col-xl-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ant-col-xl-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-xl-push-5{left:20.83333333%}.ant-col-xl-pull-5{right:20.83333333%}.ant-col-xl-offset-5{margin-left:20.83333333%}.ant-col-xl-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ant-col-xl-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-xl-push-4{left:16.66666667%}.ant-col-xl-pull-4{right:16.66666667%}.ant-col-xl-offset-4{margin-left:16.66666667%}.ant-col-xl-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ant-col-xl-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-xl-push-3{left:12.5%}.ant-col-xl-pull-3{right:12.5%}.ant-col-xl-offset-3{margin-left:12.5%}.ant-col-xl-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ant-col-xl-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-xl-push-2{left:8.33333333%}.ant-col-xl-pull-2{right:8.33333333%}.ant-col-xl-offset-2{margin-left:8.33333333%}.ant-col-xl-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ant-col-xl-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-xl-push-1{left:4.16666667%}.ant-col-xl-pull-1{right:4.16666667%}.ant-col-xl-offset-1{margin-left:4.16666667%}.ant-col-xl-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-col-xl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xl-push-0{left:auto}.ant-col-xl-pull-0{right:auto}.ant-col-xl-offset-0{margin-left:0}.ant-col-xl-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}@media (min-width:1600px){.ant-col-xxl-1,.ant-col-xxl-2,.ant-col-xxl-3,.ant-col-xxl-4,.ant-col-xxl-5,.ant-col-xxl-6,.ant-col-xxl-7,.ant-col-xxl-8,.ant-col-xxl-9,.ant-col-xxl-10,.ant-col-xxl-11,.ant-col-xxl-12,.ant-col-xxl-13,.ant-col-xxl-14,.ant-col-xxl-15,.ant-col-xxl-16,.ant-col-xxl-17,.ant-col-xxl-18,.ant-col-xxl-19,.ant-col-xxl-20,.ant-col-xxl-21,.ant-col-xxl-22,.ant-col-xxl-23,.ant-col-xxl-24{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;float:left}.ant-col-xxl-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.ant-col-xxl-push-24{left:100%}.ant-col-xxl-pull-24{right:100%}.ant-col-xxl-offset-24{margin-left:100%}.ant-col-xxl-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ant-col-xxl-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.ant-col-xxl-push-23{left:95.83333333%}.ant-col-xxl-pull-23{right:95.83333333%}.ant-col-xxl-offset-23{margin-left:95.83333333%}.ant-col-xxl-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ant-col-xxl-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.ant-col-xxl-push-22{left:91.66666667%}.ant-col-xxl-pull-22{right:91.66666667%}.ant-col-xxl-offset-22{margin-left:91.66666667%}.ant-col-xxl-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ant-col-xxl-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.ant-col-xxl-push-21{left:87.5%}.ant-col-xxl-pull-21{right:87.5%}.ant-col-xxl-offset-21{margin-left:87.5%}.ant-col-xxl-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ant-col-xxl-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.ant-col-xxl-push-20{left:83.33333333%}.ant-col-xxl-pull-20{right:83.33333333%}.ant-col-xxl-offset-20{margin-left:83.33333333%}.ant-col-xxl-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ant-col-xxl-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.ant-col-xxl-push-19{left:79.16666667%}.ant-col-xxl-pull-19{right:79.16666667%}.ant-col-xxl-offset-19{margin-left:79.16666667%}.ant-col-xxl-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ant-col-xxl-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.ant-col-xxl-push-18{left:75%}.ant-col-xxl-pull-18{right:75%}.ant-col-xxl-offset-18{margin-left:75%}.ant-col-xxl-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ant-col-xxl-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.ant-col-xxl-push-17{left:70.83333333%}.ant-col-xxl-pull-17{right:70.83333333%}.ant-col-xxl-offset-17{margin-left:70.83333333%}.ant-col-xxl-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ant-col-xxl-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.ant-col-xxl-push-16{left:66.66666667%}.ant-col-xxl-pull-16{right:66.66666667%}.ant-col-xxl-offset-16{margin-left:66.66666667%}.ant-col-xxl-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ant-col-xxl-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.ant-col-xxl-push-15{left:62.5%}.ant-col-xxl-pull-15{right:62.5%}.ant-col-xxl-offset-15{margin-left:62.5%}.ant-col-xxl-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ant-col-xxl-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.ant-col-xxl-push-14{left:58.33333333%}.ant-col-xxl-pull-14{right:58.33333333%}.ant-col-xxl-offset-14{margin-left:58.33333333%}.ant-col-xxl-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ant-col-xxl-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.ant-col-xxl-push-13{left:54.16666667%}.ant-col-xxl-pull-13{right:54.16666667%}.ant-col-xxl-offset-13{margin-left:54.16666667%}.ant-col-xxl-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ant-col-xxl-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.ant-col-xxl-push-12{left:50%}.ant-col-xxl-pull-12{right:50%}.ant-col-xxl-offset-12{margin-left:50%}.ant-col-xxl-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ant-col-xxl-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.ant-col-xxl-push-11{left:45.83333333%}.ant-col-xxl-pull-11{right:45.83333333%}.ant-col-xxl-offset-11{margin-left:45.83333333%}.ant-col-xxl-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ant-col-xxl-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.ant-col-xxl-push-10{left:41.66666667%}.ant-col-xxl-pull-10{right:41.66666667%}.ant-col-xxl-offset-10{margin-left:41.66666667%}.ant-col-xxl-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ant-col-xxl-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.ant-col-xxl-push-9{left:37.5%}.ant-col-xxl-pull-9{right:37.5%}.ant-col-xxl-offset-9{margin-left:37.5%}.ant-col-xxl-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ant-col-xxl-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.ant-col-xxl-push-8{left:33.33333333%}.ant-col-xxl-pull-8{right:33.33333333%}.ant-col-xxl-offset-8{margin-left:33.33333333%}.ant-col-xxl-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ant-col-xxl-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.ant-col-xxl-push-7{left:29.16666667%}.ant-col-xxl-pull-7{right:29.16666667%}.ant-col-xxl-offset-7{margin-left:29.16666667%}.ant-col-xxl-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ant-col-xxl-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.ant-col-xxl-push-6{left:25%}.ant-col-xxl-pull-6{right:25%}.ant-col-xxl-offset-6{margin-left:25%}.ant-col-xxl-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ant-col-xxl-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.ant-col-xxl-push-5{left:20.83333333%}.ant-col-xxl-pull-5{right:20.83333333%}.ant-col-xxl-offset-5{margin-left:20.83333333%}.ant-col-xxl-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ant-col-xxl-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.ant-col-xxl-push-4{left:16.66666667%}.ant-col-xxl-pull-4{right:16.66666667%}.ant-col-xxl-offset-4{margin-left:16.66666667%}.ant-col-xxl-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ant-col-xxl-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.ant-col-xxl-push-3{left:12.5%}.ant-col-xxl-pull-3{right:12.5%}.ant-col-xxl-offset-3{margin-left:12.5%}.ant-col-xxl-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ant-col-xxl-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.ant-col-xxl-push-2{left:8.33333333%}.ant-col-xxl-pull-2{right:8.33333333%}.ant-col-xxl-offset-2{margin-left:8.33333333%}.ant-col-xxl-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ant-col-xxl-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.ant-col-xxl-push-1{left:4.16666667%}.ant-col-xxl-pull-1{right:4.16666667%}.ant-col-xxl-offset-1{margin-left:4.16666667%}.ant-col-xxl-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ant-col-xxl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xxl-push-0{left:auto}.ant-col-xxl-pull-0{right:auto}.ant-col-xxl-offset-0{margin-left:0}.ant-col-xxl-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}.ant-select-auto-complete{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.ant-select-auto-complete.ant-select .ant-select-selection{border:0;-webkit-box-shadow:none;box-shadow:none}.ant-select-auto-complete.ant-select .ant-select-selection__rendered{height:100%;margin-right:0;margin-left:0;line-height:32px}.ant-select-auto-complete.ant-select .ant-select-selection__placeholder{margin-right:12px;margin-left:12px}.ant-select-auto-complete.ant-select .ant-select-selection--single{height:auto}.ant-select-auto-complete.ant-select .ant-select-search--inline{position:static;float:left}.ant-select-auto-complete.ant-select-allow-clear .ant-select-selection:hover .ant-select-selection__rendered{margin-right:0!important}.ant-select-auto-complete.ant-select .ant-input{height:32px;line-height:1.5;background:transparent;border-width:1px}.ant-select-auto-complete.ant-select .ant-input:focus,.ant-select-auto-complete.ant-select .ant-input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-select-auto-complete.ant-select .ant-input[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-select-auto-complete.ant-select .ant-input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-select-auto-complete.ant-select-lg .ant-select-selection__rendered{line-height:40px}.ant-select-auto-complete.ant-select-lg .ant-input{height:40px;padding-top:6px;padding-bottom:6px}.ant-select-auto-complete.ant-select-sm .ant-select-selection__rendered{line-height:24px}.ant-select-auto-complete.ant-select-sm .ant-input{height:24px;padding-top:1px;padding-bottom:1px}.ant-input-group>.ant-select-auto-complete .ant-select-search__field.ant-input-affix-wrapper{display:inline;float:none}.ant-collapse{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";background-color:#fafafa;border:1px solid #d9d9d9;border-bottom:0;border-radius:4px}.ant-collapse>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse>.ant-collapse-item:last-child,.ant-collapse>.ant-collapse-item:last-child>.ant-collapse-header{border-radius:0 0 4px 4px}.ant-collapse>.ant-collapse-item>.ant-collapse-header{position:relative;padding:12px 16px;padding-left:40px;color:rgba(0,0,0,.85);line-height:22px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:50%;left:16px;display:inline-block;font-size:12px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow>*{line-height:1}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{display:inline-block}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow:before{display:none}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow .ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow-icon{display:block}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{-webkit-transition:-webkit-transform .24s;transition:-webkit-transform .24s;transition:transform .24s;transition:transform .24s,-webkit-transform .24s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{float:right}.ant-collapse>.ant-collapse-item>.ant-collapse-header:focus{outline:none}.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-left:12px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header{padding:12px 16px;padding-right:40px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{right:16px;left:auto}.ant-collapse-anim-active{-webkit-transition:height .2s cubic-bezier(.215,.61,.355,1);transition:height .2s cubic-bezier(.215,.61,.355,1)}.ant-collapse-content{overflow:hidden;color:rgba(0,0,0,.65);background-color:#fff;border-top:1px solid #d9d9d9}.ant-collapse-content>.ant-collapse-content-box{padding:16px}.ant-collapse-content-inactive{display:none}.ant-collapse-item:last-child>.ant-collapse-content{border-radius:0 0 4px 4px}.ant-collapse-borderless{background-color:#fafafa;border:0}.ant-collapse-borderless>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse-borderless>.ant-collapse-item:last-child,.ant-collapse-borderless>.ant-collapse-item:last-child .ant-collapse-header{border-radius:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:4px}.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header,.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header>.arrow{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-form{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.ant-form legend{display:block;width:100%;margin-bottom:20px;padding:0;color:rgba(0,0,0,.45);font-size:16px;line-height:inherit;border:0;border-bottom:1px solid #d9d9d9}.ant-form label{font-size:14px}.ant-form input[type=search]{-webkit-box-sizing:border-box;box-sizing:border-box}.ant-form input[type=checkbox],.ant-form input[type=radio]{line-height:normal}.ant-form input[type=file]{display:block}.ant-form input[type=range]{display:block;width:100%}.ant-form select[multiple],.ant-form select[size]{height:auto}.ant-form input[type=checkbox]:focus,.ant-form input[type=file]:focus,.ant-form input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.ant-form output{display:block;padding-top:15px;color:rgba(0,0,0,.65);font-size:14px;line-height:1.5}.ant-form-item-required:before{display:inline-block;margin-right:4px;color:#f5222d;font-size:14px;font-family:SimSun,sans-serif;line-height:1;content:"*"}.ant-form-hide-required-mark .ant-form-item-required:before{display:none}.ant-form-item-label>label{color:rgba(0,0,0,.85)}.ant-form-item-label>label:after{content:":";position:relative;top:-.5px;margin:0 8px 0 2px}.ant-form-item-label>label.ant-form-item-no-colon:after{content:" "}.ant-form-item{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";margin-bottom:24px;vertical-align:top}.ant-form-item label{position:relative}.ant-form-item label>.anticon{font-size:14px;vertical-align:top}.ant-form-item-control{position:relative;line-height:40px;zoom:1}.ant-form-item-control:after,.ant-form-item-control:before{display:table;content:""}.ant-form-item-control:after{clear:both}.ant-form-item-children{position:relative}.ant-form-item-with-help{margin-bottom:5px}.ant-form-item-label{display:inline-block;overflow:hidden;line-height:39.9999px;white-space:nowrap;text-align:right;vertical-align:middle}.ant-form-item-label-left{text-align:left}.ant-form-item .ant-switch{margin:2px 0 4px}.ant-form-explain,.ant-form-extra{clear:both;min-height:22px;margin-top:-2px;color:rgba(0,0,0,.45);font-size:14px;line-height:1.5;-webkit-transition:color .3s cubic-bezier(.215,.61,.355,1);transition:color .3s cubic-bezier(.215,.61,.355,1)}.ant-form-explain{margin-bottom:-1px}.ant-form-extra{padding-top:4px}.ant-form-text{display:inline-block;padding-right:8px}.ant-form-split{display:block;text-align:center}form .has-feedback .ant-input{padding-right:30px}form .has-feedback .ant-input-affix-wrapper .ant-input-suffix{padding-right:18px}form .has-feedback .ant-input-affix-wrapper .ant-input{padding-right:49px}form .has-feedback .ant-input-affix-wrapper.ant-input-affix-wrapper-input-with-clear-btn .ant-input{padding-right:68px}form .has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-arrow,form .has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-selection__clear,form .has-feedback>.ant-select .ant-select-arrow,form .has-feedback>.ant-select .ant-select-selection__clear{right:28px}form .has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-selection-selected-value,form .has-feedback>.ant-select .ant-select-selection-selected-value{padding-right:42px}form .has-feedback .ant-cascader-picker-arrow{margin-right:17px}form .has-feedback .ant-calendar-picker-clear,form .has-feedback .ant-calendar-picker-icon,form .has-feedback .ant-cascader-picker-clear,form .has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix,form .has-feedback .ant-time-picker-clear,form .has-feedback .ant-time-picker-icon{right:28px}form .ant-mentions,form textarea.ant-input{height:auto;margin-bottom:4px}form .ant-upload{background:transparent}form input[type=checkbox],form input[type=radio]{width:14px;height:14px}form .ant-checkbox-inline,form .ant-radio-inline{display:inline-block;margin-left:8px;font-weight:400;vertical-align:middle;cursor:pointer}form .ant-checkbox-inline:first-child,form .ant-radio-inline:first-child{margin-left:0}form .ant-checkbox-vertical,form .ant-radio-vertical{display:block}form .ant-checkbox-vertical+.ant-checkbox-vertical,form .ant-radio-vertical+.ant-radio-vertical{margin-left:0}form .ant-input-number+.ant-form-text{margin-left:8px}form .ant-input-number-handler-wrap{z-index:2}form .ant-cascader-picker,form .ant-select{width:100%}form .ant-input-group .ant-cascader-picker,form .ant-input-group .ant-select{width:auto}form .ant-input-group-wrapper,form :not(.ant-input-group-wrapper)>.ant-input-group{display:inline-block;vertical-align:middle}form:not(.ant-form-vertical) .ant-input-group-wrapper,form:not(.ant-form-vertical) :not(.ant-input-group-wrapper)>.ant-input-group{position:relative;top:-1px}.ant-col-24.ant-form-item-label,.ant-col-xl-24.ant-form-item-label,.ant-form-vertical .ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-24.ant-form-item-label label:after,.ant-col-xl-24.ant-form-item-label label:after,.ant-form-vertical .ant-form-item-label label:after{display:none}.ant-form-vertical .ant-form-item{padding-bottom:8px}.ant-form-vertical .ant-form-item-control{line-height:1.5}.ant-form-vertical .ant-form-explain{margin-top:2px;margin-bottom:-5px}.ant-form-vertical .ant-form-extra{margin-top:2px;margin-bottom:-4px}@media (max-width:575px){.ant-form-item-control-wrapper,.ant-form-item-label{display:block;width:100%}.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-form-item-label label:after{display:none}.ant-col-xs-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-xs-24.ant-form-item-label label:after{display:none}}@media (max-width:767px){.ant-col-sm-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-sm-24.ant-form-item-label label:after{display:none}}@media (max-width:991px){.ant-col-md-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-md-24.ant-form-item-label label:after{display:none}}@media (max-width:1199px){.ant-col-lg-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-lg-24.ant-form-item-label label:after{display:none}}@media (max-width:1599px){.ant-col-xl-24.ant-form-item-label{display:block;margin:0;padding:0 0 8px;line-height:1.5;white-space:normal;text-align:left}.ant-col-xl-24.ant-form-item-label label:after{display:none}}.ant-form-inline .ant-form-item{display:inline-block;margin-right:16px;margin-bottom:0}.ant-form-inline .ant-form-item-with-help{margin-bottom:24px}.ant-form-inline .ant-form-item>.ant-form-item-control-wrapper,.ant-form-inline .ant-form-item>.ant-form-item-label{display:inline-block;vertical-align:top}.ant-form-inline .ant-form-text,.ant-form-inline .has-feedback{display:inline-block}.has-error.has-feedback .ant-form-item-children-icon,.has-success.has-feedback .ant-form-item-children-icon,.has-warning.has-feedback .ant-form-item-children-icon,.is-validating.has-feedback .ant-form-item-children-icon{position:absolute;top:50%;right:0;z-index:1;width:32px;height:20px;margin-top:-10px;font-size:14px;line-height:20px;text-align:center;visibility:visible;-webkit-animation:zoomIn .3s cubic-bezier(.12,.4,.29,1.46);animation:zoomIn .3s cubic-bezier(.12,.4,.29,1.46);pointer-events:none}.has-error.has-feedback .ant-form-item-children-icon svg,.has-success.has-feedback .ant-form-item-children-icon svg,.has-warning.has-feedback .ant-form-item-children-icon svg,.is-validating.has-feedback .ant-form-item-children-icon svg{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.has-success.has-feedback .ant-form-item-children-icon{color:#52c41a;-webkit-animation-name:diffZoomIn1!important;animation-name:diffZoomIn1!important}.has-warning .ant-form-explain,.has-warning .ant-form-split{color:#faad14}.has-warning .ant-input,.has-warning .ant-input:hover{background-color:#fff;border-color:#faad14}.has-warning .ant-input:focus{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-input:not([disabled]):hover{border-color:#faad14}.has-warning .ant-calendar-picker-open .ant-calendar-picker-input{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-input-affix-wrapper .ant-input,.has-warning .ant-input-affix-wrapper .ant-input:hover{background-color:#fff;border-color:#faad14}.has-warning .ant-input-affix-wrapper .ant-input:focus{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled){border-color:#faad14}.has-warning .ant-input-prefix{color:#faad14}.has-warning .ant-input-group-addon{color:#faad14;background-color:#fff;border-color:#faad14}.has-warning .has-feedback{color:#faad14}.has-warning.has-feedback .ant-form-item-children-icon{color:#faad14;-webkit-animation-name:diffZoomIn3!important;animation-name:diffZoomIn3!important}.has-warning .ant-select-selection,.has-warning .ant-select-selection:hover{border-color:#faad14}.has-warning .ant-select-focused .ant-select-selection,.has-warning .ant-select-open .ant-select-selection{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-calendar-picker-icon:after,.has-warning .ant-cascader-picker-arrow,.has-warning .ant-picker-icon:after,.has-warning .ant-select-arrow,.has-warning .ant-time-picker-icon:after{color:#faad14}.has-warning .ant-input-number,.has-warning .ant-time-picker-input{border-color:#faad14}.has-warning .ant-input-number-focused,.has-warning .ant-input-number:focus,.has-warning .ant-time-picker-input-focused,.has-warning .ant-time-picker-input:focus{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-input-number:not([disabled]):hover,.has-warning .ant-time-picker-input:not([disabled]):hover{border-color:#faad14}.has-warning .ant-cascader-picker:focus .ant-cascader-input{border-color:#ffc53d;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(250,173,20,.2);box-shadow:0 0 0 2px rgba(250,173,20,.2)}.has-warning .ant-cascader-picker:hover .ant-cascader-input{border-color:#faad14}.has-error .ant-form-explain,.has-error .ant-form-split{color:#f5222d}.has-error .ant-input,.has-error .ant-input:hover{background-color:#fff;border-color:#f5222d}.has-error .ant-input:focus{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-input:not([disabled]):hover{border-color:#f5222d}.has-error .ant-calendar-picker-open .ant-calendar-picker-input{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-input-affix-wrapper .ant-input,.has-error .ant-input-affix-wrapper .ant-input:hover{background-color:#fff;border-color:#f5222d}.has-error .ant-input-affix-wrapper .ant-input:focus{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled){border-color:#f5222d}.has-error .ant-input-prefix{color:#f5222d}.has-error .ant-input-group-addon{color:#f5222d;background-color:#fff;border-color:#f5222d}.has-error .has-feedback{color:#f5222d}.has-error.has-feedback .ant-form-item-children-icon{color:#f5222d;-webkit-animation-name:diffZoomIn2!important;animation-name:diffZoomIn2!important}.has-error .ant-select-selection,.has-error .ant-select-selection:hover{border-color:#f5222d}.has-error .ant-select-focused .ant-select-selection,.has-error .ant-select-open .ant-select-selection{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-select.ant-select-auto-complete .ant-input:focus{border-color:#f5222d}.has-error .ant-input-group-addon .ant-select-selection{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.has-error .ant-calendar-picker-icon:after,.has-error .ant-cascader-picker-arrow,.has-error .ant-picker-icon:after,.has-error .ant-select-arrow,.has-error .ant-time-picker-icon:after{color:#f5222d}.has-error .ant-input-number,.has-error .ant-time-picker-input{border-color:#f5222d}.has-error .ant-input-number-focused,.has-error .ant-input-number:focus,.has-error .ant-time-picker-input-focused,.has-error .ant-time-picker-input:focus{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-input-number:not([disabled]):hover,.has-error .ant-mention-wrapper .ant-mention-editor,.has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):hover,.has-error .ant-time-picker-input:not([disabled]):hover{border-color:#f5222d}.has-error .ant-cascader-picker:focus .ant-cascader-input,.has-error .ant-mention-wrapper.ant-mention-active:not([disabled]) .ant-mention-editor,.has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):focus{border-color:#ff4d4f;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(245,34,45,.2);box-shadow:0 0 0 2px rgba(245,34,45,.2)}.has-error .ant-cascader-picker:hover .ant-cascader-input,.has-error .ant-transfer-list{border-color:#f5222d}.has-error .ant-transfer-list-search:not([disabled]){border-color:#d9d9d9}.has-error .ant-transfer-list-search:not([disabled]):hover{border-color:#40a9ff;border-right-width:1px!important}.has-error .ant-transfer-list-search:not([disabled]):focus{border-color:#40a9ff;border-right-width:1px!important;outline:0;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.is-validating.has-feedback .ant-form-item-children-icon{display:inline-block;color:#1890ff}.ant-advanced-search-form .ant-form-item{margin-bottom:24px}.ant-advanced-search-form .ant-form-item-with-help{margin-bottom:5px}.show-help-appear,.show-help-enter,.show-help-leave{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.show-help-appear.show-help-appear-active,.show-help-enter.show-help-enter-active{-webkit-animation-name:antShowHelpIn;animation-name:antShowHelpIn;-webkit-animation-play-state:running;animation-play-state:running}.show-help-leave.show-help-leave-active{-webkit-animation-name:antShowHelpOut;animation-name:antShowHelpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.show-help-appear,.show-help-enter{opacity:0}.show-help-appear,.show-help-enter,.show-help-leave{-webkit-animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-timing-function:cubic-bezier(.645,.045,.355,1)}@-webkit-keyframes antShowHelpIn{0%{-webkit-transform:translateY(-5px);transform:translateY(-5px);opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes antShowHelpIn{0%{-webkit-transform:translateY(-5px);transform:translateY(-5px);opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@-webkit-keyframes antShowHelpOut{to{-webkit-transform:translateY(-5px);transform:translateY(-5px);opacity:0}}@keyframes antShowHelpOut{to{-webkit-transform:translateY(-5px);transform:translateY(-5px);opacity:0}}@-webkit-keyframes diffZoomIn1{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes diffZoomIn1{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes diffZoomIn2{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes diffZoomIn2{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes diffZoomIn3{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes diffZoomIn3{0%{-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform:scale(1);transform:scale(1)}}.ant-modal{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;top:100px;width:auto;margin:0 auto;padding-bottom:24px;pointer-events:none}.ant-modal-wrap{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;overflow:auto;outline:0;-webkit-overflow-scrolling:touch}.ant-modal-title{margin:0;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;line-height:22px;word-wrap:break-word}.ant-modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:0;border-radius:4px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15);pointer-events:auto}.ant-modal-close{position:absolute;top:0;right:0;z-index:10;padding:0;color:rgba(0,0,0,.45);font-weight:700;line-height:1;text-decoration:none;background:transparent;border:0;outline:0;cursor:pointer;-webkit-transition:color .3s;transition:color .3s}.ant-modal-close-x{display:block;width:56px;height:56px;font-size:16px;font-style:normal;line-height:56px;text-align:center;text-transform:none;text-rendering:auto}.ant-modal-close:focus,.ant-modal-close:hover{color:rgba(0,0,0,.75);text-decoration:none}.ant-modal-header{padding:16px 24px;color:rgba(0,0,0,.65);background:#fff;border-bottom:1px solid #e8e8e8;border-radius:4px 4px 0 0}.ant-modal-body{padding:24px;font-size:14px;line-height:1.5;word-wrap:break-word}.ant-modal-footer{padding:10px 16px;text-align:right;background:transparent;border-top:1px solid #e8e8e8;border-radius:0 0 4px 4px}.ant-modal-footer button+button{margin-bottom:0;margin-left:8px}.ant-modal.zoom-appear,.ant-modal.zoom-enter{-webkit-transform:none;transform:none;opacity:0;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;height:100%;background-color:rgba(0,0,0,.45);filter:alpha(opacity=50)}.ant-modal-mask-hidden{display:none}.ant-modal-open{overflow:hidden}.ant-modal-centered{text-align:center}.ant-modal-centered:before{display:inline-block;width:0;height:100%;vertical-align:middle;content:""}.ant-modal-centered .ant-modal{top:0;display:inline-block;text-align:left;vertical-align:middle}@media (max-width:767px){.ant-modal{max-width:calc(100vw - 16px);margin:8px auto}.ant-modal-centered .ant-modal{-webkit-box-flex:1;-ms-flex:1;flex:1}}.ant-modal-confirm .ant-modal-header{display:none}.ant-modal-confirm .ant-modal-body{padding:32px 32px 24px}.ant-modal-confirm-body-wrapper{zoom:1}.ant-modal-confirm-body-wrapper:after,.ant-modal-confirm-body-wrapper:before{display:table;content:""}.ant-modal-confirm-body-wrapper:after{clear:both}.ant-modal-confirm-body .ant-modal-confirm-title{display:block;overflow:hidden;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;line-height:1.4}.ant-modal-confirm-body .ant-modal-confirm-content{margin-top:8px;color:rgba(0,0,0,.65);font-size:14px}.ant-modal-confirm-body>.anticon{float:left;margin-right:16px;font-size:22px}.ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-left:38px}.ant-modal-confirm .ant-modal-confirm-btns{float:right;margin-top:24px}.ant-modal-confirm .ant-modal-confirm-btns button+button{margin-bottom:0;margin-left:8px}.ant-modal-confirm-error .ant-modal-confirm-body>.anticon{color:#f5222d}.ant-modal-confirm-confirm .ant-modal-confirm-body>.anticon,.ant-modal-confirm-warning .ant-modal-confirm-body>.anticon{color:#faad14}.ant-modal-confirm-info .ant-modal-confirm-body>.anticon{color:#1890ff}.ant-modal-confirm-success .ant-modal-confirm-body>.anticon{color:#52c41a}.ant-badge{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;color:unset;line-height:1}.ant-badge-count{min-width:20px;height:20px;padding:0 6px;color:#fff;font-weight:400;font-size:12px;line-height:20px;white-space:nowrap;text-align:center;background:#f5222d;border-radius:10px;-webkit-box-shadow:0 0 0 1px #fff;box-shadow:0 0 0 1px #fff}.ant-badge-count a,.ant-badge-count a:hover{color:#fff}.ant-badge-multiple-words{padding:0 8px}.ant-badge-dot{width:6px;height:6px;background:#f5222d;border-radius:100%;-webkit-box-shadow:0 0 0 1px #fff;box-shadow:0 0 0 1px #fff}.ant-badge-count,.ant-badge-dot,.ant-badge .ant-scroll-number-custom-component{position:absolute;top:0;right:0;z-index:1;-webkit-transform:translate(50%,-50%);transform:translate(50%,-50%);-webkit-transform-origin:100% 0;transform-origin:100% 0}.ant-badge-status{line-height:inherit;vertical-align:baseline}.ant-badge-status-dot{position:relative;top:-1px;display:inline-block;width:6px;height:6px;vertical-align:middle;border-radius:50%}.ant-badge-status-success{background-color:#52c41a}.ant-badge-status-processing{position:relative;background-color:#1890ff}.ant-badge-status-processing:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:50%;-webkit-animation:antStatusProcessing 1.2s ease-in-out infinite;animation:antStatusProcessing 1.2s ease-in-out infinite;content:""}.ant-badge-status-default{background-color:#d9d9d9}.ant-badge-status-error{background-color:#f5222d}.ant-badge-status-warning{background-color:#faad14}.ant-badge-status-magenta,.ant-badge-status-pink{background:#eb2f96}.ant-badge-status-red{background:#f5222d}.ant-badge-status-volcano{background:#fa541c}.ant-badge-status-orange{background:#fa8c16}.ant-badge-status-yellow{background:#fadb14}.ant-badge-status-gold{background:#faad14}.ant-badge-status-cyan{background:#13c2c2}.ant-badge-status-lime{background:#a0d911}.ant-badge-status-green{background:#52c41a}.ant-badge-status-blue{background:#1890ff}.ant-badge-status-geekblue{background:#2f54eb}.ant-badge-status-purple{background:#722ed1}.ant-badge-status-text{margin-left:8px;color:rgba(0,0,0,.65);font-size:14px}.ant-badge-zoom-appear,.ant-badge-zoom-enter{-webkit-animation:antZoomBadgeIn .3s cubic-bezier(.12,.4,.29,1.46);animation:antZoomBadgeIn .3s cubic-bezier(.12,.4,.29,1.46);-webkit-animation-fill-mode:both;animation-fill-mode:both}.ant-badge-zoom-leave{-webkit-animation:antZoomBadgeOut .3s cubic-bezier(.71,-.46,.88,.6);animation:antZoomBadgeOut .3s cubic-bezier(.71,-.46,.88,.6);-webkit-animation-fill-mode:both;animation-fill-mode:both}.ant-badge-not-a-wrapper:not(.ant-badge-status){vertical-align:middle}.ant-badge-not-a-wrapper .ant-scroll-number{position:relative;top:auto;display:block}.ant-badge-not-a-wrapper .ant-badge-count{-webkit-transform:none;transform:none}@-webkit-keyframes antStatusProcessing{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:.5}to{-webkit-transform:scale(2.4);transform:scale(2.4);opacity:0}}@keyframes antStatusProcessing{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:.5}to{-webkit-transform:scale(2.4);transform:scale(2.4);opacity:0}}.ant-scroll-number{overflow:hidden}.ant-scroll-number-only{display:inline-block;height:20px;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-scroll-number-only>p.ant-scroll-number-only-unit{height:20px;margin:0}.ant-scroll-number-symbol{vertical-align:top}@-webkit-keyframes antZoomBadgeIn{0%{-webkit-transform:scale(0) translate(50%,-50%);transform:scale(0) translate(50%,-50%);opacity:0}to{-webkit-transform:scale(1) translate(50%,-50%);transform:scale(1) translate(50%,-50%)}}@keyframes antZoomBadgeIn{0%{-webkit-transform:scale(0) translate(50%,-50%);transform:scale(0) translate(50%,-50%);opacity:0}to{-webkit-transform:scale(1) translate(50%,-50%);transform:scale(1) translate(50%,-50%)}}@-webkit-keyframes antZoomBadgeOut{0%{-webkit-transform:scale(1) translate(50%,-50%);transform:scale(1) translate(50%,-50%)}to{-webkit-transform:scale(0) translate(50%,-50%);transform:scale(0) translate(50%,-50%);opacity:0}}@keyframes antZoomBadgeOut{0%{-webkit-transform:scale(1) translate(50%,-50%);transform:scale(1) translate(50%,-50%)}to{-webkit-transform:scale(0) translate(50%,-50%);transform:scale(0) translate(50%,-50%);opacity:0}}.ant-card{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;background:#fff;border-radius:2px;-webkit-transition:all .3s;transition:all .3s}.ant-card-hoverable{cursor:pointer}.ant-card-hoverable:hover{border-color:rgba(0,0,0,.09);-webkit-box-shadow:0 2px 8px rgba(0,0,0,.09);box-shadow:0 2px 8px rgba(0,0,0,.09)}.ant-card-bordered{border:1px solid #e8e8e8}.ant-card-head{min-height:48px;margin-bottom:-1px;padding:0 24px;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;background:transparent;border-bottom:1px solid #e8e8e8;border-radius:2px 2px 0 0;zoom:1}.ant-card-head:after,.ant-card-head:before{display:table;content:""}.ant-card-head:after{clear:both}.ant-card-head-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ant-card-head-title{display:inline-block;-webkit-box-flex:1;-ms-flex:1;flex:1;padding:16px 0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-card-head .ant-tabs{clear:both;margin-bottom:-17px;color:rgba(0,0,0,.65);font-weight:400;font-size:14px}.ant-card-head .ant-tabs-bar{border-bottom:1px solid #e8e8e8}.ant-card-extra{float:right;margin-left:auto;padding:16px 0;color:rgba(0,0,0,.65);font-weight:400;font-size:14px}.ant-card-body{padding:24px;zoom:1}.ant-card-body:after,.ant-card-body:before{display:table;content:""}.ant-card-body:after{clear:both}.ant-card-contain-grid:not(.ant-card-loading) .ant-card-body{margin:-1px 0 0 -1px;padding:0}.ant-card-grid{float:left;width:33.33%;padding:24px;border:0;border-radius:0;-webkit-box-shadow:1px 0 0 0 #e8e8e8,0 1px 0 0 #e8e8e8,1px 1px 0 0 #e8e8e8,1px 0 0 0 #e8e8e8 inset,0 1px 0 0 #e8e8e8 inset;box-shadow:1px 0 0 0 #e8e8e8,0 1px 0 0 #e8e8e8,1px 1px 0 0 #e8e8e8,inset 1px 0 0 0 #e8e8e8,inset 0 1px 0 0 #e8e8e8;-webkit-transition:all .3s;transition:all .3s}.ant-card-grid-hoverable:hover{position:relative;z-index:1;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.ant-card-contain-tabs>.ant-card-head .ant-card-head-title{min-height:32px;padding-bottom:0}.ant-card-contain-tabs>.ant-card-head .ant-card-extra{padding-bottom:0}.ant-card-cover>*{display:block;width:100%}.ant-card-cover img{border-radius:2px 2px 0 0}.ant-card-actions{margin:0;padding:0;list-style:none;background:#fafafa;border-top:1px solid #e8e8e8;zoom:1}.ant-card-actions:after,.ant-card-actions:before{display:table;content:""}.ant-card-actions:after{clear:both}.ant-card-actions>li{float:left;margin:12px 0;color:rgba(0,0,0,.45);text-align:center}.ant-card-actions>li>span{position:relative;display:block;min-width:32px;font-size:14px;line-height:22px;cursor:pointer}.ant-card-actions>li>span:hover{color:#1890ff;-webkit-transition:color .3s;transition:color .3s}.ant-card-actions>li>span>.anticon,.ant-card-actions>li>span a:not(.ant-btn){display:inline-block;width:100%;color:rgba(0,0,0,.45);line-height:22px;-webkit-transition:color .3s;transition:color .3s}.ant-card-actions>li>span>.anticon:hover,.ant-card-actions>li>span a:not(.ant-btn):hover{color:#1890ff}.ant-card-actions>li>span>.anticon{font-size:16px;line-height:22px}.ant-card-actions>li:not(:last-child){border-right:1px solid #e8e8e8}.ant-card-type-inner .ant-card-head{padding:0 24px;background:#fafafa}.ant-card-type-inner .ant-card-head-title{padding:12px 0;font-size:14px}.ant-card-type-inner .ant-card-body{padding:16px 24px}.ant-card-type-inner .ant-card-extra{padding:13.5px 0}.ant-card-meta{margin:-4px 0;zoom:1}.ant-card-meta:after,.ant-card-meta:before{display:table;content:""}.ant-card-meta:after{clear:both}.ant-card-meta-avatar{float:left;padding-right:16px}.ant-card-meta-detail{overflow:hidden}.ant-card-meta-detail>div:not(:last-child){margin-bottom:8px}.ant-card-meta-title{overflow:hidden;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;white-space:nowrap;text-overflow:ellipsis}.ant-card-meta-description{color:rgba(0,0,0,.45)}.ant-card-loading{overflow:hidden}.ant-card-loading .ant-card-body{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-card-loading-content p{margin:0}.ant-card-loading-block{height:14px;margin:4px 0;background:-webkit-gradient(linear,left top,right top,from(rgba(207,216,220,.2)),color-stop(rgba(207,216,220,.4)),to(rgba(207,216,220,.2)));background:linear-gradient(90deg,rgba(207,216,220,.2),rgba(207,216,220,.4),rgba(207,216,220,.2));background-size:600% 600%;border-radius:2px;-webkit-animation:card-loading 1.4s ease infinite;animation:card-loading 1.4s ease infinite}@-webkit-keyframes card-loading{0%,to{background-position:0 50%}50%{background-position:100% 50%}}@keyframes card-loading{0%,to{background-position:0 50%}50%{background-position:100% 50%}}.ant-card-small>.ant-card-head{min-height:36px;padding:0 12px;font-size:14px}.ant-card-small>.ant-card-head>.ant-card-head-wrapper>.ant-card-head-title{padding:8px 0}.ant-card-small>.ant-card-head>.ant-card-head-wrapper>.ant-card-extra{padding:8px 0;font-size:14px}.ant-card-small>.ant-card-body{padding:12px}.ant-message{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.65);font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:fixed;top:16px;left:0;z-index:1010;width:100%;pointer-events:none}.ant-message-notice{padding:8px;text-align:center}.ant-message-notice:first-child{margin-top:-8px}.ant-message-notice-content{display:inline-block;padding:10px 16px;background:#fff;border-radius:4px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15);pointer-events:all}.ant-message-success .anticon{color:#52c41a}.ant-message-error .anticon{color:#f5222d}.ant-message-warning .anticon{color:#faad14}.ant-message-info .anticon,.ant-message-loading .anticon{color:#1890ff}.ant-message .anticon{position:relative;top:1px;margin-right:8px;font-size:16px}.ant-message-notice.move-up-leave.move-up-leave-active{overflow:hidden;-webkit-animation-name:MessageMoveOut;animation-name:MessageMoveOut;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1}to{max-height:0;padding:0;opacity:0}}@keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1}to{max-height:0;padding:0;opacity:0}} \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/chunk-vendors.f24a310a.css.gz b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/chunk-vendors.f24a310a.css.gz new file mode 100644 index 0000000..7122074 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/css/chunk-vendors.f24a310a.css.gz differ diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/fontawesome-webfont.706450d7.ttf b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/fontawesome-webfont.706450d7.ttf new file mode 100644 index 0000000..ed9372f Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/fontawesome-webfont.706450d7.ttf differ diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/fontawesome-webfont.97493d3f.woff2 b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/fontawesome-webfont.97493d3f.woff2 new file mode 100644 index 0000000..3311d58 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/fontawesome-webfont.97493d3f.woff2 differ diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/fontawesome-webfont.d9ee23d5.woff b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/fontawesome-webfont.d9ee23d5.woff new file mode 100644 index 0000000..8b280b9 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/fontawesome-webfont.d9ee23d5.woff differ diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/fontawesome-webfont.f7c2b4b7.eot b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/fontawesome-webfont.f7c2b4b7.eot new file mode 100644 index 0000000..33b2bb8 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/fontawesome-webfont.f7c2b4b7.eot differ diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/iconfont.4ca3d0c0.ttf b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/iconfont.4ca3d0c0.ttf new file mode 100644 index 0000000..a8cfd6c Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/iconfont.4ca3d0c0.ttf differ diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/iconfont.e2d2b98e.eot b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/iconfont.e2d2b98e.eot new file mode 100644 index 0000000..6e21a4a Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/fonts/iconfont.e2d2b98e.eot differ diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/editormd-logo.84b6c2a9.svg b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/editormd-logo.84b6c2a9.svg new file mode 100644 index 0000000..cce729b --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/editormd-logo.84b6c2a9.svg @@ -0,0 +1,11 @@ + + + +Generated by IcoMoon + + + + + + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/fontawesome-webfont.139e74e2.svg b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/fontawesome-webfont.139e74e2.svg new file mode 100644 index 0000000..1ee89d4 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/fontawesome-webfont.139e74e2.svg @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/iconfont.dd63dc33.svg b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/iconfont.dd63dc33.svg new file mode 100644 index 0000000..95a2834 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/iconfont.dd63dc33.svg @@ -0,0 +1,56 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/loading.c929501e.gif b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/loading.c929501e.gif new file mode 100644 index 0000000..3aa9c85 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/loading.c929501e.gif differ diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/loading@2x.695405a9.gif b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/loading@2x.695405a9.gif new file mode 100644 index 0000000..bcc021e Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/loading@2x.695405a9.gif differ diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/loading@3x.65eacf61.gif b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/loading@3x.65eacf61.gif new file mode 100644 index 0000000..216aa5a Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/img/loading@3x.65eacf61.gif differ diff --git a/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/js/app.5b399b50.js b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/js/app.5b399b50.js new file mode 100644 index 0000000..7466458 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/dist/knife4jui/js/app.5b399b50.js @@ -0,0 +1 @@ +!function(e){function t(t){for(var a,r,o=t[0],l=t[1],c=t[2],p=0,d=[];p0?null===(n=this.$store.state.globals.swaggerCurrentInstance.swaggerData.servers[0].extensions)||void 0===n?void 0:n.copyright:""}},watch:{language:function(e,t){this.initI18n()}},beforeCreate:function(){this.form=this.$form.createForm(this,{name:"oauth_form"})},data:function(){return{pagination:!1,labelCol:{xs:{span:26},sm:{span:5}},wrapperCol:{xs:{span:26},sm:{span:18}},securityKeyFlag:!1,oauthFlag:!1,oauth:null,columns:[],globalSecuritys:[],globalSecurityObject:{},securityArr:[]}},methods:{getCurrentI18nInstance:function(){return this.$i18n.messages[this.language]},userChange:function(e){this.oauth.username=e.target.value},pwdChange:function(e){this.oauth.password=e.target.value},clientChage:function(e){this.oauth.clientId=e.target.value},clientSecretChage:function(e){this.oauth.clientSecret=e.target.value},initI18n:function(){var e=this.getCurrentI18nInstance();this.columns=e.table.authHeaderColumns},auth:function(){var e=this;if("password"==this.oauth.grantType){if(r.a.strBlank(this.oauth.username))return this.$message.info("username can't empty!!!"),!1;if(r.a.strBlank(this.oauth.password))return this.$message.info("password can't empty!!!"),!1}if(r.a.strBlank(this.oauth.clientId))return this.$message.info("clientId can't empty!!!"),!1;if(("accessCode"==this.oauth.grantType||"password"==this.oauth.grantType||"application"==this.oauth.grantType||"client_credentials"==this.oauth.grantType)&&r.a.strBlank(this.oauth.clientSecret))return this.$message.info("clientSecret can't empty!!!"),!1;if("implicit"==this.oauth.grantType||"accessCode"==this.oauth.grantType){var t=this.oauth.authorizeUrl,n=new Array,a=window.location,s=a.origin+a.pathname;(s=s.replace("/doc.html","")).endsWith("/")?s+=r.a.getOAuth2Html(!0):s=s+"/"+r.a.getOAuth2Html(!0);var o=encodeURIComponent(s);if(this.oauth.redirectUri=o,"implicit"==this.oauth.grantType){n.push("response_type=token"),n.push("client_id="+this.oauth.clientId),n.push("redirect_uri="+o),n.push("state=SELF"+this.oauth.state);var c=n.join("&");t=t.indexOf("?")>=0?t+"&"+c:t+"?"+c}else"accessCode"==this.oauth.grantType&&(n.push("response_type=code"),n.push("client_id="+this.oauth.clientId),n.push("redirect_uri="+o),n.push("state=SELF"+this.oauth.state),c=n.join("&"),t=t.indexOf("?")>=0?t+"&"+c:t+"?"+c);this.oauth.sync(),window.open(t)}else if("password"==this.oauth.grantType){var p=i.a.create(),u={grant_type:"password",username:this.oauth.username,password:this.oauth.password},d={url:this.oauth.tokenUrl,method:"post",auth:{username:this.oauth.clientId,password:this.oauth.clientSecret},params:null,timeout:0,data:l.a.stringify(u)};p.request(d).then((function(t){var n=t.data;e.oauth.accessToken=n.token_type+" "+n.access_token,e.oauth.tokenType=n.token_type,e.oauth.granted=!0,e.oauth.sync(),e.$message.info("SUCCESS")})).catch((function(t){t.response||e.$message.error(t.message)}))}else if("application"==this.oauth.grantType||"client_credentials"==this.oauth.grantType){var h=i.a.create();u={grant_type:"client_credentials"},d={url:this.oauth.tokenUrl,method:"post",auth:{username:this.oauth.clientId,password:this.oauth.clientSecret},params:null,timeout:0,data:l.a.stringify(u)},h.request(d).then((function(t){var n=t.data;e.oauth.accessToken=n.token_type+" "+n.access_token,e.oauth.tokenType=n.token_type,e.oauth.granted=!0,e.oauth.sync(),e.$message.info("SUCCESS")})).catch((function(t){t.response||e.$message.error(t.message)}))}},initLocalOAuth:function(){var e=this.data.instance.oauths;r.a.checkUndefined(e)&&(this.oauthFlag=!0,this.oauth=e)},initLocalSecuritys:function(){var e=this,t=this;t.initLocalOAuth();var n=t.data.instance.securityArrs;r.a.arrNotEmpty(n)&&(this.securityKeyFlag=!0);var s=a.a.globalSecurityParamPrefix+this.data.instance.id,i=[];this.$localStore.getItem(a.a.globalSecurityParameterObject).then((function(a){r.a.arrNotEmpty(n)&&e.$localStore.getItem(s).then((function(e){if(r.a.checkUndefined(e)){var s=[];n.forEach((function(t){var n=e.filter((function(e){return e.id==t.id}));n.length>0?r.a.strNotBlank(t.value)?s.push(t):s.push(n[0]):s.push(t)})),t.securityArr=s}else t.securityArr=n;r.a.checkUndefined(a)?(t.globalSecurityObject=a,i=i.concat(a),t.securityArr.forEach((function(e){var n=a[e.id];r.a.checkUndefined(n)?e.value=n:t.globalSecurityObject[e.id]=e.value}))):t.securityArr.forEach((function(e){t.globalSecurityObject[e.id]=e.value})),t.storeToLocalIndexDB()}))}))},storeToLocalIndexDB:function(){var e=a.a.globalSecurityParamPrefix+this.data.instance.id;this.$localStore.setItem(e,this.securityArr),this.$localStore.setItem(a.a.globalSecurityParameterObject,this.globalSecurityObject)},resetAuth:function(){this.oauthFlag&&this.resetOAuth2(),this.securityKeyFlag&&this.resetCommonSecurtyAuth(),this.$message.info("SUCCESS")},resetOAuth2:function(){this.oauth.clear()},resetCommonSecurtyAuth:function(){var e=this,t=this.securityArr;r.a.arrNotEmpty(t)&&(t.forEach((function(t){t.value="",e.globalSecurityObject[t.id]=""})),this.securityArr=t,this.storeToLocalIndexDB())},authParamChange:function(e){var t=this,n=e.target,a=n.getAttribute("data-id"),r=n.value;this.securityArr.forEach((function(e){e.id==a&&(e.value=r,t.globalSecurityObject[e.id]=r)})),this.storeToLocalIndexDB()}},created:function(){this.initI18n(),this.initLocalSecuritys()}},p=(n("7b2b"),n("2877")),u=Object(p.a)(c,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("a-layout-content",{class:["knife4j-body-content",e.copyright?"":"knife4j-body-content--no-fotter"]},[n("div",{staticClass:"authorize"},[n("a-row",[n("a-button",{attrs:{type:"primary"},domProps:{innerHTML:e._s(e.$t("auth.cancel"))},on:{click:e.resetAuth}},[e._v("注销")])],1),e.securityKeyFlag?n("a-row",{staticStyle:{"margin-top":"15px"}},[n("a-table",{attrs:{size:"small",columns:e.columns,dataSource:e.securityArr,pagination:e.pagination,bordered:""},scopedSlots:e._u([{key:"paramIpt",fn:function(t,a){return[n("a-input",{attrs:{value:t,"data-id":a.id},on:{change:e.authParamChange}})]}}],null,!1,2906681342)})],1):e._e(),e.oauthFlag?n("a-row",{staticStyle:{"margin-top":"15px"}},[n("a-card",{attrs:{title:"OAuth2"}},[n("a-row",[n("a-col",{attrs:{span:4}},[e._v("Flow")]),n("a-col",{attrs:{span:18}},[n("a-input",{attrs:{id:"grant","read-only":"read-only",defaultValue:e.oauth.grantType}})],1)],1),"accessCode"==e.oauth.grantType||"implicit"==e.oauth.grantType?n("a-row",{staticStyle:{"margin-top":"15px"}},[n("a-col",{attrs:{span:4}},[e._v("Authorization URL")]),n("a-col",{attrs:{span:18}},[n("a-input",{attrs:{id:"authorizeUrl","read-only":"read-only",defaultValue:e.oauth.authorizeUrl}})],1)],1):e._e(),"password"==e.oauth.grantType||"application"==this.oauth.grantType||"client_credentials"==this.oauth.grantType?n("a-row",{staticStyle:{"margin-top":"15px"}},[n("a-col",{attrs:{span:4}},[e._v("Token URL")]),n("a-col",{attrs:{span:18}},[n("a-input",{attrs:{id:"tokenUrl","read-only":"read-only",defaultValue:e.oauth.tokenUrl}})],1)],1):e._e(),"password"==e.oauth.grantType?n("a-row",{staticStyle:{"margin-top":"15px"}},[n("a-col",{attrs:{span:4}},[e._v("username")]),n("a-col",{attrs:{span:18}},[n("a-input",{attrs:{id:"username",value:e.oauth.username},on:{change:e.userChange}})],1)],1):e._e(),"password"==e.oauth.grantType?n("a-row",{staticStyle:{"margin-top":"15px"}},[n("a-col",{attrs:{span:4}},[e._v("password")]),n("a-col",{attrs:{span:18}},[n("a-input",{attrs:{id:"password",type:"password",value:e.oauth.password},on:{change:e.pwdChange}})],1)],1):e._e(),n("a-row",{staticStyle:{"margin-top":"15px"}},[n("a-col",{attrs:{span:4}},[e._v("clientId")]),n("a-col",{attrs:{span:18}},[n("a-input",{attrs:{value:e.oauth.clientId},on:{change:e.clientChage}})],1)],1),"accessCode"==e.oauth.grantType||"password"==e.oauth.grantType||"application"==this.oauth.grantType||"client_credentials"==this.oauth.grantType?n("a-row",{staticStyle:{"margin-top":"15px"}},[n("a-col",{attrs:{span:4}},[e._v("clientSecret")]),n("a-col",{attrs:{span:18}},[n("a-input",{attrs:{value:e.oauth.clientSecret},on:{change:e.clientSecretChage}})],1)],1):e._e(),n("a-row",{staticStyle:{"margin-top":"15px"}},[n("a-col",{attrs:{span:4}}),n("a-col",{attrs:{span:18}},[n("a-button",{attrs:{type:"primary"},on:{click:e.auth}},[e._v("Authorize")])],1)],1)],1)],1):e._e()],1)])}),[],!1,null,"470e7fd6",null);t.default=u.exports},"0640":function(e,t,n){"use strict";n("eb84")},"070b":function(e,t,n){},"0957":function(e,t,n){},"0d66":function(e,t,n){"use strict";n("ec35")},1:function(e,t){},1067:function(e,t,n){},"121c":function(e,t,n){"use strict";n.r(t);var a=(n("d3b7"),n("3ca3"),n("ddb0"),{props:{data:{type:Object}},components:{Markdown:function(){return n.e("chunk-2d0d0b98").then(n.bind(null,"68cc"))}},computed:{swaggerCurrentInstance:function(){return this.$store.state.globals.swaggerCurrentInstance},settings:function(){return this.$store.state.globals.settings},copyright:function(){var e,t,n,a=null===(e=this.$store.state.globals.swaggerCurrentInstance)||void 0===e||null===(t=e.swaggerData)||void 0===t?void 0:t.servers;return a&&a.length>0?null===(n=this.$store.state.globals.swaggerCurrentInstance.swaggerData.servers[0].extensions)||void 0===n?void 0:n.copyright:""}},data:function(){return{title:"knife4j"}},created:function(){}}),r=(n("51ce"),n("2877")),s=Object(r.a)(a,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("a-layout-content",{class:["knife4j-body-content",e.copyright?"":"knife4j-body-content--no-fotter"]},[this.settings.enableHomeCustom?n("a-row",{staticClass:"markdown-body editormd-preview-container"},[n("Markdown",{attrs:{source:e.settings.homeCustomLocation}})],1):n("a-row",[n("a-col",{attrs:{span:24}},[n("div",{staticClass:"title"},[n("h2",[e._v(e._s(e.swaggerCurrentInstance.title))])]),n("div",{staticClass:"description"},[n("a-row",{staticClass:"content-line"},[n("a-col",{attrs:{span:5}},[n("h3",{domProps:{innerHTML:e._s(e.$t("homePage.description"))}})]),n("a-col",{attrs:{span:19}},[n("span",{domProps:{innerHTML:e._s(e.swaggerCurrentInstance.description)}})])],1),n("a-divider",{staticClass:"divider"}),n("a-row",{staticClass:"content-line"},[n("a-col",{attrs:{span:5}},[n("h3",{domProps:{innerHTML:e._s(e.$t("homePage.author"))}})]),n("a-col",{attrs:{span:19}},[n("span",{domProps:{innerHTML:e._s(e.swaggerCurrentInstance.contact)}})])],1),n("a-divider",{staticClass:"divider"}),n("a-row",{staticClass:"content-line"},[n("a-col",{attrs:{span:5}},[n("h3",{domProps:{innerHTML:e._s(e.$t("homePage.version"))}})]),n("a-col",{attrs:{span:19}},[n("span",{domProps:{innerHTML:e._s(e.swaggerCurrentInstance.version)}})])],1),n("a-divider",{staticClass:"divider"}),n("a-row",{staticClass:"content-line"},[n("a-col",{attrs:{span:5}},[n("h3",{domProps:{innerHTML:e._s(e.$t("homePage.host"))}})]),n("a-col",{attrs:{span:19}},[n("a",{attrs:{href:e.swaggerCurrentInstance.host,target:"_blank"}},[e._v(e._s(e.swaggerCurrentInstance.host))])])],1),n("a-divider",{staticClass:"divider"}),n("a-row",{staticClass:"content-line"},[n("a-col",{attrs:{span:5}},[n("h3",{domProps:{innerHTML:e._s(e.$t("homePage.basePath"))}})]),n("a-col",{attrs:{span:19}},[n("span",{domProps:{innerHTML:e._s(e.swaggerCurrentInstance.basePath)}})])],1),n("a-divider",{staticClass:"divider"}),n("a-row",{staticClass:"content-line"},[n("a-col",{attrs:{span:5}},[n("h3",{domProps:{innerHTML:e._s(e.$t("homePage.serviceUrl"))}})]),n("a-col",{attrs:{span:19}},[n("span",{domProps:{innerHTML:e._s(e.swaggerCurrentInstance.termsOfService)}})])],1),n("a-divider",{staticClass:"divider"}),n("a-row",{staticClass:"content-line"},[n("a-col",{attrs:{span:5}},[n("h3",{domProps:{innerHTML:e._s(e.$t("homePage.groupName"))}})]),n("a-col",{attrs:{span:19}},[n("span",{domProps:{innerHTML:e._s(e.swaggerCurrentInstance.name)}})])],1),n("a-divider",{staticClass:"divider"}),n("a-row",{staticClass:"content-line"},[n("a-col",{attrs:{span:5}},[n("h3",{domProps:{innerHTML:e._s(e.$t("homePage.groupUrl"))}})]),n("a-col",{attrs:{span:19}},[n("a",{attrs:{href:e.swaggerCurrentInstance.url,target:"_blank"}},[e._v(e._s(e.swaggerCurrentInstance.url))])])],1),n("a-divider",{staticClass:"divider"}),n("a-row",{staticClass:"content-line"},[n("a-col",{attrs:{span:5}},[n("h3",{domProps:{innerHTML:e._s(e.$t("homePage.groupLocation"))}})]),n("a-col",{attrs:{span:19}},[n("span",{domProps:{innerHTML:e._s(e.swaggerCurrentInstance.location)}})])],1),n("a-divider",{staticClass:"divider"}),n("a-row",{staticClass:"content-line"},[n("a-col",{attrs:{span:5}},[n("h3",{domProps:{innerHTML:e._s(e.$t("homePage.apiCountNumber"))}})]),n("a-col",{attrs:{span:19}},e._l(e.swaggerCurrentInstance.pathArrs,(function(t){return n("a-row",{key:t.method,staticClass:"content-line-count"},[n("a-col",{attrs:{span:3}},[e._v(" "+e._s(t.method)+" ")]),n("a-col",{attrs:{span:2}},[n("a-tag",{attrs:{color:"#108ee9"}},[e._v(e._s(t.count))])],1),n("a-divider",{staticClass:"divider-count"})],1)})),1)],1)],1)])],1)],1)}),[],!1,null,"ab295f52",null);t.default=s.exports},1469:function(e,t,n){"use strict";n("d3b7"),n("ddb0");var a=n("a002"),r=n.n(a),s={getItem:function(e){return new Promise((function(t,n){r.a.getItem(e).then((function(e){t(e)})).catch((function(e){n(e)}))}))},setItem:function(e,t){return new Promise((function(n,a){r.a.setItem(e,t).then((function(e){n(e)})).catch((function(e){a(e)}))}))},removeItem:function(e){return new Promise((function(t,n){r.a.removeItem(e).then((function(){t()})).catch((function(e){n(e)}))}))},clear:function(){return new Promise((function(e,t){r.a.clear().then((function(){e()})).catch((function(e){t(e)}))}))},length:function(){return new Promise((function(e,t){r.a.length().then((function(t){e(t)})).catch((function(e){t(e)}))}))},key:function(e){return new Promise((function(t,n){r.a.key(e).then((function(e){t(e)})).catch((function(e){n(e)}))}))},keys:function(){return new Promise((function(e,t){r.a.keys().then((function(t){e(t)})).catch((function(e){t(e)}))}))},iterate:function(){return new Promise((function(e,t){r.a.iterate((function(t,n,a){e([t,n,a])})).then((function(t){e(t)})).catch((function(e){t(e)}))}))},setDriver:function(e){return new Promise((function(t,n){t(r.a.setDriver(e))}))},config:function(e){return new Promise((function(t,n){t(r.a.config(e))}))},createInstance:function(e){return new Promise((function(t,n){t(r.a.createInstance(e))}))}},i=new(n("2b0e").a)({name:"localStore",methods:s});t.a=i},"15eb":function(e,t,n){"use strict";n("070b")},"162a":function(e,t,n){},"18bf":function(e,t,n){"use strict";n("0957")},"1b23":function(e,t,n){},"1be9":function(e,t,n){"use strict";n("9c80")},2:function(e,t){},"21e3":function(e,t,n){"use strict";n("c086")},2395:function(e,t,n){},"2d50":function(e,t,n){},"2ee0":function(e,t,n){},3:function(e,t){},3114:function(e,t,n){"use strict";n("bfb9")},"32ba":function(e,t,n){},"3bbc":function(e,t,n){"use strict";n.r(t);var a=n("5530"),r=(n("d3b7"),n("3ca3"),n("ddb0"),n("99af"),n("159b"),n("4e82"),n("a4d3"),n("e01a"),n("b0c0"),n("e9c4"),n("ac1f"),n("5319"),n("00b4"),n("b1c7")),s=n("5609"),i=[{title:"参数名称",dataIndex:"name",width:"30%"},{title:"参数说明",dataIndex:"description",width:"25%"},{title:"请求类型",dataIndex:"in",scopedSlots:{customRender:"typeTemplate"}},{title:"是否必须",dataIndex:"require",scopedSlots:{customRender:"requireTemplate"}},{title:"数据类型",dataIndex:"type",scopedSlots:{customRender:"datatypeTemplate"}},{title:"schema",dataIndex:"schemaValue",width:"15%"}],o=[{title:"状态码",dataIndex:"code",width:"20%"},{title:"说明",dataIndex:"description",width:"55%",scopedSlots:{customRender:"descriptionTemplate"}},{title:"schema",dataIndex:"schema"}],l=[{title:"参数名称",dataIndex:"name",width:"30%"},{title:"参数说明",dataIndex:"description",width:"55%"},{title:"数据类型",dataIndex:"type"}],c=[{title:"参数名称",dataIndex:"name",width:"35%"},{title:"参数说明",dataIndex:"description",width:"40%"},{title:"类型",dataIndex:"type"},{title:"schema",dataIndex:"schemaValue",width:"15%"}],p=null,u={name:"Document",components:{editor:n("7c9e"),DataType:function(){return n.e("chunk-2d0bd799").then(n.bind(null,"2bc6"))},EditorShow:function(){return Promise.all([n.e("chunk-3b888a65"),n.e("chunk-214218f0"),n.e("chunk-2d0af44e")]).then(n.bind(null,"0e36"))}},props:{api:{type:Object,required:!0},swaggerInstance:{type:Object,required:!0}},beforeCreate:function(){p=this},data:function(){return{content:"Hello",columns:i,responseHeaderColumns:l,responseStatuscolumns:o,responseParametersColumns:c,expanRows:!0,multipCode:!1,multipCodeDatas:[],multipData:{},page:!1,reqParameters:[]}},created:function(){this.reqParameters=this.api.reqParameters,p.initResponseCodeParams()},methods:{genUnionTableKey:function(){return r.a.randomMd5()},initRequestParams:function(){var e=[],t=this,n=s.a.globalTreeTableModelParams+this.api.instanceId,a=(this.swaggerInstance.refTreeTableModels,this.api);null!=a.parameters&&a.parameters.length>0&&(e=e.concat(a.parameters)),null!=a.refTreetableparameters&&a.refTreetableparameters.length>0&&a.refTreetableparameters.forEach((function(t){e=e.concat(t.params)})),null!=e&&e.sort((function(e,t){return t.require-e.require}));var i=[];null!=e&&e.length>0&&e.forEach((function(e){if("-1"==e.pid){if(e.children=[],e.schema){var a=e.schemaValue;if(r.a.checkUndefined(a)&&t.$Knife4jModels.exists(n,a)){var s=t.$Knife4jModels.getByModelName(n,a);if(r.a.checkUndefined(s)){var o=s.params;r.a.arrNotEmpty(o)&&o.forEach((function(n){var a=t.copyNewParameter(n);a.pid=e.id,e.children.push(a)}))}}}r.a.arrNotEmpty(e.children)||(e.children=null),i.push(e)}})),t.reqParameters=i},storeCacheModels:function(e){var t=s.a.globalTreeTableModelParams+this.api.instanceId;this.$localStore.setItem(t,e)},deepTreeTableSchemaModel:function(e,t,n){var a=this,i=s.a.globalTreeTableModelParams+this.api.instanceId;if(r.a.checkUndefined(e.schemaValue)){var o=t[e.schemaValue];r.a.checkUndefined(o)&&(n.parentTypes.push(e.schemaValue),r.a.arrNotEmpty(o.params)&&o.params.forEach((function(s){var o=a.copyNewParameter(s);if(o.pid=e.id,e.children.push(o),o.schema&&-1==n.parentTypes.indexOf(o.schemaValue)){var l=o.schemaValue;if(r.a.checkUndefined(l))if(o.children=[],a.$Knife4jModels.exists(i,l)){var c=a.$Knife4jModels.getByModelName(i,l);r.a.arrNotEmpty(c)&&c.forEach((function(e){var t=a.copyNewParameter(e);t.pid=o.id,o.children.push(t)}))}else a.deepTreeTableSchemaModel(o,t,n),0==o.children.length&&(o.children=null),a.$Knife4jModels.addModels(i,l,o.children)}})))}},copyNewParameter:function(e){return{children:e.children,childrenTypes:e.childrenTypes,def:e.def,description:e.description,enum:e.enum,example:e.example,id:e.id,ignoreFilterName:e.ignoreFilterName,in:e.in,level:e.level,name:e.name,parentTypes:e.parentTypes,pid:e.pid,readOnly:e.readOnly,require:e.require,schema:e.schema,schemaValue:e.schemaValue,show:e.show,txtValue:e.txtValue,type:e.type,validateInstance:e.validateInstance,validateStatus:e.validateStatus,value:e.value}},findModelChildren:function(e,t){var n=this;null!=t&&null!=t&&t.length>0&&t.forEach((function(a){a.pid==e.id&&(a.children=[],n.findModelChildren(a,t),0==a.children.length&&(a.children=null),e.children.push(a))}))},initResponseCodeParams:function(){var e=this;e.multipCode=e.api.multipartResponseSchema;var t=e.api.responseCodes;null!=t&&null!=t&&t.forEach((function(t){if(null!=t.schema&&null!=t.schema){var n=[];null!=t.responseParameters&&t.responseParameters.length>0&&(n=n.concat(t.responseParameters)),null!=t.responseTreetableRefParameters&&t.responseTreetableRefParameters.length>0&&t.responseTreetableRefParameters.forEach((function(e){n=n.concat(e.params)}));var r=[];null!=n&&n.length>0&&n.forEach((function(e){"-1"==e.pid&&(e.children=[],0==e.children.length&&(e.children=null),r.push(e))}));var s=Object(a.a)(Object(a.a)({},t),{},{data:r});e.multipCode||(e.multipData=s),e.multipCodeDatas.push(s)}}))},formaterJson:function(e){try{return"string"!=typeof e&&(e=JSON.stringify(e,void 0,2)),(e=e.replace(/&/g,"&").replace(//g,">")).replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,(function(e){var t="number";return/^"/.test(e)?t=/:$/.test(e)?"key":"string":/true|false/.test(e)?t="boolean":/null/.test(e)&&(t="null"),''+e+""}))}catch(t){return e}}}},d=(n("5b7f"),n("2877")),h=Object(d.a)(u,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"knife4j-document"},[n("a-row",[n("a-row",{staticClass:"knife4j-api-title",attrs:{id:e.api.operationId}},[e._v(" "+e._s(e.api.summary)+" ")]),n("a-row",{class:"knife4j-api-"+e.api.methodType.toLowerCase()},[n("div",{staticClass:"knife4j-api-summary"},[n("span",{staticClass:"knife4j-api-summary-method"},[e._v(e._s(e.api.methodType))]),n("span",{staticClass:"knife4j-api-summary-path"},[e._v(e._s(e.api.showUrl))])])]),n("a-row",{staticClass:"knife4j-api-row"},[n("a-col",{attrs:{span:12}},[n("a-row",[n("a-col",{staticClass:"api-basic-title",attrs:{span:6}},[e._v("请求数据类型")]),e._v(" "+e._s(e.api.consumes)+" ")],1)],1),n("a-col",{attrs:{span:12}},[n("a-row",[n("a-col",{staticClass:"api-basic-title",attrs:{span:6}},[e._v("响应数据类型")]),e._v(" "+e._s(e.api.produces)+" ")],1)],1)],1)],1),e.api.description?n("div",[n("div",{staticClass:"api-title"},[e._v(" 接口描述 ")]),e.api.description?n("div",{staticClass:"api-body-desc",domProps:{innerHTML:e._s(e.api.description)}}):e._e()]):e._e(),e.api.requestValue?n("div",[n("div",{staticClass:"api-title"},[e._v(" 请求示例 ")]),n("pre",{staticClass:"api-editor-show",domProps:{innerHTML:e._s(e.formaterJson(e.api.requestValue))}})]):e._e(),n("div",{staticClass:"api-title"},[e._v(" 请求参数 ")]),n("a-table",{attrs:{defaultExpandAllRows:"",columns:e.columns,dataSource:e.reqParameters,rowKey:e.genUnionTableKey,size:"small",pagination:e.page},scopedSlots:e._u([{key:"requireTemplate",fn:function(t){return[t?n("span",{staticStyle:{color:"red"}},[e._v(e._s(t.toLocaleString()))]):n("span",[e._v(e._s(t.toLocaleString()))])]}},{key:"typeTemplate",fn:function(t){return[n("span",{class:"knife4j-request-"+t},[e._v(e._s(t))])]}},{key:"datatypeTemplate",fn:function(e,t){return[n("data-type",{attrs:{text:e,record:t}})]}}])}),n("div",{staticClass:"api-title"},[e._v(" 响应状态 ")]),n("a-table",{attrs:{defaultExpandAllRows:e.expanRows,columns:e.responseStatuscolumns,dataSource:e.api.responseCodes,rowKey:"code",size:"small",pagination:e.page},scopedSlots:e._u([{key:"descriptionTemplate",fn:function(t){return[n("div",{domProps:{innerHTML:e._s(t)}})]}}])}),e.api.multipartResponseSchema?n("div",e._l(e.multipCodeDatas,(function(t){return n("a-tabs",{key:t.code},[n("a-tab-pane",{attrs:{tab:t.code}},[t.responseHeaderParameters?n("div",[n("div",{staticClass:"api-title"},[e._v(" 响应Header ")]),n("a-table",{attrs:{defaultExpandAllRows:e.expanRows,columns:e.responseHeaderColumns,dataSource:t.responseHeaderParameters,rowKey:"id",size:"small",pagination:e.page}})],1):e._e(),n("div",{staticClass:"api-title"},[e._v(" 响应参数 ")]),n("a-table",{attrs:{defaultExpandAllRows:e.expanRows,columns:e.responseParametersColumns,dataSource:t.data,rowKey:"id",size:"small",pagination:e.page}}),n("div",{staticClass:"api-title"},[e._v(" 响应示例 ")]),t.responseBasicType?n("div",{staticClass:"api-editor-show"},[e._v(" "+e._s(t.responseText)+" ")]):n("pre",{staticClass:"api-editor-show",domProps:{innerHTML:e._s(e.formaterJson(t.responseValue))}})],1)],1)})),1):n("div",[e.api.responseHeaderParameters?n("div",[n("div",{staticClass:"api-title"},[e._v(" 响应Header ")]),n("a-table",{attrs:{defaultExpandAllRows:e.expanRows,columns:e.responseHeaderColumns,dataSource:e.api.responseHeaderParameters,rowKey:"id",size:"small",pagination:e.page}})],1):e._e(),n("div",{staticClass:"api-title"},[e._v(" 响应参数 ")]),n("a-table",{attrs:{defaultExpandAllRows:e.expanRows,columns:e.responseParametersColumns,dataSource:e.multipData.data,rowKey:"id",size:"small",pagination:e.page}}),n("div",{staticClass:"api-title"},[e._v(" 响应示例 ")]),e.multipData.responseBasicType?n("div",{staticClass:"api-editor-show"},[e._v(" "+e._s(e.multipData.responseText)+" ")]):n("pre",{staticClass:"api-editor-show",domProps:{innerHTML:e._s(e.formaterJson(e.multipData.responseValue))}})],1)],1)}),[],!1,null,"edaf72f4",null);t.default=h.exports},"3cd9":function(e,t,n){"use strict";n.r(t);var a=n("5530"),r=(n("d3b7"),n("159b"),n("99af"),n("4e82"),n("a4d3"),n("e01a"),n("b0c0"),n("3ca3"),n("ddb0"),n("2b3d"),n("9861"),n("e9c4"),'\n.content-line {\n height: 25px;\n line-height: 25px;\n}\n.content-line-count {\n height: 35px;\n line-height: 35px;\n}\n.title {\n margin-top: 25px;\n}\n.knife4j-description {\n /* width: 90%;\n margin: 15px auto; */\n margin-top: 5px;\n}\n.divider {\n margin: 4px 0;\n}\n.divider-count {\n margin: 8px 0;\n}\n.knife4j-document {\n margin-top: 30px;\n}\n.api-tab {\n margin-top: 15px;\n\n .ant-tag {\n height: 32px;\n line-height: 32px;\n }\n}\n.knife4j-menu-api-deprecated {\n text-decoration: line-through;\n}\n\n.knife4j-api-title {\n margin-top: 10px;\n margin-bottom: 5px;\n font-size: 16px;\n font-weight: 600;\n color: #616368;\n height: 35px;\n line-height: 35px;\n}\n.knife4j-api-row {\n height: 45px;\n line-height: 45px;\n}\n\n.knife4j-api-summary {\n border-color: #49cc90;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n padding: 2px;\n cursor: pointer;\n}\n.knife4j-api-summary-method {\n font-size: 14px;\n font-weight: 700;\n min-width: 80px;\n padding: 6px 15px;\n text-align: center;\n border-radius: 3px;\n text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);\n font-family: Titillium Web, sans-serif;\n color: #fff;\n}\n.knife4j-api-summary-path {\n font-size: 14px;\n display: flex;\n -webkit-box-flex: 0;\n -ms-flex: 0 3 auto;\n flex: 0 3 auto;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n word-break: break-all;\n padding: 0 32px;\n}\n\n.knife4j-api-post {\n border-color: #49cc90;\n background: rgba(73, 204, 144, 0.1);\n}\n.knife4j-api-post .knife4j-api-summary-method {\n background: #49cc90;\n}\n\n.knife4j-api-get {\n border-color: #61affe;\n background: rgba(97, 175, 254, 0.1);\n}\n.knife4j-api-get .knife4j-api-summary-method {\n background: #61affe;\n}\n.knife4j-api-head {\n border-color: #9012fe;\n background: rgba(144, 18, 254, 0.1);\n}\n.knife4j-api-head .knife4j-api-summary-method {\n background: #9012fe;\n}\n.knife4j-api-put {\n border-color: #fca130;\n background: rgba(252, 161, 48, 0.1);\n}\n.knife4j-api-put .knife4j-api-summary-method {\n background: #fca130;\n}\n.knife4j-api-delete {\n border-color: #f93e3e;\n background: rgba(249, 62, 62, 0.1);\n}\n.knife4j-api-delete .knife4j-api-summary-method {\n background: #f93e3e;\n}\n.knife4j-api-options {\n border-color: #0d5aa7;\n background: rgba(13, 90, 167, 0.1);\n}\n.knife4j-api-options .knife4j-api-summary-method {\n background: #0d5aa7;\n}\n.knife4j-api-patch {\n border-color: #50e3c2;\n background: rgba(80, 227, 194, 0.1);\n}\n.knife4j-api-patch .knife4j-api-summary-method {\n background: #50e3c2;\n}\n#knife4jDoc ul{\n padding-left: 10px;\n list-style: none;\n counter-reset: ordered;\n}\n\n#knife4jDoc ul li:before {\n counter-increment: ordered;\n content: counters(ordered,".")" ";\n color:#1890ff;\n}\n.api-basic {\n padding: 11px;\n}\n.api-basic-title {\n font-size: 14px;\n font-weight: 700;\n}\n.api-basic-body {\n font-size: 14px;\n font-family: -webkit-body;\n}\n.knife4j-api-editor-show {\n margin: 15px 0;\n font: 100 12px/18px monaco, andale mono, courier new;\n padding: 10px 12px;\n border: #ccc 1px solid;\n border-left-width: 4px;\n background-color: #fefefe;\n box-shadow: 0 0 4px #eee;\n word-break: break-all;\n word-wrap: break-word;\n color: #444;\n}\n.knife4j-api-editor-show .string { color: green; } /*字符串的样式*/\n.knife4j-api-editor-show .number { color: darkorange; } /*数字的样式*/\n.knife4j-api-editor-show .boolean { color: blue; } /*布尔型数据的样式*/\n.knife4j-api-editor-show .null { color: magenta; } /*null值的样式*/\n.knife4j-api-editor-show .key { color: red; } /*key值的样式*/\n.api-description {\n border-left: 4px solid #ddd;\n line-height: 30px;\n}\n.api-body-desc {\n padding: 10px;\n min-height: 35px;\n box-sizing: border-box;\n border: 1px solid #e8e8e8;\n}\n.ant-card-body {\n padding: 5px;\n}\n.api-title {\n margin-top: 10px;\n margin-bottom: 5px;\n font-size: 16px;\n font-weight: 600;\n height: 30px;\n line-height: 30px;\n border-left: 4px solid #00ab6d;\n text-indent: 8px;\n}\n.content-line {\n height: 25px;\n line-height: 25px;\n}\n.content-line-count {\n height: 35px;\n line-height: 35px;\n}\n.divider {\n margin: 4px 0;\n}\n.knife4j-doc-m{\n position: fixed;\n height: 500px;\n width: 400px;\n border: 1px solid #b7b4b4;\n overflow-y: auto;\n right: 12px;\n top: 40px;\n z-index: 9999;\n background: #fcfafa;\n}\n');n("a15b"),n("25f0");var s=n("b1c7");function i(e){var t=[];return null!=e&&null!=e&&(function(e,t){t.push("# "+e.title),o(t),t.push("**简介**:"+e.description),o(t),t.push("**HOST**:"+e.host),o(t),t.push("**联系人**:"+e.contact),o(t),t.push("**Version**:"+e.version),o(t),t.push("**接口路径**:"+e.url),o(t),t.push("[TOC]"),o(t)}(e,t),function(e,t){null!=e.tags&&null!=e.tags&&(t.push("\n"),e.tags.forEach((function(e){o(t),t.push("# "+e.name),null!=e.childrens&&null!=e.childrens&&e.childrens.length>0?e.childrens.forEach((function(e){!function(e,t){o(t),t.push("## "+e.summary),o(t),t.push("**接口地址**:`"+e.showUrl+"`"),o(t),t.push("**请求方式**:`"+e.methodType+"`"),o(t),t.push("**请求数据类型**:`"+s.a.toString(e.consumes,"*")+"`"),o(t),t.push("**响应数据类型**:`"+s.a.toString(e.produces,"*")+"`"),o(t),s.a.strNotBlank(e.author)&&(t.push("**开发者**:"+s.a.toString(e.author,"暂无")),o(t)),t.push("**接口描述**:"+s.a.toString(e.description,"暂无")),s.a.checkUndefined(e.requestValue)&&(o(t),t.push("**请求示例**:"),o(t),t.push("```javascript"),t.push(e.requestValue),t.push("```")),function(e,t){var n=e.reqParameters;o(t),t.push("**请求参数**:"),s.a.arrNotEmpty(n)?(o(t),t.push("| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |"),t.push("| -------- | -------- | ----- | -------- | -------- | ------ |"),function e(t,n,a){null!=t&&null!=t&&t.length>0&&t.forEach((function(t){t.level=a,n.push("|"+c(t)+"|"+s.a.toString(t.description,"")+"|"+s.a.toString(t.in,"")+"|"+s.a.toString(t.require,"")+"|"+s.a.toString(t.type,"")+"|"+s.a.toString(t.schemaValue,"")+"|"),e(t.children,n,t.level+1)}))}(n,t,1)):(o(t),t.push("暂无"))}(e,t),function(e,t){s.a.checkUndefined(e.responseCodes)&&e.responseCodes.length>0&&(o(t),t.push("**响应状态**:"),o(t),t.push("| 状态码 | 说明 | schema |"),t.push("| -------- | -------- | ----- | "),e.responseCodes.forEach((function(e){t.push("|"+s.a.toString(e.code,"")+"|"+s.a.toString(e.description,"")+"|"+s.a.toString(e.schema,"")+"|")})))}(e,t),function(e,t){if(e.multipartResponseSchema){var n=e.multipCodeDatas;s.a.arrNotEmpty(n)&&n.forEach((function(e){o(t),t.push("**响应状态码-"+s.a.toString(e.code,"")+"**:"),l(e,t)}))}else l(e.multipData,t)}(e,t)}(e,t)})):t.push("暂无接口文档")})))}(e,t),function(e,t){s.a.checkUndefined(e.markdownFiles)&&e.markdownFiles.length>0&&(o(t),t.push("# 附录"),e.markdownFiles.forEach((function(e){o(t),s.a.arrNotEmpty(e.children)&&(t.push("## "+e.name),o(t),e.children.forEach((function(e){t.push("### "+e.title),t.push(e.content)})))})))}(e,t)),t.join("\n")}function o(e){e.push("\n")}function l(e,t){(function(e,t){s.a.checkUndefined(e)&&e.length>0&&(o(t),t.push("**响应Header**:"),o(t),t.push("| 参数名称 | 参数说明 | 数据类型 |"),t.push("| -------- | -------- | ----- | "),e.forEach((function(e){t.push("|"+s.a.toString(e.name,"")+"|"+s.a.toString(e.description,"")+"|"+s.a.toString(e.type,"")+"|")})))})(e.responseHeaderParameters,t),o(t),t.push("**响应参数**:"),o(t),s.a.arrNotEmpty(e.data)?(t.push("| 参数名称 | 参数说明 | 类型 | schema |"),t.push("| -------- | -------- | ----- |----- | "),e.data.forEach((function(e){e.level=1,t.push("|"+c(e)+"|"+s.a.toString(e.description,"")+"|"+s.a.toString(e.type,"")+"|"+s.a.toString(e.schemaValue,"")+"|"),function e(t,n,a){null!=t&&null!=t&&t.length>0&&t.forEach((function(t){t.level=a,n.push("|"+c(t)+"|"+s.a.toString(t.description,"")+"|"+s.a.toString(t.type,"")+"|"+s.a.toString(t.schemaValue,"")+"|"),e(t.children,n,t.level+1)}))}(e.children,t,e.level+1)}))):t.push("暂无"),o(t),t.push("**响应示例**:"),e.responseBasicType?(t.push("```text"),t.push(e.responseText),t.push("```")):(t.push("```javascript"),t.push(e.responseValue),t.push("```"))}function c(e){for(var t=[],n=1;n\n \n \n \n \n 导出Swagger文档到Word\n + + + + + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/.editorconfig b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/.editorconfig new file mode 100644 index 0000000..7053c49 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/.editorconfig @@ -0,0 +1,5 @@ +[*.{js,jsx,ts,tsx,vue}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/.eslintrc.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/.eslintrc.js new file mode 100644 index 0000000..87cc256 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/.eslintrc.js @@ -0,0 +1,99 @@ +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + node: true, + es6: true, + }, + extends: ['plugin:vue/recommended', 'eslint:recommended'], + + // add your custom rules here + //it is base on https://github.com/vuejs/eslint-config-vue + rules: { + 'indent': [2, 2, { + 'SwitchCase': 1 + }], + 'linebreak-style': [0, 'error', 'windows'], + "max-len": ["error", { + code: 300 + }], + /* 使用双引号 */ + /* 禁止在条件表达式中使用赋值语句 */ + "no-cond-assign": "error", + /* 禁止重复声明变量 */ + "no-redeclare": "error", + /* 禁止使用var */ + "no-var": "error", + /* 禁止使用with */ + "no-with": "error", + /* 强制驼峰法命名 */ + "camelcase": "error", + /* 禁止行内注释 */ + "no-inline-comments": "error", + /* 多行模式必须带逗号,单行模式不能带逗号 */ + "always-multiline": "", + /* 一元运算符,前后空格 */ + "space-unary-ops": ["error", { + "words": true, + "nonwords": true + }], + /* 必须使用全等 */ + "eqeqeq": "error", + /* 数组元素间空格隔开(,后面) */ + "array-bracket-spacing": ["error", "never"], + /* 块级作用域外访问块内变量 */ + "block-scoped-var": "error", + /* 行尾逗号 */ + "comma-style": ["error", "last"], + /* 数组或对象键值对,末尾的逗号 */ + "comma-dangle": ["error", "never"], + /* 圈复杂度.一般为if-else */ + "complexity": ["error", 6], + /* 强制一致函数声明 */ + "func-style": "error", + /* 最大函数嵌套层数 */ + "max-nested-callbacks": ["error", 4], + /* 逗号前后空格 */ + "comma-spacing": ["error", { + "before": false, + "after": true + }], + /* if while function 后面的{必须与if在同一行,java风格。java风格 */ + "brace-style": ["error", "1tbs", { + "allowSingleLine": false + }], + /* 关键字前后一致的空格 */ + "keyword-spacing": "error", + /* 单行最大长度,tab个数 */ + "max-len": ["error", 80, 4], + /* 不允许空格和tab混合使用 */ + "no-mixed-operators": "error", + /* 不允许多个空行 */ + "no-mixed-spaces-and-tabs": "error", + /* 声明时必须赋初值 */ + "init-declarations": "error", + /* 强制使用分好而不是ASI */ + "semi": "always", + /* 允许声明但未使用的变量 */ + "no-unused-vars": ["off", { + "vars": "local", + "args": "none" + }], + /* 注释需以空格开头 */ + "spaced-comment": "warn", + /* 禁止console */ + "no-console": "warn", + /* 禁止三元运算符 */ + "no-ternary": "warn", + /* return 后面是否允许省略:暂略 ??? */ + "consistent-return": "warn", + /* 方法定义规范--在小程序里暂略 */ + "func-names": ["off", "always"], + /* 禁止使用未定义的变量 */ + "no-undef": "off" + } +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/.gitignore b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/.gitignore new file mode 100644 index 0000000..a0dddc6 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/.gitignore @@ -0,0 +1,21 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/.jshintrc b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/.jshintrc new file mode 100644 index 0000000..d065551 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/.jshintrc @@ -0,0 +1,18 @@ +{ + "globals": { + "$": false, + "window": false, + "document": false + }, + "strict": false, + "curly": true, + "eqeqeq": false, + "noarg": true, + "noempty": true, + "quotmark": true, + "undef": true, + "unused": true, + "sub": true, + "asi": true, + "esversion": 6 +} \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/README.md b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/README.md new file mode 100644 index 0000000..6f630ba --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/README.md @@ -0,0 +1,29 @@ +# knife4j-vue + +## Project setup +``` +yarn install +``` + +### Compiles and hot-reloads for development +``` +yarn run serve +``` + +### Compiles and minifies for production +``` +yarn run build +``` + +### Run your tests +``` +yarn run test +``` + +### Lints and fixes files +``` +yarn run lint +``` + +### Customize configuration +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/babel.config.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/babel.config.js new file mode 100644 index 0000000..61298c2 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/babel.config.js @@ -0,0 +1,8 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ], + 'plugins': [ + ['import', { 'libraryName': 'ant-design-vue', 'libraryDirectory': 'es', 'style': 'css' }] // `style: true` 会加载 less 文件 + ] +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/package-lock.json b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/package-lock.json new file mode 100644 index 0000000..0621fa6 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/package-lock.json @@ -0,0 +1,28490 @@ +{ + "name": "knife4j-vue", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "0.1.0", + "dependencies": { + "ant-design-vue": "^1.6.5", + "async": "^3.1.0", + "axios": "^0.19.0", + "babel-plugin-import": "^1.13.0", + "clipboard": "^2.0.4", + "compression-webpack-plugin": "^3.1.0", + "core-js": "^3.3.2", + "css-loader": "^3.2.0", + "js-md5": "^0.7.3", + "less": "^3.10.3", + "less-loader": "^5.0.0", + "localforage": "^1.7.3", + "lodash": "^4.17.15", + "marked": "1.2.4", + "qs": "^6.9.4", + "vue": "^2.6.11", + "vue-i18n": "^8.15.3", + "vue-router": "^3.1.3", + "vue2-ace-editor": "^0.0.15", + "vuex": "^3.0.1", + "xml2js": "^0.4.23" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "^4.0.0", + "@vue/cli-plugin-eslint": "^4.0.0", + "@vue/cli-service": "^4.0.0", + "@vue/eslint-config-standard": "^4.0.0", + "babel-eslint": "^10.0.3", + "eslint": "^5.16.0", + "eslint-plugin-vue": "^5.0.0", + "vue-template-compiler": "^2.6.11" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ant-design/colors": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-3.2.2.tgz", + "integrity": "sha512-YKgNbG2dlzqMhA9NtI3/pbY16m3Yl/EeWBRa+lB1X1YaYxHrxNexiQYCLTWO/uDvAjLFMEDU+zR901waBtMtjQ==", + "dependencies": { + "tinycolor2": "^1.4.1" + } + }, + "node_modules/@ant-design/icons": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/@ant-design/icons/-/icons-2.1.1.tgz", + "integrity": "sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w==" + }, + "node_modules/@ant-design/icons-vue": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-2.0.0.tgz", + "integrity": "sha512-2c0QQE5hL4N48k5NkPG5sdpMl9YnvyNhf0U7YkdZYDlLnspoRU7vIA0UK9eHBs6OpFLcJB6o8eJrIl2ajBskPg==", + "dependencies": { + "@ant-design/colors": "^3.1.0", + "babel-runtime": "^6.26.0" + }, + "peerDependencies": { + "@ant-design/icons": "^2.0.0", + "vue": ">=2.5.0", + "vue-template-compiler": ">=2.5.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.17.7.tgz", + "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.17.7.tgz", + "integrity": "sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.7", + "@babel/parser": "^7.17.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.17.7.tgz", + "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", + "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.17.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", + "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.17.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.17.7.tgz", + "integrity": "sha512-TKsj9NkjJfTBxM7Phfy7kv6yYc4ZcOo+AaWGqQOKTPDOmcGkIFb5xNA746eKisQkm4yavUYh4InYM9S+VnO01w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.17.7.tgz", + "integrity": "sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.17.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz", + "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.17.6", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.17.2", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", + "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.17.1", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.0", + "charcodes": "^0.2.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.17.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.16.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.17.0", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", + "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz", + "integrity": "sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz", + "integrity": "sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", + "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.16.11", + "resolved": "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.17.7.tgz", + "integrity": "sha512-L6rvG9GDxaLgFjg41K+5Yv9OMrU98sWe+Ykmc6FDJW/+vYZMhdOMKkISgzptMaERHvS2Y2lw9MDRm2gHhlQQoA==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "deprecated": "Moved to 'npm install @sideway/address'", + "dev": true + }, + "node_modules/@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true + }, + "node_modules/@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true + }, + "node_modules/@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmmirror.com/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "deprecated": "Switch to 'npm install joi'", + "dev": true, + "dependencies": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "node_modules/@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true, + "dependencies": { + "@hapi/hoek": "^8.3.0" + } + }, + "node_modules/@intervolga/optimize-cssnano-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz", + "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==", + "dev": true, + "dependencies": { + "cssnano": "^4.0.0", + "cssnano-preset-default": "^4.0.0", + "postcss": "^7.0.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "dependencies": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@simonwep/pickr": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.7.4.tgz", + "integrity": "sha512-fq7jgKJT21uWGC1mARBHvvd1JYlEf93o7SuVOB4Lr0x/2UPuNC9Oe9n/GzVeg4oVtqMDfh1wIEJpsdOJEZb+3g==", + "dependencies": { + "core-js": "^3.6.5", + "nanopop": "^2.1.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmmirror.com/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmmirror.com/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmmirror.com/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.21", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "node_modules/@types/tapable": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "node_modules/@types/uglify-js": { + "version": "3.13.1", + "resolved": "https://registry.npmmirror.com/@types/uglify-js/-/uglify-js-3.13.1.tgz", + "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/@types/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/webpack": { + "version": "4.41.32", + "resolved": "https://registry.npmmirror.com/@types/webpack/-/webpack-4.41.32.tgz", + "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/webpack-dev-server": { + "version": "3.11.6", + "resolved": "https://registry.npmmirror.com/@types/webpack-dev-server/-/webpack-dev-server-3.11.6.tgz", + "integrity": "sha512-XCph0RiiqFGetukCTC3KVnY1jwLcZ84illFRMbyFzCcWl90B/76ew0tSqF46oBhnLC4obNDG7dMO0JfTN0MgMQ==", + "dev": true, + "dependencies": { + "@types/connect-history-api-fallback": "*", + "@types/express": "*", + "@types/serve-static": "*", + "@types/webpack": "^4", + "http-proxy-middleware": "^1.0.0" + } + }, + "node_modules/@types/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz", + "integrity": "sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==", + "dev": true + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", + "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==", + "dev": true + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", + "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "@vue/babel-helper-vue-transform-on": "^1.0.2", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + } + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz", + "integrity": "sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx/node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/babel-preset-app": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/babel-preset-app/-/babel-preset-app-4.5.16.tgz", + "integrity": "sha512-ad35OBAQgc0m1m4iqRhMRuMN0rvGb8vFx0hU7lVjVMIuuLLXornU38d2U1uMI096dIItht70RCJlZt48DsLbUQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.0", + "@babel/helper-compilation-targets": "^7.9.6", + "@babel/helper-module-imports": "^7.8.3", + "@babel/plugin-proposal-class-properties": "^7.8.3", + "@babel/plugin-proposal-decorators": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.11.0", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.0", + "@vue/babel-plugin-jsx": "^1.0.3", + "@vue/babel-preset-jsx": "^1.2.4", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.6.5", + "core-js-compat": "^3.6.5", + "semver": "^6.1.0" + }, + "peerDependencies": { + "@babel/core": "*", + "core-js": "^3", + "vue": "^2 || ^3.0.0-0" + }, + "peerDependenciesMeta": { + "core-js": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-preset-jsx": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz", + "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==", + "dev": true, + "dependencies": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "@vue/babel-sugar-composition-api-inject-h": "^1.2.1", + "@vue/babel-sugar-composition-api-render-instance": "^1.2.4", + "@vue/babel-sugar-functional-vue": "^1.2.2", + "@vue/babel-sugar-inject-h": "^1.2.2", + "@vue/babel-sugar-v-model": "^1.2.3", + "@vue/babel-sugar-v-on": "^1.2.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-composition-api-inject-h": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz", + "integrity": "sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-composition-api-render-instance": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz", + "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-functional-vue": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz", + "integrity": "sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-inject-h": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz", + "integrity": "sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz", + "integrity": "sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@vue/babel-sugar-v-model/node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/babel-sugar-v-on": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz", + "integrity": "sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-on/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@vue/cli-overlay": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-4.5.16.tgz", + "integrity": "sha512-RJB9I/3OMhycm0Hn0ArC2/2UGHJTldujPWZ0FDureX3YbK5CaE0Zfjg+qgp1i2HzIoIGPf25u6LLUsxPngKQ4w==", + "dev": true + }, + "node_modules/@vue/cli-plugin-babel": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.16.tgz", + "integrity": "sha512-s6nrN3CvEaoqEPlA5CIOcsOsqF7LIihTsuJIy4TefxNLPXK6NeuJSO7aQUYCZv1LrG/EoJ//PLsYPUZSPDdAbw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.0", + "@vue/babel-preset-app": "^4.5.16", + "@vue/cli-shared-utils": "^4.5.16", + "babel-loader": "^8.1.0", + "cache-loader": "^4.1.0", + "thread-loader": "^2.1.3", + "webpack": "^4.0.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-eslint": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.16.tgz", + "integrity": "sha512-vaf6IKeeBYKgLMfM5zaNonC0ArBZnlhv4rw+uVdCM+INRX/BDvdTN9DoczGcCn4sAWG2dBOtstegr2OJAXT1+w==", + "dev": true, + "dependencies": { + "@vue/cli-shared-utils": "^4.5.16", + "eslint-loader": "^2.2.1", + "globby": "^9.2.0", + "inquirer": "^7.1.0", + "webpack": "^4.0.0", + "yorkie": "^2.0.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0-0", + "eslint": ">= 1.6.0 < 7.0.0" + } + }, + "node_modules/@vue/cli-plugin-router": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-4.5.16.tgz", + "integrity": "sha512-aaroSwzSXo/2TNG7MFa6hyQMfXGqehvpdnZazTEn2N3Q1jxI/1jjeDEjXjA9mkgiBG7fY09ykRw1ORwEx9kScQ==", + "dev": true, + "dependencies": { + "@vue/cli-shared-utils": "^4.5.16" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-vuex": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.16.tgz", + "integrity": "sha512-cj9x7zaoc81Nz14cUUwQ3+niSJWBulTRPA5TeVIPyhxp0+Nk32xeBsc8JuVK9GmvLF6FQRizM94KvJWIyPAHVA==", + "dev": true, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0-0" + } + }, + "node_modules/@vue/cli-service": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-4.5.16.tgz", + "integrity": "sha512-G/AFv+4oCkb86TbVgazhYdnOM2VMUVE4vqvsK/WAQhvQBndbQn3nkiDYw7efQzyxjlN2BhpudXCP+jSQ5jAaXw==", + "dev": true, + "dependencies": { + "@intervolga/optimize-cssnano-plugin": "^1.0.5", + "@soda/friendly-errors-webpack-plugin": "^1.7.1", + "@soda/get-current-script": "^1.0.0", + "@types/minimist": "^1.2.0", + "@types/webpack": "^4.0.0", + "@types/webpack-dev-server": "^3.11.0", + "@vue/cli-overlay": "^4.5.16", + "@vue/cli-plugin-router": "^4.5.16", + "@vue/cli-plugin-vuex": "^4.5.16", + "@vue/cli-shared-utils": "^4.5.16", + "@vue/component-compiler-utils": "^3.1.2", + "@vue/preload-webpack-plugin": "^1.1.0", + "@vue/web-component-wrapper": "^1.2.0", + "acorn": "^7.4.0", + "acorn-walk": "^7.1.1", + "address": "^1.1.2", + "autoprefixer": "^9.8.6", + "browserslist": "^4.12.0", + "cache-loader": "^4.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.4", + "clipboardy": "^2.3.0", + "cliui": "^6.0.0", + "copy-webpack-plugin": "^5.1.1", + "css-loader": "^3.5.3", + "cssnano": "^4.1.10", + "debug": "^4.1.1", + "default-gateway": "^5.0.5", + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^4.2.0", + "fs-extra": "^7.0.1", + "globby": "^9.2.0", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^3.2.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "lodash.transform": "^4.6.0", + "mini-css-extract-plugin": "^0.9.0", + "minimist": "^1.2.5", + "pnp-webpack-plugin": "^1.6.4", + "portfinder": "^1.0.26", + "postcss-loader": "^3.0.0", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^1.4.4", + "thread-loader": "^2.1.3", + "url-loader": "^2.2.0", + "vue-loader": "^15.9.2", + "vue-style-loader": "^4.1.2", + "webpack": "^4.0.0", + "webpack-bundle-analyzer": "^3.8.0", + "webpack-chain": "^6.4.0", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2" + }, + "bin": { + "vue-cli-service": "bin/vue-cli-service.js" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "vue-loader-v16": "npm:vue-loader@^16.1.0" + }, + "peerDependencies": { + "@vue/compiler-sfc": "^3.0.0-beta.14", + "vue-template-compiler": "^2.0.0" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + }, + "less-loader": { + "optional": true + }, + "pug-plain-loader": { + "optional": true + }, + "raw-loader": { + "optional": true + }, + "sass-loader": { + "optional": true + }, + "stylus-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@vue/cli-shared-utils": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-4.5.16.tgz", + "integrity": "sha512-9VrTpMmK2fE5JQlaXP79Xdhxv+opAsqtnj7QoFqahcz01lzLaBzzuag7W5oduhwqenrHRG3vaRUs563fwbOtZA==", + "dev": true, + "dependencies": { + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "node-ipc": "9.2.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "read-pkg": "^5.1.1", + "request": "^2.88.2", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "dependencies": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "optionalDependencies": { + "prettier": "^1.18.2 || ^2.0.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + }, + "node_modules/@vue/eslint-config-standard": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@vue/eslint-config-standard/-/eslint-config-standard-4.0.0.tgz", + "integrity": "sha512-bQghq1cw1BuMRHNhr3tRpAJx1tpGy0QtajQX873kLtA9YVuOIoXR7nAWnTN09bBHnSUh2N288vMsqPi2fI4Hzg==", + "dev": true, + "dependencies": { + "eslint-config-standard": "^12.0.0", + "eslint-plugin-import": "^2.14.0", + "eslint-plugin-node": "^8.0.0", + "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-standard": "^4.0.0" + } + }, + "node_modules/@vue/preload-webpack-plugin": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz", + "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==", + "dev": true, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "html-webpack-plugin": ">=2.26.0", + "webpack": ">=4.0.0" + } + }, + "node_modules/@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add-dom-event-listener": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", + "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", + "dependencies": { + "object-assign": "4.x" + } + }, + "node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", + "dev": true + }, + "node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ant-design-vue": { + "version": "1.7.8", + "resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-1.7.8.tgz", + "integrity": "sha512-F1hmiS9vwbyfuFvlamdW5l9bHKqRlj9wHaGDIE41NZMWXyWy8qL0UFa/+I0Wl8gQWZCqODW5pN6Yfoyn85At3A==", + "hasInstallScript": true, + "dependencies": { + "@ant-design/icons": "^2.1.1", + "@ant-design/icons-vue": "^2.0.0", + "@simonwep/pickr": "~1.7.0", + "add-dom-event-listener": "^1.0.2", + "array-tree-filter": "^2.1.0", + "async-validator": "^3.0.3", + "babel-helper-vue-jsx-merge-props": "^2.0.3", + "babel-runtime": "6.x", + "classnames": "^2.2.5", + "component-classes": "^1.2.6", + "dom-align": "^1.10.4", + "dom-closest": "^0.2.0", + "dom-scroll-into-view": "^2.0.0", + "enquire.js": "^2.1.6", + "intersperse": "^1.0.0", + "is-mobile": "^2.2.1", + "is-negative-zero": "^2.0.0", + "ismobilejs": "^1.0.0", + "json2mq": "^0.2.0", + "lodash": "^4.17.5", + "moment": "^2.21.0", + "mutationobserver-shim": "^0.3.2", + "node-emoji": "^1.10.0", + "omit.js": "^1.0.0", + "raf": "^3.4.0", + "resize-observer-polyfill": "^1.5.1", + "shallow-equal": "^1.0.0", + "shallowequal": "^1.0.2", + "vue-ref": "^2.0.0", + "warning": "^4.0.0" + }, + "peerDependencies": { + "vue": "^2.6.0", + "vue-template-compiler": "^2.6.0" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "devOptional": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-tree-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz", + "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmmirror.com/util/-/util-0.10.3.tgz", + "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "devOptional": true + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "node_modules/async-validator": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz", + "integrity": "sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmmirror.com/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/axios": { + "version": "0.19.2", + "resolved": "https://registry.npmmirror.com/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "deprecated": "Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410", + "dependencies": { + "follow-redirects": "1.5.10" + } + }, + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" + } + }, + "node_modules/babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, + "node_modules/babel-loader": { + "version": "8.2.3", + "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-import": { + "version": "1.13.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-import/-/babel-plugin-import-1.13.3.tgz", + "integrity": "sha512-1qCWdljJOrDRH/ybaCZuDgySii4yYrtQ8OJQwrcDqdt0y67N30ng3X3nABg6j7gR7qUJgcMa9OMhc4AGViDwWw==", + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-runtime/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmmirror.com/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmmirror.com/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + }, + "node_modules/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/bonjour/node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/brace/-/brace-0.11.1.tgz", + "integrity": "sha512-Fc8Ne62jJlKHiG/ajlonC4Sd66Pq68fFwK4ihJGNZpGqboc324SQk+lRvMzpPRuJOmfrJefdG8/7JdWX4bzJ2Q==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.20.2", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/browserslist/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "node_modules/buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/buffer-json/-/buffer-json-2.0.0.tgz", + "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "13.0.1", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-13.0.1.tgz", + "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", + "dependencies": { + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cacache/node_modules/ssri": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-7.1.1.tgz", + "integrity": "sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw==", + "dependencies": { + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", + "dev": true, + "dependencies": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==", + "dev": true + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "dev": true, + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "dev": true, + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001317", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz", + "integrity": "sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ==", + "dev": true + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/charcodes": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/charcodes/-/charcodes-0.2.0.tgz", + "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmmirror.com/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "optional": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "optional": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "optional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "optional": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chokidar/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/chokidar/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "optional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, + "node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-highlight/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cli-highlight/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/clipboard": { + "version": "2.0.10", + "resolved": "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.10.tgz", + "integrity": "sha512-cz3m2YVwFz95qSEbCDi2fzLN/epEN9zXBvfgAoGkvGOJZATMl9gtTDVOtBYkx2ODUJl2kvmud7n32sV2BpYR4g==", + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "node_modules/clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "dependencies": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/color-string": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", + "dev": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.17.1", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/component-classes": { + "version": "1.2.6", + "resolved": "https://registry.npmmirror.com/component-classes/-/component-classes-1.2.6.tgz", + "integrity": "sha512-hPFGULxdwugu1QWW3SvVOCUHLzO34+a2J6Wqy0c5ASQkfi9/8nZcBB0ZohaEbXOQlCflMAEMmEWk7u7BVs4koA==", + "dependencies": { + "component-indexof": "0.0.3" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/component-indexof": { + "version": "0.0.3", + "resolved": "https://registry.npmmirror.com/component-indexof/-/component-indexof-0.0.3.tgz", + "integrity": "sha512-puDQKvx/64HZXb4hBwIcvQLaLgux8o1CbWl39s41hrIIZDl1lJiD5jc22gj3RBeGK0ovxALDYpIbyjqDUUl0rw==" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression-webpack-plugin": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/compression-webpack-plugin/-/compression-webpack-plugin-3.1.0.tgz", + "integrity": "sha512-iqTHj3rADN4yHwXMBrQa/xrncex/uEQy8QHlaTKxGchT/hC0SdlJlmL/5eRqffmWq2ep0/Romw6Ld39JjTR/ug==", + "dependencies": { + "cacache": "^13.0.1", + "find-cache-dir": "^3.0.0", + "neo-async": "^2.5.0", + "schema-utils": "^2.6.1", + "serialize-javascript": "^2.1.2", + "webpack-sources": "^1.0.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "peerDependencies": { + "webpack": "^4.3.0 || ^5.0.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "node_modules/consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "dependencies": { + "bluebird": "^3.1.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dependencies": { + "is-what": "^3.14.1" + } + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz", + "integrity": "sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ==", + "dev": true, + "dependencies": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/globby/-/globby-7.1.1.tgz", + "integrity": "sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "node_modules/copy-webpack-plugin/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/copy-webpack-plugin/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/core-js": { + "version": "3.21.1", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.21.1.tgz", + "integrity": "sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig==", + "hasInstallScript": true + }, + "node_modules/core-js-compat": { + "version": "3.21.1", + "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.21.1.tgz", + "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", + "dev": true, + "dependencies": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmmirror.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmmirror.com/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "engines": { + "node": ">4" + } + }, + "node_modules/css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "dependencies": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/css-loader/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/css-select": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmmirror.com/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "dev": true, + "dependencies": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==" + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "5.0.5", + "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-5.0.5.tgz", + "integrity": "sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==", + "dev": true, + "dependencies": { + "execa": "^3.3.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/default-gateway/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/default-gateway/node_modules/execa": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/default-gateway/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", + "dev": true + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "dependencies": { + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-align": { + "version": "1.12.2", + "resolved": "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.2.tgz", + "integrity": "sha512-pHuazgqrsTFrGU2WLDdXxCFabkdQDx72ddkraZNih1KsMcN5qsRSTR9O4VJRlwTPCPb5COYg3LOfiMHHcPInHg==" + }, + "node_modules/dom-closest": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/dom-closest/-/dom-closest-0.2.0.tgz", + "integrity": "sha512-6neTn1BtJlTSt+XSISXpnOsF1uni1CHsP/tmzZMGWxasYFHsBOqrHPnzmneqEgKhpagnfnfSfbvRRW0xFsBHAA==", + "dependencies": { + "dom-matches": ">=1.0.1" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-matches": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/dom-matches/-/dom-matches-2.0.0.tgz", + "integrity": "sha512-2VI856xEDCLXi19W+4BechR5/oIS6bKCKqcf16GR8Pg7dGLJ/eBOWVbCmQx2ISvYH6wTNx5Ef7JTOw1dRGRx6A==" + }, + "node_modules/dom-scroll-into-view": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz", + "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==" + }, + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "node_modules/domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmmirror.com/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true, + "hasInstallScript": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.85", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.85.tgz", + "integrity": "sha512-K9AsQ41WS2bjZUFpRWfvaS4RjEcRCamEkBJN1Z1TQILBfP1H8QnJ9ti0wiLiMv0sRjX3EHKzgs9jDnmGFx2jXg==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/enquire.js": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/enquire.js/-/enquire.js-2.1.6.tgz", + "integrity": "sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==" + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.0.7.tgz", + "integrity": "sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==", + "dev": true, + "dependencies": { + "stackframe": "^1.1.1" + } + }, + "node_modules/es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^6.14.0 || ^8.10.0 || >=9.10.0" + } + }, + "node_modules/eslint-config-standard": { + "version": "12.0.0", + "resolved": "https://registry.npmmirror.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", + "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", + "dev": true, + "peerDependencies": { + "eslint": ">=5.0.0", + "eslint-plugin-import": ">=2.13.0", + "eslint-plugin-node": ">=7.0.0", + "eslint-plugin-promise": ">=4.0.0", + "eslint-plugin-standard": ">=4.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-loader": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/eslint-loader/-/eslint-loader-2.2.1.tgz", + "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", + "deprecated": "This loader has been deprecated. Please use eslint-webpack-plugin", + "dev": true, + "dependencies": { + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" + }, + "peerDependencies": { + "eslint": ">=1.6.0 <7.0.0", + "webpack": ">=2.0.0 <5.0.0" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmmirror.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz", + "integrity": "sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==", + "dev": true, + "dependencies": { + "eslint-utils": "^1.4.2", + "regexpp": "^2.0.1" + }, + "engines": { + "node": ">=6.5.0" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.25.4", + "resolved": "https://registry.npmmirror.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.2", + "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.12.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/eslint-plugin-node": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz", + "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", + "dev": true, + "dependencies": { + "eslint-plugin-es": "^1.3.1", + "eslint-utils": "^1.3.1", + "ignore": "^5.0.2", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "semver": "^5.5.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-node/node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", + "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-plugin-standard": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", + "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", + "dev": true, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "5.2.3", + "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz", + "integrity": "sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw==", + "dev": true, + "dependencies": { + "vue-eslint-parser": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + }, + "peerDependencies": { + "eslint": "^5.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha512-wFUFA5bg5dviipbQQ32yOQhl6gcJaJXiHE7dvR8VYPG97+J/GNC5FKGepKdEDUFeXRzDxPF1X/Btc8L+v7oqIQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "node_modules/eslint/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmmirror.com/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint/node_modules/inquirer/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", + "dev": true + }, + "node_modules/eslint/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/eslint/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/espree": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "dependencies": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "dev": true, + "dependencies": { + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express": { + "version": "4.17.3", + "resolved": "https://registry.npmmirror.com/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.7", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "dependencies": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/file-loader/-/file-loader-4.3.0.tgz", + "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", + "dev": true, + "dependencies": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "node_modules/filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "dependencies": { + "debug": "=3.1.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/follow-redirects/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/follow-redirects/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "devOptional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "devOptional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "9.2.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "dependencies": { + "delegate": "^3.1.2" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "node_modules/gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==", + "dev": true + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", + "dev": true + }, + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, + "node_modules/html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmmirror.com/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "dependencies": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "bin": { + "html-minifier": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-Br4ifmjQojUP4EmHnRBoUIYcZ9J7M4bTMcm7u6xoIAIuq2Nte4TzXX0533owvkQKQD1WeMTTTyD4Ni4QKxS0Bg==", + "deprecated": "3.x is no longer supported", + "dev": true, + "dependencies": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/html-webpack-plugin/node_modules/big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/html-webpack-plugin/node_modules/emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/html-webpack-plugin/node_modules/json5": { + "version": "0.5.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-0.5.1.tgz", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/html-webpack-plugin/node_modules/loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug==", + "dev": true, + "dependencies": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.6.tgz", + "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/http-proxy-middleware/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dependencies": { + "postcss": "^7.0.14" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "node_modules/import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==", + "dev": true, + "dependencies": { + "import-from": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dev": true, + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", + "dev": true + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmmirror.com/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/internal-ip/node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/intersperse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/intersperse/-/intersperse-1.0.0.tgz", + "integrity": "sha512-LGcfug7OTeWkaQ8PEq8XbTy9Jl6uCNg8DrPnQUmwxSY8UETj1Y+LLmpdD0qHdEj6KVchuH3BE3ZzIXQ1t3oFUw==" + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/ip/-/ip-1.1.5.tgz", + "integrity": "sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA==", + "dev": true + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "optional": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "dependencies": { + "ci-info": "^1.5.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", + "dev": true, + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "devOptional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-mobile": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/is-mobile/-/is-mobile-2.2.2.tgz", + "integrity": "sha512-wW/SXnYJkTjs++tVK5b6kVITZpAZPtUrt9SF80vvxGiF/Oywal+COk1jlRkiVq15RFNEQKQY31TkV24/1T5cVg==" + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/ismobilejs": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ismobilejs/-/ismobilejs-1.1.1.tgz", + "integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "node_modules/js-md5": { + "version": "0.7.3", + "resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz", + "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==" + }, + "node_modules/js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/js-queue": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/js-queue/-/js-queue-2.0.2.tgz", + "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==", + "dev": true, + "dependencies": { + "easy-stack": "^1.0.1" + }, + "engines": { + "node": ">=1.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "dependencies": { + "string-convert": "^0.2.0" + } + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/launch-editor": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.3.0.tgz", + "integrity": "sha512-3QrsCXejlWYHjBPFXTyGNhPj4rrQdB+5+r5r3wArpLH201aR+nWUgw/zKKkTmilCfY/sv6u8qo98pNvtg8LUTA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.6.1" + } + }, + "node_modules/launch-editor-middleware": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.3.0.tgz", + "integrity": "sha512-GJR64trLdFFwCoL9DMn/d1SZX0OzTDPixu4mcfWTShQ4tIqCHCGvlg9fOEYQXyBlrSMQwylsJfUWncheShfV2w==", + "dev": true, + "dependencies": { + "launch-editor": "^2.3.0" + } + }, + "node_modules/launch-editor/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/less": { + "version": "3.13.1", + "resolved": "https://registry.npmmirror.com/less/-/less-3.13.1.tgz", + "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==", + "dependencies": { + "copy-anything": "^2.0.1", + "tslib": "^1.10.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "native-request": "^1.0.5", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/less-loader/-/less-loader-5.0.0.tgz", + "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==", + "dependencies": { + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^4.0.1" + }, + "engines": { + "node": ">= 4.8.0" + }, + "peerDependencies": { + "less": "^2.3.1 || ^3.0.0", + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-fs-cache": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", + "dev": true, + "dependencies": { + "find-cache-dir": "^0.1.1", + "mkdirp": "^0.5.1" + } + }, + "node_modules/loader-fs-cache/node_modules/find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-fs-cache/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-fs-cache/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-fs-cache/node_modules/pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==", + "dev": true, + "dependencies": { + "find-up": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmmirror.com/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true + }, + "node_modules/lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.transform": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.transform/-/lodash.transform-4.6.0.tgz", + "integrity": "sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/loglevel": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/loglevel/-/loglevel-1.8.0.tgz", + "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/marked": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/marked/-/marked-1.2.4.tgz", + "integrity": "sha512-6x5TFGCTKSQBLTZtOburGxCxFEBJEGYVLwCMTBCxzvyuisGcC20UNzDSJhCr/cJ/Kmh6ulfJm10g6WWEAJ3kvg==", + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">= 8.16.2" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "devOptional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "0.9.0", + "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.4.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmmirror.com/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==", + "dev": true + }, + "node_modules/mutationobserver-shim": { + "version": "0.3.7", + "resolved": "https://registry.npmmirror.com/mutationobserver-shim/-/mutationobserver-shim-0.3.7.tgz", + "integrity": "sha512-oRIDTyZQU96nAiz2AQyngwx1e89iApl2hN5AOYwyxLUB47UYsU3Wv9lJWqH5y/QdiYkc5HQLi23ZNB3fELdHcQ==" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmmirror.com/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanopop": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/nanopop/-/nanopop-2.1.0.tgz", + "integrity": "sha512-jGTwpFRexSH+fxappnGQtN9dspgE2ipa1aOjtR24igG0pv6JCxImIAmrLRHX+zUF5+1wtsFVbKyfP51kIGAVNw==" + }, + "node_modules/native-request": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/native-request/-/native-request-1.1.0.tgz", + "integrity": "sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==", + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmmirror.com/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-ipc": { + "version": "9.2.1", + "resolved": "https://registry.npmmirror.com/node-ipc/-/node-ipc-9.2.1.tgz", + "integrity": "sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==", + "dev": true, + "dependencies": { + "event-pubsub": "4.3.0", + "js-message": "1.0.7", + "js-queue": "2.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "node_modules/node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", + "dev": true, + "dependencies": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + } + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", + "dev": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/omit.js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/omit.js/-/omit.js-1.0.2.tgz", + "integrity": "sha512-/QPc6G2NS+8d4L/cQhbk6Yit1WTB6Us2g84A7A/1+w9d/eRGHyEqC5kkQtHVoHZ5NFWGG7tUGgrhVZwgZanKrQ==", + "dependencies": { + "babel-runtime": "^6.23.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmmirror.com/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/open/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/opn/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "devOptional": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-type/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pnp-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", + "dev": true, + "dependencies": { + "ts-pnp": "^1.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmmirror.com/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-colormin/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "dev": true, + "dependencies": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-loader/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "dependencies": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dependencies": { + "postcss": "^7.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dependencies": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dependencies": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dependencies": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "dependencies": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "dependencies": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-url/node_modules/normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.9", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", + "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-svgo/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/postcss/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prettier": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.6.0.tgz", + "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==", + "dev": true, + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.3", + "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "optional": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", + "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true, + "engines": { + "node": ">=6.5.0" + } + }, + "node_modules/regexpu-core": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "devOptional": true + }, + "node_modules/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/renderkid/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/renderkid/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmmirror.com/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + } + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", + "dev": true + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", + "dev": true + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + } + }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "1.10.14", + "resolved": "https://registry.npmmirror.com/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", + "dev": true, + "dependencies": { + "node-forge": "^0.10.0" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.17.2", + "resolved": "https://registry.npmmirror.com/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==" + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs-client": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/sockjs-client/-/sockjs-client-1.6.0.tgz", + "integrity": "sha512-qVHJlyfdHFht3eBFZdKEXKTlb7I4IV41xnVNo8yUKA1UHcPJwgW2SvTq9LhnjjCywSkSK7c/e4nghU0GOoMCRQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "eventsource": "^1.1.0", + "faye-websocket": "^0.11.4", + "inherits": "^2.0.4", + "url-parse": "^1.5.10" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmmirror.com/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "node_modules/stackframe": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.2.1.tgz", + "integrity": "sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg==", + "dev": true + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmmirror.com/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmmirror.com/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmmirror.com/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dependencies": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser-webpack-plugin/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser-webpack-plugin/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/terser-webpack-plugin/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser-webpack-plugin/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser-webpack-plugin/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser-webpack-plugin/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/terser-webpack-plugin/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thread-loader": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/thread-loader/-/thread-loader-2.1.3.tgz", + "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==", + "dev": true, + "dependencies": { + "loader-runner": "^2.3.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.0" + }, + "engines": { + "node": ">= 6.9.0 <7.0.0 || >= 8.9.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmmirror.com/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "dev": true + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "node_modules/tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", + "engines": { + "node": "*" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha512-FclLrw8b9bMWf4QlCJuHBEVhSRsqDj6u3nIjAzPeJvgl//1hBlffdlk0MALceL14+koWEdU4ofRAXofbODxQzg==", + "dev": true + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.0", + "resolved": "https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-3.14.0.tgz", + "integrity": "sha512-cg/1jAZoL57R39+wiw4u/SCC6Ic9Q5NqjBOb+9xISedOYurfog9ZNmKJSxAnb2m/5Bq4lE9lhUcau33Ml8DM0g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmmirror.com/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dev": true, + "dependencies": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uglify-js/node_modules/commander": { + "version": "2.19.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "node_modules/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", + "dev": true + }, + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==", + "dev": true + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "dev": true + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "devOptional": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmmirror.com/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-loader": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/url-loader/-/url-loader-2.3.0.tgz", + "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", + "dev": true, + "dependencies": { + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.5.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmmirror.com/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "node_modules/vue": { + "version": "2.6.14", + "resolved": "https://registry.npmmirror.com/vue/-/vue-2.6.14.tgz", + "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==" + }, + "node_modules/vue-eslint-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz", + "integrity": "sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "eslint-scope": "^4.0.0", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.1.0", + "esquery": "^1.0.1", + "lodash": "^4.17.11" + }, + "engines": { + "node": ">=6.5" + }, + "peerDependencies": { + "eslint": "^5.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/espree/-/espree-4.1.0.tgz", + "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "dev": true, + "dependencies": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "node_modules/vue-i18n": { + "version": "8.27.0", + "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-8.27.0.tgz", + "integrity": "sha512-SX35iJHL5PJ4Gfh0Mo/q0shyHiI2V6Zkh51c+k8E9O1RKv5BQyYrCxRzpvPrsIOJEnLaeiovet3dsUB0e/kDzw==" + }, + "node_modules/vue-loader": { + "version": "15.9.8", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.9.8.tgz", + "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==", + "dev": true, + "dependencies": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "peerDependencies": { + "css-loader": "*", + "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/vue-loader-v16": { + "name": "vue-loader", + "version": "16.8.3", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "dev": true, + "optional": true, + "dependencies": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "peerDependencies": { + "webpack": "^4.1.0 || ^5.0.0-0" + } + }, + "node_modules/vue-loader-v16/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-loader-v16/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-loader-v16/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/vue-loader-v16/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "node_modules/vue-loader-v16/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-loader-v16/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "optional": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/vue-loader-v16/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-loader/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "node_modules/vue-ref": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/vue-ref/-/vue-ref-2.0.0.tgz", + "integrity": "sha512-uKNKpFOVeWNqS2mrBZqnpLyXJo5Q+vnkex6JvpENvhXHFNBW/SJTP8vJywLuVT3DpxwXcF9N0dyIiZ4/NpTexQ==" + }, + "node_modules/vue-router": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-3.5.3.tgz", + "integrity": "sha512-FUlILrW3DGitS2h+Xaw8aRNvGTwtuaxrRkNSHWTizOfLUie7wuYwezeZ50iflRn8YPV5kxmU2LQuu3nM/b3Zsg==" + }, + "node_modules/vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "dependencies": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "node_modules/vue-style-loader/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "node_modules/vue-template-compiler": { + "version": "2.6.14", + "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz", + "integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "node_modules/vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "node_modules/vue2-ace-editor": { + "version": "0.0.15", + "resolved": "https://registry.npmmirror.com/vue2-ace-editor/-/vue2-ace-editor-0.0.15.tgz", + "integrity": "sha512-e3TR9OGXc71cGpvYcW068lNpRcFt3+OONCC81oxHL/0vwl/V3OgqnNMw2/RRolgQkO/CA5AjqVHWmANWKOtNnQ==", + "dependencies": { + "brace": "^0.11.0" + } + }, + "node_modules/vuex": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz", + "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==", + "peerDependencies": { + "vue": "^2.0.0" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmmirror.com/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "3.9.0", + "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", + "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.19", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 6.14.4" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "dev": true, + "dependencies": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dev": true, + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.3", + "resolved": "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", + "dev": true, + "dependencies": { + "ansi-html-community": "0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-dev-server/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/webpack-dev-server/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/yargs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/yargs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/yorkie/-/yorkie-2.0.0.tgz", + "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/yorkie/node_modules/execa": { + "version": "0.8.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-0.8.0.tgz", + "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", + "dev": true, + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/yorkie/node_modules/normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yorkie/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, + "@ant-design/colors": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-3.2.2.tgz", + "integrity": "sha512-YKgNbG2dlzqMhA9NtI3/pbY16m3Yl/EeWBRa+lB1X1YaYxHrxNexiQYCLTWO/uDvAjLFMEDU+zR901waBtMtjQ==", + "requires": { + "tinycolor2": "^1.4.1" + } + }, + "@ant-design/icons": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/@ant-design/icons/-/icons-2.1.1.tgz", + "integrity": "sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w==" + }, + "@ant-design/icons-vue": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-2.0.0.tgz", + "integrity": "sha512-2c0QQE5hL4N48k5NkPG5sdpMl9YnvyNhf0U7YkdZYDlLnspoRU7vIA0UK9eHBs6OpFLcJB6o8eJrIl2ajBskPg==", + "requires": { + "@ant-design/colors": "^3.1.0", + "babel-runtime": "^6.26.0" + } + }, + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.17.7.tgz", + "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", + "dev": true + }, + "@babel/core": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.17.7.tgz", + "integrity": "sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.7", + "@babel/parser": "^7.17.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.17.7.tgz", + "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", + "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.17.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", + "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.17.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-simple-access": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helpers": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.17.7.tgz", + "integrity": "sha512-TKsj9NkjJfTBxM7Phfy7kv6yYc4ZcOo+AaWGqQOKTPDOmcGkIFb5xNA746eKisQkm4yavUYh4InYM9S+VnO01w==", + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + } + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.17.7.tgz", + "integrity": "sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.17.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz", + "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.6", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.17.2", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", + "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.1", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.0", + "charcodes": "^0.2.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.17.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.16.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.17.0", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", + "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz", + "integrity": "sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz", + "integrity": "sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", + "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/preset-env": { + "version": "7.16.11", + "resolved": "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.17.7.tgz", + "integrity": "sha512-L6rvG9GDxaLgFjg41K+5Yv9OMrU98sWe+Ykmc6FDJW/+vYZMhdOMKkISgzptMaERHvS2Y2lw9MDRm2gHhlQQoA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "dev": true + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "dev": true + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "dev": true + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmmirror.com/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "dev": true, + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, + "@intervolga/optimize-cssnano-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz", + "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==", + "dev": true, + "requires": { + "cssnano": "^4.0.0", + "cssnano-preset-default": "^4.0.0", + "postcss": "^7.0.0" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@simonwep/pickr": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.7.4.tgz", + "integrity": "sha512-fq7jgKJT21uWGC1mARBHvvd1JYlEf93o7SuVOB4Lr0x/2UPuNC9Oe9n/GzVeg4oVtqMDfh1wIEJpsdOJEZb+3g==", + "requires": { + "core-js": "^3.6.5", + "nanopop": "^2.1.0" + } + }, + "@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmmirror.com/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmmirror.com/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmmirror.com/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/node": { + "version": "17.0.21", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/tapable": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.13.1", + "resolved": "https://registry.npmmirror.com/@types/uglify-js/-/uglify-js-3.13.1.tgz", + "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/webpack": { + "version": "4.41.32", + "resolved": "https://registry.npmmirror.com/@types/webpack/-/webpack-4.41.32.tgz", + "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/webpack-dev-server": { + "version": "3.11.6", + "resolved": "https://registry.npmmirror.com/@types/webpack-dev-server/-/webpack-dev-server-3.11.6.tgz", + "integrity": "sha512-XCph0RiiqFGetukCTC3KVnY1jwLcZ84illFRMbyFzCcWl90B/76ew0tSqF46oBhnLC4obNDG7dMO0JfTN0MgMQ==", + "dev": true, + "requires": { + "@types/connect-history-api-fallback": "*", + "@types/express": "*", + "@types/serve-static": "*", + "@types/webpack": "^4", + "http-proxy-middleware": "^1.0.0" + } + }, + "@types/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz", + "integrity": "sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==", + "dev": true + }, + "@vue/babel-helper-vue-transform-on": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", + "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==", + "dev": true + }, + "@vue/babel-plugin-jsx": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", + "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "@vue/babel-helper-vue-transform-on": "^1.0.2", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-plugin-transform-vue-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz", + "integrity": "sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true + } + } + }, + "@vue/babel-preset-app": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/babel-preset-app/-/babel-preset-app-4.5.16.tgz", + "integrity": "sha512-ad35OBAQgc0m1m4iqRhMRuMN0rvGb8vFx0hU7lVjVMIuuLLXornU38d2U1uMI096dIItht70RCJlZt48DsLbUQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.0", + "@babel/helper-compilation-targets": "^7.9.6", + "@babel/helper-module-imports": "^7.8.3", + "@babel/plugin-proposal-class-properties": "^7.8.3", + "@babel/plugin-proposal-decorators": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.11.0", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.0", + "@vue/babel-plugin-jsx": "^1.0.3", + "@vue/babel-preset-jsx": "^1.2.4", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.6.5", + "core-js-compat": "^3.6.5", + "semver": "^6.1.0" + } + }, + "@vue/babel-preset-jsx": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz", + "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==", + "dev": true, + "requires": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "@vue/babel-sugar-composition-api-inject-h": "^1.2.1", + "@vue/babel-sugar-composition-api-render-instance": "^1.2.4", + "@vue/babel-sugar-functional-vue": "^1.2.2", + "@vue/babel-sugar-inject-h": "^1.2.2", + "@vue/babel-sugar-v-model": "^1.2.3", + "@vue/babel-sugar-v-on": "^1.2.3" + } + }, + "@vue/babel-sugar-composition-api-inject-h": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz", + "integrity": "sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-composition-api-render-instance": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz", + "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-functional-vue": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz", + "integrity": "sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-inject-h": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz", + "integrity": "sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-v-model": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz", + "integrity": "sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true + } + } + }, + "@vue/babel-sugar-v-on": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz", + "integrity": "sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + }, + "@vue/cli-overlay": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-4.5.16.tgz", + "integrity": "sha512-RJB9I/3OMhycm0Hn0ArC2/2UGHJTldujPWZ0FDureX3YbK5CaE0Zfjg+qgp1i2HzIoIGPf25u6LLUsxPngKQ4w==", + "dev": true + }, + "@vue/cli-plugin-babel": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.16.tgz", + "integrity": "sha512-s6nrN3CvEaoqEPlA5CIOcsOsqF7LIihTsuJIy4TefxNLPXK6NeuJSO7aQUYCZv1LrG/EoJ//PLsYPUZSPDdAbw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.0", + "@vue/babel-preset-app": "^4.5.16", + "@vue/cli-shared-utils": "^4.5.16", + "babel-loader": "^8.1.0", + "cache-loader": "^4.1.0", + "thread-loader": "^2.1.3", + "webpack": "^4.0.0" + } + }, + "@vue/cli-plugin-eslint": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.16.tgz", + "integrity": "sha512-vaf6IKeeBYKgLMfM5zaNonC0ArBZnlhv4rw+uVdCM+INRX/BDvdTN9DoczGcCn4sAWG2dBOtstegr2OJAXT1+w==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^4.5.16", + "eslint-loader": "^2.2.1", + "globby": "^9.2.0", + "inquirer": "^7.1.0", + "webpack": "^4.0.0", + "yorkie": "^2.0.0" + } + }, + "@vue/cli-plugin-router": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-4.5.16.tgz", + "integrity": "sha512-aaroSwzSXo/2TNG7MFa6hyQMfXGqehvpdnZazTEn2N3Q1jxI/1jjeDEjXjA9mkgiBG7fY09ykRw1ORwEx9kScQ==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^4.5.16" + } + }, + "@vue/cli-plugin-vuex": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.16.tgz", + "integrity": "sha512-cj9x7zaoc81Nz14cUUwQ3+niSJWBulTRPA5TeVIPyhxp0+Nk32xeBsc8JuVK9GmvLF6FQRizM94KvJWIyPAHVA==", + "dev": true, + "requires": {} + }, + "@vue/cli-service": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-4.5.16.tgz", + "integrity": "sha512-G/AFv+4oCkb86TbVgazhYdnOM2VMUVE4vqvsK/WAQhvQBndbQn3nkiDYw7efQzyxjlN2BhpudXCP+jSQ5jAaXw==", + "dev": true, + "requires": { + "@intervolga/optimize-cssnano-plugin": "^1.0.5", + "@soda/friendly-errors-webpack-plugin": "^1.7.1", + "@soda/get-current-script": "^1.0.0", + "@types/minimist": "^1.2.0", + "@types/webpack": "^4.0.0", + "@types/webpack-dev-server": "^3.11.0", + "@vue/cli-overlay": "^4.5.16", + "@vue/cli-plugin-router": "^4.5.16", + "@vue/cli-plugin-vuex": "^4.5.16", + "@vue/cli-shared-utils": "^4.5.16", + "@vue/component-compiler-utils": "^3.1.2", + "@vue/preload-webpack-plugin": "^1.1.0", + "@vue/web-component-wrapper": "^1.2.0", + "acorn": "^7.4.0", + "acorn-walk": "^7.1.1", + "address": "^1.1.2", + "autoprefixer": "^9.8.6", + "browserslist": "^4.12.0", + "cache-loader": "^4.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.4", + "clipboardy": "^2.3.0", + "cliui": "^6.0.0", + "copy-webpack-plugin": "^5.1.1", + "css-loader": "^3.5.3", + "cssnano": "^4.1.10", + "debug": "^4.1.1", + "default-gateway": "^5.0.5", + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^4.2.0", + "fs-extra": "^7.0.1", + "globby": "^9.2.0", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^3.2.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "lodash.transform": "^4.6.0", + "mini-css-extract-plugin": "^0.9.0", + "minimist": "^1.2.5", + "pnp-webpack-plugin": "^1.6.4", + "portfinder": "^1.0.26", + "postcss-loader": "^3.0.0", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^1.4.4", + "thread-loader": "^2.1.3", + "url-loader": "^2.2.0", + "vue-loader": "^15.9.2", + "vue-loader-v16": "npm:vue-loader@^16.1.0", + "vue-style-loader": "^4.1.2", + "webpack": "^4.0.0", + "webpack-bundle-analyzer": "^3.8.0", + "webpack-chain": "^6.4.0", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2" + } + }, + "@vue/cli-shared-utils": { + "version": "4.5.16", + "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-4.5.16.tgz", + "integrity": "sha512-9VrTpMmK2fE5JQlaXP79Xdhxv+opAsqtnj7QoFqahcz01lzLaBzzuag7W5oduhwqenrHRG3vaRUs563fwbOtZA==", + "dev": true, + "requires": { + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "node-ipc": "9.2.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "read-pkg": "^5.1.1", + "request": "^2.88.2", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" + } + }, + "@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2 || ^2.0.0", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + } + } + }, + "@vue/eslint-config-standard": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@vue/eslint-config-standard/-/eslint-config-standard-4.0.0.tgz", + "integrity": "sha512-bQghq1cw1BuMRHNhr3tRpAJx1tpGy0QtajQX873kLtA9YVuOIoXR7nAWnTN09bBHnSUh2N288vMsqPi2fI4Hzg==", + "dev": true, + "requires": { + "eslint-config-standard": "^12.0.0", + "eslint-plugin-import": "^2.14.0", + "eslint-plugin-node": "^8.0.0", + "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-standard": "^4.0.0" + } + }, + "@vue/preload-webpack-plugin": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz", + "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==", + "dev": true, + "requires": {} + }, + "@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "add-dom-event-listener": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", + "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", + "requires": { + "object-assign": "4.x" + } + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "requires": {} + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ant-design-vue": { + "version": "1.7.8", + "resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-1.7.8.tgz", + "integrity": "sha512-F1hmiS9vwbyfuFvlamdW5l9bHKqRlj9wHaGDIE41NZMWXyWy8qL0UFa/+I0Wl8gQWZCqODW5pN6Yfoyn85At3A==", + "requires": { + "@ant-design/icons": "^2.1.1", + "@ant-design/icons-vue": "^2.0.0", + "@simonwep/pickr": "~1.7.0", + "add-dom-event-listener": "^1.0.2", + "array-tree-filter": "^2.1.0", + "async-validator": "^3.0.3", + "babel-helper-vue-jsx-merge-props": "^2.0.3", + "babel-runtime": "6.x", + "classnames": "^2.2.5", + "component-classes": "^1.2.6", + "dom-align": "^1.10.4", + "dom-closest": "^0.2.0", + "dom-scroll-into-view": "^2.0.0", + "enquire.js": "^2.1.6", + "intersperse": "^1.0.0", + "is-mobile": "^2.2.1", + "is-negative-zero": "^2.0.0", + "ismobilejs": "^1.0.0", + "json2mq": "^0.2.0", + "lodash": "^4.17.5", + "moment": "^2.21.0", + "mutationobserver-shim": "^0.3.2", + "node-emoji": "^1.10.0", + "omit.js": "^1.0.0", + "raf": "^3.4.0", + "resize-observer-polyfill": "^1.5.1", + "shallow-equal": "^1.0.0", + "shallowequal": "^1.0.2", + "vue-ref": "^2.0.0", + "warning": "^4.0.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "devOptional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-tree-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz", + "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==" + }, + "array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + } + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmmirror.com/util/-/util-0.10.3.tgz", + "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "devOptional": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "async-validator": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz", + "integrity": "sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmmirror.com/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmmirror.com/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + } + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, + "babel-loader": { + "version": "8.2.3", + "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-import": { + "version": "1.13.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-import/-/babel-plugin-import-1.13.3.tgz", + "integrity": "sha512-1qCWdljJOrDRH/ybaCZuDgySii4yYrtQ8OJQwrcDqdt0y67N30ng3X3nABg6j7gR7qUJgcMa9OMhc4AGViDwWw==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/runtime": "^7.0.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmmirror.com/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmmirror.com/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "optional": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + }, + "body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "qs": { + "version": "6.9.7", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/brace/-/brace-0.11.1.tgz", + "integrity": "sha512-Fc8Ne62jJlKHiG/ajlonC4Sd66Pq68fFwK4ihJGNZpGqboc324SQk+lRvMzpPRuJOmfrJefdG8/7JdWX4bzJ2Q==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.20.2", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + } + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/buffer-json/-/buffer-json-2.0.0.tgz", + "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "cacache": { + "version": "13.0.1", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-13.0.1.tgz", + "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", + "requires": { + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "ssri": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-7.1.1.tgz", + "integrity": "sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw==", + "requires": { + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" + } + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", + "dev": true, + "requires": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001317", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz", + "integrity": "sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ==", + "dev": true + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "charcodes": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/charcodes/-/charcodes-0.2.0.tgz", + "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmmirror.com/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "optional": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "optional": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "clipboard": { + "version": "2.0.10", + "resolved": "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.10.tgz", + "integrity": "sha512-cz3m2YVwFz95qSEbCDi2fzLN/epEN9zXBvfgAoGkvGOJZATMl9gtTDVOtBYkx2ODUJl2kvmud7n32sV2BpYR4g==", + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "requires": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dev": true, + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "color-string": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "component-classes": { + "version": "1.2.6", + "resolved": "https://registry.npmmirror.com/component-classes/-/component-classes-1.2.6.tgz", + "integrity": "sha512-hPFGULxdwugu1QWW3SvVOCUHLzO34+a2J6Wqy0c5ASQkfi9/8nZcBB0ZohaEbXOQlCflMAEMmEWk7u7BVs4koA==", + "requires": { + "component-indexof": "0.0.3" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "component-indexof": { + "version": "0.0.3", + "resolved": "https://registry.npmmirror.com/component-indexof/-/component-indexof-0.0.3.tgz", + "integrity": "sha512-puDQKvx/64HZXb4hBwIcvQLaLgux8o1CbWl39s41hrIIZDl1lJiD5jc22gj3RBeGK0ovxALDYpIbyjqDUUl0rw==" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "compression-webpack-plugin": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/compression-webpack-plugin/-/compression-webpack-plugin-3.1.0.tgz", + "integrity": "sha512-iqTHj3rADN4yHwXMBrQa/xrncex/uEQy8QHlaTKxGchT/hC0SdlJlmL/5eRqffmWq2ep0/Romw6Ld39JjTR/ug==", + "requires": { + "cacache": "^13.0.1", + "find-cache-dir": "^3.0.0", + "neo-async": "^2.5.0", + "schema-utils": "^2.6.1", + "serialize-javascript": "^2.1.2", + "webpack-sources": "^1.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "requires": { + "is-what": "^3.14.1" + } + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==" + }, + "copy-webpack-plugin": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz", + "integrity": "sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ==", + "dev": true, + "requires": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/globby/-/globby-7.1.1.tgz", + "integrity": "sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + } + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", + "dev": true + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + } + } + }, + "core-js": { + "version": "3.21.1", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.21.1.tgz", + "integrity": "sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig==" + }, + "core-js-compat": { + "version": "3.21.1", + "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.21.1.tgz", + "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", + "dev": true, + "requires": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmmirror.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmmirror.com/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "requires": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + } + } + }, + "css-select": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmmirror.com/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==" + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true + }, + "default-gateway": { + "version": "5.0.5", + "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-5.0.5.tgz", + "integrity": "sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==", + "dev": true, + "requires": { + "execa": "^3.3.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "dev": true, + "requires": { + "clone": "^1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + } + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + } + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-align": { + "version": "1.12.2", + "resolved": "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.2.tgz", + "integrity": "sha512-pHuazgqrsTFrGU2WLDdXxCFabkdQDx72ddkraZNih1KsMcN5qsRSTR9O4VJRlwTPCPb5COYg3LOfiMHHcPInHg==" + }, + "dom-closest": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/dom-closest/-/dom-closest-0.2.0.tgz", + "integrity": "sha512-6neTn1BtJlTSt+XSISXpnOsF1uni1CHsP/tmzZMGWxasYFHsBOqrHPnzmneqEgKhpagnfnfSfbvRRW0xFsBHAA==", + "requires": { + "dom-matches": ">=1.0.1" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-matches": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/dom-matches/-/dom-matches-2.0.0.tgz", + "integrity": "sha512-2VI856xEDCLXi19W+4BechR5/oIS6bKCKqcf16GR8Pg7dGLJ/eBOWVbCmQx2ISvYH6wTNx5Ef7JTOw1dRGRx6A==" + }, + "dom-scroll-into-view": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz", + "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==" + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmmirror.com/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.85", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.85.tgz", + "integrity": "sha512-K9AsQ41WS2bjZUFpRWfvaS4RjEcRCamEkBJN1Z1TQILBfP1H8QnJ9ti0wiLiMv0sRjX3EHKzgs9jDnmGFx2jXg==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "enquire.js": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/enquire.js/-/enquire.js-2.1.6.tgz", + "integrity": "sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==" + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.0.7.tgz", + "integrity": "sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==", + "dev": true, + "requires": { + "stackframe": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha512-wFUFA5bg5dviipbQQ32yOQhl6gcJaJXiHE7dvR8VYPG97+J/GNC5FKGepKdEDUFeXRzDxPF1X/Btc8L+v7oqIQ==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmmirror.com/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "eslint-config-standard": { + "version": "12.0.0", + "resolved": "https://registry.npmmirror.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", + "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-loader": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/eslint-loader/-/eslint-loader-2.2.1.tgz", + "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", + "dev": true, + "requires": { + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmmirror.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-es": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz", + "integrity": "sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==", + "dev": true, + "requires": { + "eslint-utils": "^1.4.2", + "regexpp": "^2.0.1" + } + }, + "eslint-plugin-import": { + "version": "2.25.4", + "resolved": "https://registry.npmmirror.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.2", + "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.12.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "eslint-plugin-node": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz", + "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", + "dev": true, + "requires": { + "eslint-plugin-es": "^1.3.1", + "eslint-utils": "^1.3.1", + "ignore": "^5.0.2", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "semver": "^5.5.0" + }, + "dependencies": { + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", + "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", + "dev": true + }, + "eslint-plugin-standard": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", + "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", + "dev": true, + "requires": {} + }, + "eslint-plugin-vue": { + "version": "5.2.3", + "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz", + "integrity": "sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw==", + "dev": true, + "requires": { + "vue-eslint-parser": "^5.0.0" + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "requires": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + }, + "dependencies": { + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "express": { + "version": "4.17.3", + "resolved": "https://registry.npmmirror.com/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.7", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "qs": { + "version": "6.9.7", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/file-loader/-/file-loader-4.3.0.tgz", + "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "devOptional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "devOptional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "requires": { + "delegate": "^3.1.2" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", + "dev": true + }, + "html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmmirror.com/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + } + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, + "html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-Br4ifmjQojUP4EmHnRBoUIYcZ9J7M4bTMcm7u6xoIAIuq2Nte4TzXX0533owvkQKQD1WeMTTTyD4Ni4QKxS0Bg==", + "dev": true, + "requires": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-0.5.1.tgz", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug==", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.6.tgz", + "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "requires": { + "postcss": "^7.0.14" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "optional": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmmirror.com/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "dependencies": { + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + } + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "intersperse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/intersperse/-/intersperse-1.0.0.tgz", + "integrity": "sha512-LGcfug7OTeWkaQ8PEq8XbTy9Jl6uCNg8DrPnQUmwxSY8UETj1Y+LLmpdD0qHdEj6KVchuH3BE3ZzIXQ1t3oFUw==" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/ip/-/ip-1.1.5.tgz", + "integrity": "sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA==", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "dev": true + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "devOptional": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "devOptional": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-mobile": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/is-mobile/-/is-mobile-2.2.2.tgz", + "integrity": "sha512-wW/SXnYJkTjs++tVK5b6kVITZpAZPtUrt9SF80vvxGiF/Oywal+COk1jlRkiVq15RFNEQKQY31TkV24/1T5cVg==" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "ismobilejs": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ismobilejs/-/ismobilejs-1.1.1.tgz", + "integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "js-md5": { + "version": "0.7.3", + "resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz", + "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==" + }, + "js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true + }, + "js-queue": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/js-queue/-/js-queue-2.0.2.tgz", + "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==", + "dev": true, + "requires": { + "easy-stack": "^1.0.1" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "requires": { + "string-convert": "^0.2.0" + } + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "launch-editor": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.3.0.tgz", + "integrity": "sha512-3QrsCXejlWYHjBPFXTyGNhPj4rrQdB+5+r5r3wArpLH201aR+nWUgw/zKKkTmilCfY/sv6u8qo98pNvtg8LUTA==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.6.1" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + } + } + }, + "launch-editor-middleware": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.3.0.tgz", + "integrity": "sha512-GJR64trLdFFwCoL9DMn/d1SZX0OzTDPixu4mcfWTShQ4tIqCHCGvlg9fOEYQXyBlrSMQwylsJfUWncheShfV2w==", + "dev": true, + "requires": { + "launch-editor": "^2.3.0" + } + }, + "less": { + "version": "3.13.1", + "resolved": "https://registry.npmmirror.com/less/-/less-3.13.1.tgz", + "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==", + "requires": { + "copy-anything": "^2.0.1", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "native-request": "^1.0.5", + "source-map": "~0.6.0", + "tslib": "^1.10.0" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } + } + }, + "less-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/less-loader/-/less-loader-5.0.0.tgz", + "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==", + "requires": { + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^4.0.1" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "requires": { + "immediate": "~3.0.5" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "loader-fs-cache": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", + "dev": true, + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + } + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmmirror.com/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "requires": { + "lie": "3.1.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "lodash.transform": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.transform/-/lodash.transform-4.6.0.tgz", + "integrity": "sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "loglevel": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/loglevel/-/loglevel-1.8.0.tgz", + "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "requires": { + "object-visit": "^1.0.0" + } + }, + "marked": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/marked/-/marked-1.2.4.tgz", + "integrity": "sha512-6x5TFGCTKSQBLTZtOburGxCxFEBJEGYVLwCMTBCxzvyuisGcC20UNzDSJhCr/cJ/Kmh6ulfJm10g6WWEAJ3kvg==" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "devOptional": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.9.0", + "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "requires": { + "minipass": "^3.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmmirror.com/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==", + "dev": true + }, + "mutationobserver-shim": { + "version": "0.3.7", + "resolved": "https://registry.npmmirror.com/mutationobserver-shim/-/mutationobserver-shim-0.3.7.tgz", + "integrity": "sha512-oRIDTyZQU96nAiz2AQyngwx1e89iApl2hN5AOYwyxLUB47UYsU3Wv9lJWqH5y/QdiYkc5HQLi23ZNB3fELdHcQ==" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmmirror.com/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "nanopop": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/nanopop/-/nanopop-2.1.0.tgz", + "integrity": "sha512-jGTwpFRexSH+fxappnGQtN9dspgE2ipa1aOjtR24igG0pv6JCxImIAmrLRHX+zUF5+1wtsFVbKyfP51kIGAVNw==" + }, + "native-request": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/native-request/-/native-request-1.1.0.tgz", + "integrity": "sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==", + "optional": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmmirror.com/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "requires": { + "lodash": "^4.17.21" + } + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-ipc": { + "version": "9.2.1", + "resolved": "https://registry.npmmirror.com/node-ipc/-/node-ipc-9.2.1.tgz", + "integrity": "sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==", + "dev": true, + "requires": { + "event-pubsub": "4.3.0", + "js-message": "1.0.7", + "js-queue": "2.0.2" + } + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + } + } + }, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "dev": true + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "omit.js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/omit.js/-/omit.js-1.0.2.tgz", + "integrity": "sha512-/QPc6G2NS+8d4L/cQhbk6Yit1WTB6Us2g84A7A/1+w9d/eRGHyEqC5kkQtHVoHZ5NFWGG7tUGgrhVZwgZanKrQ==", + "requires": { + "babel-runtime": "^6.23.0" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmmirror.com/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true + } + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + }, + "dependencies": { + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true + } + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==" + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "devOptional": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + } + } + }, + "pnp-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmmirror.com/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==" + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "requires": { + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-selector-parser": { + "version": "6.0.9", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", + "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "dev": true + }, + "prettier": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.6.0.tgz", + "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==", + "dev": true, + "optional": true + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "dev": true + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==" + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "requires": { + "performance-now": "^2.1.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.3", + "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", + "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "regexpu-core": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "devOptional": true + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmmirror.com/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==" + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "selfsigned": { + "version": "1.10.14", + "resolved": "https://registry.npmmirror.com/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "send": { + "version": "0.17.2", + "resolved": "https://registry.npmmirror.com/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==" + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "sockjs-client": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/sockjs-client/-/sockjs-client-1.6.0.tgz", + "integrity": "sha512-qVHJlyfdHFht3eBFZdKEXKTlb7I4IV41xnVNo8yUKA1UHcPJwgW2SvTq9LhnjjCywSkSK7c/e4nghU0GOoMCRQ==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "eventsource": "^1.1.0", + "faye-websocket": "^0.11.4", + "inherits": "^2.0.4", + "url-parse": "^1.5.10" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmmirror.com/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stackframe": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.2.1.tgz", + "integrity": "sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmmirror.com/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "dependencies": { + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + }, + "dependencies": { + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + } + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + } + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmmirror.com/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmmirror.com/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==" + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "thread-loader": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/thread-loader/-/thread-loader-2.1.3.tgz", + "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==", + "dev": true, + "requires": { + "loader-runner": "^2.3.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmmirror.com/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "dev": true + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha512-FclLrw8b9bMWf4QlCJuHBEVhSRsqDj6u3nIjAzPeJvgl//1hBlffdlk0MALceL14+koWEdU4ofRAXofbODxQzg==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true + }, + "tsconfig-paths": { + "version": "3.14.0", + "resolved": "https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-3.14.0.tgz", + "integrity": "sha512-cg/1jAZoL57R39+wiw4u/SCC6Ic9Q5NqjBOb+9xISedOYurfog9ZNmKJSxAnb2m/5Bq4lE9lhUcau33Ml8DM0g==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmmirror.com/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dev": true, + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==" + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "devOptional": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmmirror.com/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + } + } + }, + "url-loader": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/url-loader/-/url-loader-2.3.0.tgz", + "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.5.0" + }, + "dependencies": { + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + } + } + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmmirror.com/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + } + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "vue": { + "version": "2.6.14", + "resolved": "https://registry.npmmirror.com/vue/-/vue-2.6.14.tgz", + "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==" + }, + "vue-eslint-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz", + "integrity": "sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "eslint-scope": "^4.0.0", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.1.0", + "esquery": "^1.0.1", + "lodash": "^4.17.11" + }, + "dependencies": { + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "espree": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/espree/-/espree-4.1.0.tgz", + "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + } + } + }, + "vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "vue-i18n": { + "version": "8.27.0", + "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-8.27.0.tgz", + "integrity": "sha512-SX35iJHL5PJ4Gfh0Mo/q0shyHiI2V6Zkh51c+k8E9O1RKv5BQyYrCxRzpvPrsIOJEnLaeiovet3dsUB0e/kDzw==" + }, + "vue-loader": { + "version": "15.9.8", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.9.8.tgz", + "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + } + } + }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.8.3", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "vue-ref": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/vue-ref/-/vue-ref-2.0.0.tgz", + "integrity": "sha512-uKNKpFOVeWNqS2mrBZqnpLyXJo5Q+vnkex6JvpENvhXHFNBW/SJTP8vJywLuVT3DpxwXcF9N0dyIiZ4/NpTexQ==" + }, + "vue-router": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-3.5.3.tgz", + "integrity": "sha512-FUlILrW3DGitS2h+Xaw8aRNvGTwtuaxrRkNSHWTizOfLUie7wuYwezeZ50iflRn8YPV5kxmU2LQuu3nM/b3Zsg==" + }, + "vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + } + } + }, + "vue-template-compiler": { + "version": "2.6.14", + "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz", + "integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==", + "requires": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "vue2-ace-editor": { + "version": "0.0.15", + "resolved": "https://registry.npmmirror.com/vue2-ace-editor/-/vue2-ace-editor-0.0.15.tgz", + "integrity": "sha512-e3TR9OGXc71cGpvYcW068lNpRcFt3+OONCC81oxHL/0vwl/V3OgqnNMw2/RRolgQkO/CA5AjqVHWmANWKOtNnQ==", + "requires": { + "brace": "^0.11.0" + } + }, + "vuex": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz", + "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==", + "requires": {} + }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "optional": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmmirror.com/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "3.9.0", + "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", + "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.19", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "dev": true, + "requires": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.11.3", + "resolved": "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", + "dev": true, + "requires": { + "ansi-html-community": "0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/yorkie/-/yorkie-2.0.0.tgz", + "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", + "dev": true, + "requires": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-0.8.0.tgz", + "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + } + } + } + } +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/package.json b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/package.json new file mode 100644 index 0000000..64699e6 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/package.json @@ -0,0 +1,67 @@ +{ + "name": "knife4j-vue", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint", + "install:pkg": "npm install --registry https://registry.npm.taobao.org" + }, + "dependencies": { + "ant-design-vue": "^1.6.5", + "async": "^3.1.0", + "axios": "^0.19.0", + "babel-plugin-import": "^1.13.0", + "clipboard": "^2.0.4", + "compression-webpack-plugin": "^3.1.0", + "core-js": "^3.3.2", + "css-loader": "^3.2.0", + "js-md5": "^0.7.3", + "less": "^3.10.3", + "less-loader": "^5.0.0", + "localforage": "^1.7.3", + "lodash": "^4.17.15", + "marked": "1.2.4", + "qs": "^6.9.4", + "vue": "^2.6.11", + "vue-i18n": "^8.15.3", + "vue-router": "^3.1.3", + "vue2-ace-editor": "^0.0.15", + "vuex": "^3.0.1", + "xml2js": "^0.4.23" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "^4.0.0", + "@vue/cli-plugin-eslint": "^4.0.0", + "@vue/cli-service": "^4.0.0", + "@vue/eslint-config-standard": "^4.0.0", + "babel-eslint": "^10.0.3", + "eslint": "^5.16.0", + "eslint-plugin-vue": "^5.0.0", + "vue-template-compiler": "^2.6.11" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/essential", + "@vue/standard" + ], + "rules": {}, + "parserOptions": { + "parser": "babel-eslint" + } + }, + "postcss": { + "plugins": { + "autoprefixer": {} + } + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ] +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/public/favicon.ico b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/public/favicon.ico new file mode 100644 index 0000000..8e6593a Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/public/favicon.ico differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/public/index.html b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/public/index.html new file mode 100644 index 0000000..94c0ca3 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + + + + +
+ + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/public/oauth/jquery.min.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/public/oauth/jquery.min.js new file mode 100644 index 0000000..644d35e --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/public/oauth/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), +a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), +null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" + + + + + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/App.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/App.vue new file mode 100644 index 0000000..66bbdee --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/App.vue @@ -0,0 +1,37 @@ + + + + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/common/lang/en.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/common/lang/en.js new file mode 100644 index 0000000..b17e379 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/common/lang/en.js @@ -0,0 +1,550 @@ +const langOptions = { + lang:'us', + title: 'title', + searchHolderText: 'Enter keyword search', + docLinkTip: 'Documentation', + langText: 'EN', + settingText: 'Settings', + cacheText: 'Clear Caches', + //文档中各个表格的属性 + table:{ + //SwaggerModels + swaggerModelsColumns:[ + { + title: 'name', + dataIndex: 'name', + width: '30%' + }, + { + title: 'type', + dataIndex: 'type', + width: '15%' + }, + { + title: 'description', + width: '35%', + dataIndex: 'description', + scopedSlots: { customRender: 'descriptionValueTemplate' } + }, + { + title: 'schema', + dataIndex: 'schemaValue', + width: '15%' + } + ], + //文档说明-请求参数 + documentRequestColumns:[ + { + title: 'name', + dataIndex: 'name', + width: '30%' + }, + { + title: 'description', + dataIndex: 'description', + width: '25%', + scopedSlots: { customRender: 'descriptionValueTemplate' } + }, + { + title: 'in', + dataIndex: 'in', + scopedSlots: { customRender: 'typeTemplate' } + }, + { + title: 'require', + dataIndex: 'require', + scopedSlots: { customRender: 'requireTemplate' } + }, + { + title: 'type', + dataIndex: 'type', + scopedSlots: { customRender: 'datatypeTemplate' } + }, + { + title: 'schema', + dataIndex: 'schemaValue', + width: '15%' + } + ], + //文档说明-响应状态 + documentResponseStatusColumns:[ + { + title: 'code', + dataIndex: 'code', + width: '20%' + }, + { + title: 'description', + dataIndex: 'description', + width: '55%', + scopedSlots: { customRender: 'descriptionTemplate' } + }, + { + title: 'schema', + dataIndex: 'schema', + scopedSlots: { customRender: 'schemaTemplate' } + } + ], + //文档说明-响应Header + documentResponseHeaderColumns:[ + { + title: 'name', + dataIndex: 'name', + width: '30%' + }, + { + title: 'description', + dataIndex: 'description', + width: '55%' + }, + { + title: 'type', + dataIndex: 'type' + } + ], + //文档说明-响应参数 + documentResponseColumns:[ + { + title: 'name', + dataIndex: 'name', + width: '35%' + }, + { + title: 'description', + dataIndex: 'description', + scopedSlots: { customRender: 'descriptionTemplate' }, + width: '40%' + }, + { + title: 'type', + dataIndex: 'type' + }, + { + title: 'schema', + dataIndex: 'schemaValue', + width: '15%' + } + ], + //调试-请求头参数 + debugRequestHeaderColumns:[ + { + title: 'name', + dataIndex: 'name', + width: '20%', + scopedSlots: { + customRender: 'headerName' + } + }, + { + title: 'value', + dataIndex: 'content', + scopedSlots: { + customRender: 'headerValue' + } + }, + { + title: 'operation', + dataIndex: 'operation', + width: '10%', + scopedSlots: { + customRender: 'operation' + } + } + ], + //调试-FormData类型请求头 + debugFormDataRequestColumns:[ + { + title: 'name', + dataIndex: 'name', + width: '20%', + scopedSlots: { + customRender: 'formName' + } + }, + { + title: 'type', + dataIndex: 'type', + width: '12%', + scopedSlots: { + customRender: 'formType' + } + }, + { + title: 'value', + dataIndex: 'content', + scopedSlots: { + customRender: 'formValue' + } + }, + { + title: 'operation', + dataIndex: 'operation', + width: '10%', + scopedSlots: { + customRender: 'operation' + } + } + ], + //调试-url-form类型请求参数头 + debugUrlFormRequestColumns:[ + { + title: 'name', + dataIndex: 'name', + width: '20%', + scopedSlots: { + customRender: 'urlFormName' + } + }, + { + title: 'value', + dataIndex: 'content', + scopedSlots: { + customRender: 'urlFormValue' + } + }, + { + title: 'operation', + dataIndex: 'operation', + width: '10%', + scopedSlots: { + customRender: 'operation' + } + } + ], + //调试-响应Header + debugResponseHeaderColumns:[ + { + title: 'name', + dataIndex: 'name', + width: '20%' + }, + { + title: 'value', + dataIndex: 'value' + } + ], + //auth中的header + authHeaderColumns:[ + { + title: 'key', + dataIndex: 'key', + customRender(text, row, index) { + return row.key + '(' + row.type + ')'; + } + }, + { + title: 'name', + className: 'column-money', + dataIndex: 'name' + }, + { + title: 'in', + dataIndex: 'in' + }, + { + title: 'value', + dataIndex: 'value', + scopedSlots: { + customRender: 'paramIpt' + } + } + ] + }, + //主页显示 + homePage: { + description: 'Description', + author: 'Author', + version: 'Version', + host: 'Host', + basePath: 'BasePath', + serviceUrl: 'Service Url', + groupName: 'Group Name', + groupUrl: 'Group Url', + groupLocation: 'Group Location', + apiCountNumber: 'Interface statistics' + }, + markdown: { + title: 'Other Document' + }, + message: { + success: 'Save successfully', + settingTip:'When personalization is enabled, close the interface tab or refresh the current pageAfter personalization is enabled, the interface tab tab needs to be closed and then reopened or the current page needs to be refreshed', + settingHost:'The host is enabled successfully. Please close the interface tab or refresh the current page to enable debuggingThe host is enabled successfully. Please close the interface tab or refresh the current page before debugging', + unsupportstore: 'Current browsers do not support localStorage objects and cannot use this feature', + copy: { + url:{ + success: 'Copy address successfully', + fail: 'Failed to copy the address, your current browser version is not compatible, please copy manually.' + }, + method:{ + success: 'Copy Url successfully', + fail: 'Failed to copy the url, your current browser version is not compatible, please copy manually.' + }, + document:{ + success: 'Copy document successful', + fail: 'Failed to copy the document, your current browser version is not compatible, please copy it manually.' + }, + raw:{ + success: 'Copy raw successfully', + fail: 'Failed to copy raw, your current browser version is not compatible, please copy manually.' + }, + curl:{ + success: 'Copy curl successfully', + fail: 'Copy curl failed, your current browser version is not compatible, please copy manually.' + }, + open:{ + success: 'Copy OpenAPI successfully', + fail: 'Copy OpenAPI failed, your current browser version is not compatible, please copy manually.' + } + }, + layer: { + title: 'message', + yes: 'Yes', + no: 'No' + }, + auth: { + invalid: 'Invalid value', + confirm: 'Are you sure you want to logout?', + success: 'Logout Success' + }, + global: { + iptname: 'Please enter the global parameter name', + iptvalue: 'Please enter the global parameter value', + deleteSuccess: 'Delete Success' + }, + settings: { + plusFail: 'Knife4j enhancements cannot be turned on. Make sure that the annotation @EnableKnife4j is enabled on the back end', + plusError: 'Unable to turn on Swagger BootstrapUi Enhancement, Error Cause:', + success: 'Save successfully, please refresh the document page' + }, + offline: { + imple:'This feature has not been implemented ...', + markdown:'Downloading Markdown file, please wait...', + html:'Downloading Html file, please wait...', + word:'Downloading Word file, please wait...', + copy: 'Copy', + toomany: 'The current number of interfaces exceeds the limit. Please use the third-party markdown conversion software for conversion to see the effect.', + note: 'swagger-bootstrap-ui provides markdwon-formatted offline documents that developers can copy and convert to HTML or PDF through other markdown conversion tools..' + }, + debug: { + urlNotEmpty: 'Request URL address cannot be empty', + fieldNotEmpty: 'cannot be empty', + networkErr: 'The server is restarting or hanging up:(~~~~', + contentToBig:'The amount of interface response data exceeds the limit and is not displayed in the response content. Please check it in raw', + contentToBigBlob:'The amount of interface response data exceeds the limit and is not displayed in the response content.' + }, + sys: { + loadErr: 'Make sure the swagger resource interface is correct.' + } + }, + home: { + des: 'Description', + author: 'Author', + version: 'Version', + serviceUrl: 'serviceUrl', + groupName: 'Group Name', + groupUrl: 'Group url', + groupLocation: 'Group Location', + apiCount: 'Api Counts', + searchText: 'Search...' + }, + swaggerModel: { + nodata: 'No Swagger Models', + tableHeader: { + name: 'name', + des: 'description', + type: 'type' + } + }, + global: { + tab: 'Global Parameter Settings', + add: 'Add', + model:'Add Parameter', + tableHeader: [{ + title: 'name', + dataIndex: 'name', + width: '15%', + scopedSlots: { + customRender: 'name' + } + }, + { + title: 'value', + className: 'column-money', + dataIndex: 'value', + width: '65%', + scopedSlots: { + customRender: 'paramContentLabel' + } + }, + { + title: 'type', + dataIndex: 'in', + width: '10%', + scopedSlots: { + customRender: 'paramTypeLable' + } + }, + { + title: 'operation', + dataIndex: 'operation', + scopedSlots: { + customRender: 'operation' + } + } + ], + form:{ + name:'name', + value:'value', + type:'type', + validate:{ + name:'Please enter the parameter name', + value:'Please enter the parameter value' + } + }, + ok:'ok', + cancel:'cancel', + save: 'Save', + delete: 'Delete', + note: 'Knife4j Provide global parameter Debug function, currently default to provide header (request header), query (form) two ways of entry.

After adding the global parameter here, the default Debug debug tab page will take this parameter.' + + }, + settings: { + title: 'Personalized Settings', + openCache: 'Enable request parameter cache', + dynamicParameter: 'Enable dynamic request parameters', + showApi: 'Enable Menu Api Address Display', + tagDes: 'Enable Grouping tag displays dsecription description properties', + apiFilter: 'Open RequestMapping Interface Filtering,Default', + openCacheApi: 'Enable Open cached open API documents', + plus: 'Enabling enhancements provided by Knife4j', + save: 'Save', + copy: 'copy', + fastTitle: '
Copy the following address through ctrl + c to open the browser' + }, + auth: { + cancel: 'Logout', + save: 'Save', + tableHeader: { + key: 'key', + name: 'name', + in: 'in', + value: 'value', + operator: 'operate' + }, + valueInvalid: 'Invalid Value' + }, + menu: { + home: 'Home', + manager: 'DocumentHelper', + globalsettings: 'GlobalParams', + officeline: 'OfflineDocument', + selfSettings: 'Settings', + genApi: 'Generate Api', + other:'Others', + menuItemList:[ + { key: '1', icon: 'caret-left', text: 'Close Left' }, + { key: '2', icon: 'caret-right', text: 'Close Right' }, + { key: '3', icon: 'close-circle', text: 'Close Other' } + ] + }, + doc: { + title: 'Doc', + note: 'Description', + copy: 'Copy', + copyHash: 'Copy Address', + copyMethod:'Copy Url', + produces: 'produces', + consumes: 'consumes', + author: 'Developer', + url: 'url', + method: 'method', + des: 'Note', + params: 'Params', + requestExample: 'Example', + paramsHeader: { + name: 'name', + des: 'description', + require: 'require', + type: 'data type', + requestType: 'request type' + + }, + responseHeaderParams: 'Response Header', + response: 'Status', + responseHeader: { + code: 'code', + des: 'description' + }, + responseParams: 'Response Params', + responseParamsHeader: { + name: 'name', + des: 'description', + type: 'type' + }, + responseExample: 'Response Example', + nodata: 'No data' + + }, + offline: { + des: 'Knife4j provides export of offline documents in 4 formats (Html/Markdown/Word/OpenAPI)', + download:{ + markdown:'Markdown', + html:'Html', + word:'Word', + pdf:'Pdf' + }, + contact: 'Contact', + url: 'api url', + note: 'Description', + schemaDes: 'schema Description' + }, + debug: { + title: 'Debug', + send: 'Send', + headers:'Headers', + params: 'Params', + form:{ + upload:'Upload', + itemText:'text', + itemFile:'file' + }, + tableHeader: { + holderName:'Name', + holderValue:'Value', + holderDel:'Delete', + selectAll: 'Select All', + type: 'type', + name: 'name', + value: 'value' + }, + response: { + content: 'Response', + showDes: 'Show Description', + code: 'code:', + cost: 'cost:', + size: 'size:', + header: 'Request Header', + download: 'Download File', + copy:'copy' + } + + }, + open:{ + copy:' Copy ', + download:' Download ' + }, + tab: { + closeCurrent: 'Close Current Tab', + closeOther: 'Close Other Tab', + closeAll: 'Close All Tab' + }, + validate:{ + header:'Request Header ', + notEmpty:' cannot be empty', + fileNotEmpty:' file cannot be empty' + } +}; + + +export default langOptions; diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/common/lang/zh.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/common/lang/zh.js new file mode 100644 index 0000000..9c63b5d --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/common/lang/zh.js @@ -0,0 +1,541 @@ +const langOptions = { + //界面显示 + lang:'zh', + title: '标题11111', + searchHolderText: '输入文档关键字搜索', + docLinkTip: '帮助文档', + langText: '中', + settingText: '个性化配置', + cacheText: '清除缓存', + //文档中各个表格的属性 + table:{ + //SwaggerModels + swaggerModelsColumns:[ + { + title: '名称', + dataIndex: 'name', + width: '30%' + }, + { + title: '类型', + dataIndex: 'type', + width: '15%' + }, + { + title: '说明', + width: '35%', + dataIndex: 'description', + scopedSlots: { customRender: 'descriptionValueTemplate' } + }, + { + title: 'schema', + dataIndex: 'schemaValue', + width: '15%' + } + ], + //文档说明-请求参数 + documentRequestColumns:[ + { + title: '参数名称', + dataIndex: 'name', + width: '30%' + }, + { + title: '参数说明', + dataIndex: 'description', + width: '25%', + scopedSlots: { customRender: 'descriptionValueTemplate' } + }, + { + title: '请求类型', + dataIndex: 'in', + scopedSlots: { customRender: 'typeTemplate' } + }, + { + title: '是否必须', + dataIndex: 'require', + scopedSlots: { customRender: 'requireTemplate' } + }, + { + title: '数据类型', + dataIndex: 'type', + scopedSlots: { customRender: 'datatypeTemplate' } + }, + { + title: 'schema', + dataIndex: 'schemaValue', + width: '15%' + } + ], + //文档说明-响应状态 + documentResponseStatusColumns:[ + { + title: '状态码', + dataIndex: 'code', + width: '20%' + }, + { + title: '说明', + dataIndex: 'description', + width: '55%', + scopedSlots: { customRender: 'descriptionTemplate' } + }, + { + title: 'schema', + dataIndex: 'schema', + scopedSlots: { customRender: 'schemaTemplate' } + } + ], + //文档说明-响应Header + documentResponseHeaderColumns:[ + { + title: '参数名称', + dataIndex: 'name', + width: '30%' + }, + { + title: '参数说明', + dataIndex: 'description', + width: '55%' + }, + { + title: '数据类型', + dataIndex: 'type' + } + ], + //文档说明-响应参数 + documentResponseColumns:[ + { + title: '参数名称', + dataIndex: 'name', + width: '35%' + }, + { + title: '参数说明', + dataIndex: 'description', + scopedSlots: { customRender: 'descriptionTemplate' }, + width: '40%' + }, + { + title: '类型', + dataIndex: 'type' + }, + { + title: 'schema', + dataIndex: 'schemaValue', + width: '15%' + } + ], + //调试-请求头参数 + debugRequestHeaderColumns:[ + { + title: '请求头', + dataIndex: 'name', + width: '20%', + scopedSlots: { + customRender: 'headerName' + } + }, + { + title: '内容', + dataIndex: 'content', + scopedSlots: { + customRender: 'headerValue' + } + }, + { + title: '操作', + dataIndex: 'operation', + width: '10%', + scopedSlots: { + customRender: 'operation' + } + } + ], + //调试-FormData类型请求头 + debugFormDataRequestColumns:[ + { + title: '参数名称', + dataIndex: 'name', + width: '20%', + scopedSlots: { + customRender: 'formName' + } + }, + { + title: '类型', + dataIndex: 'type', + width: '12%', + scopedSlots: { + customRender: 'formType' + } + }, + { + title: '参数值', + dataIndex: 'content', + scopedSlots: { + customRender: 'formValue' + } + }, + { + title: '操作', + dataIndex: 'operation', + width: '10%', + scopedSlots: { + customRender: 'operation' + } + } + ], + //调试-url-form类型请求参数头 + debugUrlFormRequestColumns:[ + { + title: '参数名称', + dataIndex: 'name', + width: '20%', + scopedSlots: { + customRender: 'urlFormName' + } + }, + { + title: '参数值', + dataIndex: 'content', + scopedSlots: { + customRender: 'urlFormValue' + } + }, + { + title: '操作', + dataIndex: 'operation', + width: '10%', + scopedSlots: { + customRender: 'operation' + } + } + ], + //调试-响应Header + debugResponseHeaderColumns:[ + { + title: '响应头', + dataIndex: 'name', + width: '20%' + }, + { + title: '值', + dataIndex: 'value' + } + ], + //auth中的header + authHeaderColumns:[ + { + title: '参数key', + dataIndex: 'key', + customRender(text, row, index) { + return row.key + '(' + row.type + ')'; + } + }, + { + title: '参数名称', + className: 'column-money', + dataIndex: 'name' + }, + { + title: 'in', + dataIndex: 'in' + }, + { + title: '参数值', + dataIndex: 'value', + scopedSlots: { + customRender: 'paramIpt' + } + } + ] + }, + //主页显示 + homePage: { + description: '简介', + author: '作者', + version: '版本', + host: 'host', + basePath: 'basePath', + serviceUrl: '服务Url', + groupName: '分组名称', + groupUrl: '分组Url', + groupLocation: '分组location', + apiCountNumber: '接口统计信息' + }, + markdown: { + title: '其他文档' + }, + message: { + success: '保存成功', + settingTip:'启用个性化配置后,接口Tab标签需关闭后重新打开或者刷新当前页面', + settingHost:'启用Host成功,请关闭接口Tab或者刷新当前页面再进行调试', + unsupportstore: '当前浏览器不支持localStorage对象,无法使用该功能', + copy: { + url:{ + success: '复制地址成功', + fail: '复制地址失败,您当前浏览器版本不兼容,请手动复制.' + }, + method:{ + success: '复制接口成功', + fail: '复制接口失败,您当前浏览器版本不兼容,请手动复制.' + }, + document:{ + success: '复制文档成功', + fail: '复制文档失败,您当前浏览器版本不兼容,请手动复制.' + }, + raw:{ + success: '复制raw成功', + fail: '复制raw失败,您当前浏览器版本不兼容,请手动复制.' + }, + curl:{ + success: '复制curl成功', + fail: '复制curl失败,您当前浏览器版本不兼容,请手动复制.' + }, + open:{ + success: '复制OpenAPI成功', + fail: '复制OpenAPI失败,您当前浏览器版本不兼容,请手动复制.' + } + }, + layer: { + title: '信息', + yes: '确定', + no: '取消' + }, + auth: { + invalid: '值无效', + confirm: '确定注销吗?', + success: '注销成功' + }, + global: { + iptname: '请输入全局参数名称', + iptvalue: '请输入全局参数值', + deleteSuccess: '删除成功' + }, + settings: { + plusFail: '无法开启Knife4j增强功能,请确保后端启用注解@EnableKnife4j', + plusError: '无法开启Knife4j增强功能,错误原因:', + success: '保存成功,请刷新该文档页' + }, + offline: { + imple:'该功能尚未实现...', + markdown:'正在下载Markdown文件中,请稍后...', + html:'正在下载Html中,请稍后...', + word:'正在下载Word中,请稍后...', + copy: '拷贝文档', + toomany: '当前接口数量超出限制,请使用第三方markdown转换软件进行转换以查看效果.', + note: 'swagger-bootstrap-ui 提供markdwon格式类型的离线文档,开发者可拷贝该内容通过其他markdown转换工具进行转换为html或pdf.' + }, + debug: { + urlNotEmpty: '请求url地址不能为空', + fieldNotEmpty: '不能为空', + networkErr: '服务器正在重启或者已经挂了:(~~~~', + contentToBig:'接口响应数据量超过限制,不在响应内容中显示,请在raw中进行查看', + contentToBigBlob:'接口响应数据量超过限制,不在响应内容中显示' + }, + sys: { + loadErr: '请确保swagger资源接口正确.' + } + }, + swaggerModel: { + nodata: '暂无Swagger Models', + tableHeader: { + name: '名称', + des: '说明', + type: '类型' + } + }, + global: { + tab: '全局参数设置', + add: '添加参数', + model:'新增参数', + tableHeader: [{ + title: '参数名称', + dataIndex: 'name', + width: '15%', + scopedSlots: { + customRender: 'name' + } + }, + { + title: '参数值', + className: 'column-money', + dataIndex: 'value', + width: '65%', + scopedSlots: { + customRender: 'paramContentLabel' + } + }, + { + title: '参数类型', + dataIndex: 'in', + width: '10%', + scopedSlots: { + customRender: 'paramTypeLable' + } + }, + { + title: '操作', + dataIndex: 'operation', + scopedSlots: { + customRender: 'operation' + } + } + ], + form:{ + name:'参数名称', + value:'参数值', + type:'参数类型', + validate:{ + name:'请输入参数名称', + value:'请输入参数值' + } + }, + ok:'确定', + cancel:'取消', + save: '保存', + delete: '删除', + note: 'Knife4j 提供全局参数Debug功能,目前默认提供header(请求头)、query(form)两种方式的入参.

在此添加全局参数后,默认Debug调试tab页会带上该参数' + + }, + settings: { + title: '个性化设置', + openCache: '开启请求参数缓存', + dynamicParameter: '开启动态请求参数', + showApi: '菜单Api地址显示', + tagDes: '分组tag显示dsecription说明属性', + apiFilter: '开启RequestMapping接口过滤,默认只显示', + openCacheApi: '开启缓存已打开的api文档', + plus: '启用Knife4j提供的增强功能', + save: '保存内容', + copy: '复制', + fastTitle: '
通过 ctrl + c 复制以下地址,打开浏览器快速个性化设置
' + }, + auth: { + cancel: '注销', + save: '保存', + tableHeader: { + key: '参数key', + name: '参数名称', + in: 'in', + value: '参数值', + operator: '操作' + }, + valueInvalid: '值无效' + }, + menu: { + home: '主页', + manager: '文档管理', + globalsettings: '全局参数设置', + officeline: '离线文档', + selfSettings: '个性化设置', + genApi: '前端Api生成', + other:'其他文档', + menuItemList:[ + { key: '1', icon: 'caret-left', text: '关闭左侧' }, + { key: '2', icon: 'caret-right', text: '关闭右侧' }, + { key: '3', icon: 'close-circle', text: '关闭其它' } + ] + }, + offline: { + des: 'Knife4j提供导出4种格式的离线文档(Html/Markdown/Word/OpenAPI)', + download:{ + markdown:'下载Markdown', + html:'下载Html', + word:'下载Word', + pdf:'下载Pdf' + }, + contact: '联系人', + url: '接口路径', + note: '简介', + schemaDes: 'schema属性说明' + }, + doc: { + title: '文档', + note: '接口说明', + copy: '复制文档', + copyHash: '复制地址', + copyMethod:'复制接口', + produces: '请求数据类型', + consumes: '响应数据类型', + author: '开发者', + url: '接口地址', + method: '请求方式', + des: '接口描述', + params: '请求参数', + requestExample: '请求示例', + paramsHeader: { + name: '参数名称', + des: '参数说明', + require: '是否必须', + type: '数据类型', + requestType: '请求类型' + + }, + responseHeaderParams: '响应Header', + response: '响应状态', + responseHeader: { + code: '状态码', + des: '说明' + + }, + responseParams: '响应参数', + responseParamsHeader: { + name: '参数名称', + des: '参数说明', + type: '类型' + }, + responseExample: '响应示例', + nodata: '暂无' + + }, + debug: { + title: '调试', + send: ' 发 送 ', + headers:'请求头部', + params: '请求参数', + form:{ + upload:'选择文件', + itemText:'文本', + itemFile:'文件' + }, + tableHeader: { + holderName:'请求头名称', + holderValue:'请求头内容', + holderDel:'删除', + selectAll: '全选', + type: '参数类型', + name: '参数名称', + value: '参数值' + }, + response: { + content: '响应内容', + showDes: '显示说明', + code: '响应码:', + cost: '耗时:', + size: '大小:', + header: '请求头', + download: '下载文件', + copy:'复制' + } + + }, + open:{ + copy:' 复 制 ', + download:' 下 载 ' + }, + tab: { + closeCurrent: '关闭当前标签页', + closeOther: '关闭其它标签页', + closeAll: '关闭全部标签页' + }, + validate:{ + header:'请求头 ', + notEmpty:' 不能为空', + fileNotEmpty:' 文件不能为空' + } + +} + +export default langOptions; diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/editormd.css b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/editormd.css new file mode 100644 index 0000000..6f5697e --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/editormd.css @@ -0,0 +1,4705 @@ +/* + * Editor.md + * + * @file editormd.css + * @version v1.5.0 + * @description Open source online markdown editor. + * @license MIT License + * @author Pandao + * {@link https://github.com/pandao/editor.md} + * @updateTime 2015-06-09 + */ + +@charset "UTF-8"; + +/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */ +.editormd { + width: 90%; + height: 640px; + margin: 0 auto; + text-align: left; + overflow: hidden; + position: relative; + margin-bottom: 15px; + border: 1px solid #ddd; + font-family: "Meiryo UI", "Microsoft YaHei", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, "Monaco", monospace, Tahoma, STXihei, "华文细黑", STHeiti, "Helvetica Neue", "Droid Sans", "wenquanyi micro hei", FreeSans, Arimo, Arial, SimSun, "宋体", Heiti, "黑体", sans-serif; +} + +.editormd *, +.editormd *:before, +.editormd *:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.editormd a { + text-decoration: none; +} + +.editormd img { + border: none; + vertical-align: middle; +} + +.editormd>textarea, +.editormd .editormd-html-textarea, +.editormd .editormd-markdown-textarea { + width: 0; + height: 0; + outline: 0; + resize: none; +} + +.editormd .editormd-html-textarea, +.editormd .editormd-markdown-textarea { + display: none; +} + +.editormd input[type="text"], +.editormd input[type="button"], +.editormd input[type="submit"], +.editormd select, +.editormd textarea, +.editormd button { + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + appearance: none; +} + +.editormd ::-webkit-scrollbar { + height: 10px; + width: 7px; + background: rgba(0, 0, 0, 0.1); +} + +.editormd ::-webkit-scrollbar:hover { + background: rgba(0, 0, 0, 0.2); +} + +.editormd ::-webkit-scrollbar-thumb { + background: rgba(0, 0, 0, 0.3); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + -ms-border-radius: 6px; + -o-border-radius: 6px; + border-radius: 6px; +} + +.editormd ::-webkit-scrollbar-thumb:hover { + -webkit-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25); + /* Webkit browsers */ + -moz-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25); + /* Firefox */ + -ms-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25); + /* IE9 */ + -o-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25); + /* Opera(Old) */ + box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25); + /* IE9+, News */ + background-color: rgba(0, 0, 0, 0.4); +} + +.editormd-user-unselect { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.editormd-toolbar { + width: 100%; + min-height: 37px; + background: #fff; + display: none; + position: absolute; + top: 0; + left: 0; + z-index: 10; + border-bottom: 1px solid #ddd; +} + +.editormd-toolbar-container { + padding: 0 8px; + min-height: 35px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.editormd-menu { + margin: 0; + padding: 0; + list-style: none; +} + +.editormd-menu>li { + margin: 0; + padding: 5px 1px; + display: inline-block; + position: relative; +} + +.editormd-menu>li.divider { + display: inline-block; + text-indent: -9999px; + margin: 0 5px; + height: 65%; + border-right: 1px solid #ddd; +} + +.editormd-menu>li>a { + outline: 0; + color: #666; + display: inline-block; + min-width: 24px; + font-size: 16px; + text-decoration: none; + text-align: center; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -ms-border-radius: 2px; + -o-border-radius: 2px; + border-radius: 2px; + border: 1px solid #fff; + -webkit-transition: all 300ms ease-out; + /* Safari, Chrome */ + -moz-transition: all 300ms ease-out; + /* Firefox 4.0~16.0 */ + transition: all 300ms ease-out; + /* IE >9, FF >15, Opera >12.0 */ +} + +.editormd-menu>li>a:hover, +.editormd-menu>li>a.active { + border: 1px solid #ddd; + background: #eee; +} + +.editormd-menu>li>a>.fa { + text-align: center; + display: block; + padding: 5px; +} + +.editormd-menu>li>a>.editormd-bold { + padding: 5px 2px; + display: inline-block; + font-weight: bold; +} + +.editormd-menu>li:hover .editormd-dropdown-menu { + display: block; +} + +.editormd-menu>li+li>a { + margin-left: 3px; +} + +.editormd-dropdown-menu { + display: none; + background: #fff; + border: 1px solid #ddd; + width: 148px; + list-style: none; + position: absolute; + top: 33px; + left: 0; + z-index: 100; + -webkit-box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.15); + /* Webkit browsers */ + -moz-box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.15); + /* Firefox */ + -ms-box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.15); + /* IE9 */ + -o-box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.15); + /* Opera(Old) */ + box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.15); + /* IE9+, News */ +} + +.editormd-dropdown-menu:before, +.editormd-dropdown-menu:after { + width: 0; + height: 0; + display: block; + content: ""; + position: absolute; + top: -11px; + left: 8px; + border: 5px solid transparent; +} + +.editormd-dropdown-menu:before { + border-bottom-color: #ccc; +} + +.editormd-dropdown-menu:after { + border-bottom-color: #ffffff; + top: -10px; +} + +.editormd-dropdown-menu>li>a { + color: #666; + display: block; + text-decoration: none; + padding: 8px 10px; +} + +.editormd-dropdown-menu>li>a:hover { + background: #f6f6f6; + -webkit-transition: all 300ms ease-out; + /* Safari, Chrome */ + -moz-transition: all 300ms ease-out; + /* Firefox 4.0~16.0 */ + transition: all 300ms ease-out; + /* IE >9, FF >15, Opera >12.0 */ +} + +.editormd-dropdown-menu>li+li { + border-top: 1px solid #ddd; +} + +.editormd-container { + margin: 0; + width: 100%; + height: 100%; + overflow: hidden; + padding: 35px 0 0; + position: relative; + background: #fff; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.editormd-dialog { + color: #666; + position: fixed; + z-index: 99999; + display: none; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + /* Webkit browsers */ + -moz-box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + /* Firefox */ + -ms-box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + /* IE9 */ + -o-box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + /* Opera(Old) */ + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + /* IE9+, News */ + background: #fff; + font-size: 14px; +} + +.editormd-dialog-container { + position: relative; + padding: 20px; + line-height: 1.4; +} + +.editormd-dialog-container h1 { + font-size: 24px; + margin-bottom: 10px; +} + +.editormd-dialog-container h1 .fa { + color: #2C7EEA; + padding-right: 5px; +} + +.editormd-dialog-container h1 small { + padding-left: 5px; + font-weight: normal; + font-size: 12px; + color: #999; +} + +.editormd-dialog-container select { + color: #999; + padding: 3px 8px; + border: 1px solid #ddd; +} + +.editormd-dialog-close { + position: absolute; + top: 12px; + right: 15px; + font-size: 18px; + color: #ccc; + -webkit-transition: color 300ms ease-out; + /* Safari, Chrome */ + -moz-transition: color 300ms ease-out; + /* Firefox 4.0~16.0 */ + transition: color 300ms ease-out; + /* IE >9, FF >15, Opera >12.0 */ +} + +.editormd-dialog-close:hover { + color: #999; +} + +.editormd-dialog-header { + padding: 11px 20px; + border-bottom: 1px solid #eee; + -webkit-transition: background 300ms ease-out; + /* Safari, Chrome */ + -moz-transition: background 300ms ease-out; + /* Firefox 4.0~16.0 */ + transition: background 300ms ease-out; + /* IE >9, FF >15, Opera >12.0 */ +} + +.editormd-dialog-header:hover { + background: #f6f6f6; +} + +.editormd-dialog-title { + font-size: 14px; +} + +.editormd-dialog-footer { + padding: 10px 0 0 0; + text-align: right; +} + +.editormd-dialog-info { + width: 420px; +} + +.editormd-dialog-info h1 { + font-weight: normal; +} + +.editormd-dialog-info .editormd-dialog-container { + padding: 20px 25px 25px; +} + +.editormd-dialog-info .editormd-dialog-close { + top: 10px; + right: 10px; +} + +.editormd-dialog-info p>a, +.editormd-dialog-info .hover-link:hover { + color: #2196F3; +} + +.editormd-dialog-info .hover-link { + color: #666; +} + +.editormd-dialog-info a .fa-external-link { + display: none; +} + +.editormd-dialog-info a:hover { + color: #2196F3; +} + +.editormd-dialog-info a:hover .fa-external-link { + display: inline-block; +} + +.editormd-mask, +.editormd-container-mask, +.editormd-dialog-mask { + display: none; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; +} + +.editormd-mask, +.editormd-dialog-mask-bg { + background: #fff; + opacity: 0.5; + filter: alpha(opacity=50); +} + +.editormd-mask { + position: fixed; + background: #000; + opacity: 0.2; + /* W3C */ + filter: alpha(opacity=20); + /* IE */ + z-index: 99998; +} + +.editormd-container-mask, +.editormd-dialog-mask-con { + background: url(./images/loading.gif) no-repeat center center; + -webkit-background-size: 32px 32px; + /* Chrome, iOS, Safari */ + -moz-background-size: 32px 32px; + /* Firefox 3.6~4.0 */ + -o-background-size: 32px 32px; + /* Opera 9.5 */ + background-size: 32px 32px; + /* IE9+, New */ +} + +.editormd-container-mask { + z-index: 20; + display: block; + background-color: #fff; +} + +@media only screen and (-webkit-min-device-pixel-ratio: 2), +only screen and (min-device-pixel-ratio: 2) { + + .editormd-container-mask, + .editormd-dialog-mask-con { + background-image: url(./images/loading@2x.gif); + } +} + +@media only screen and (-webkit-min-device-pixel-ratio: 3), +only screen and (min-device-pixel-ratio: 3) { + + .editormd-container-mask, + .editormd-dialog-mask-con { + background-image: url(./images/loading@3x.gif); + } +} + +.editormd-code-block-dialog textarea, +.editormd-preformatted-text-dialog textarea { + width: 100%; + height: 400px; + margin-bottom: 6px; + overflow: auto; + border: 1px solid #eee; + background: #fff; + padding: 15px; + resize: none; +} + +.editormd-code-toolbar { + color: #999; + font-size: 14px; + margin: -5px 0 10px; +} + +.editormd-grid-table { + width: 99%; + display: table; + border: 1px solid #ddd; + border-collapse: collapse; +} + +.editormd-grid-table-row { + width: 100%; + display: table-row; +} + +.editormd-grid-table-row a { + font-size: 1.4em; + width: 5%; + height: 36px; + color: #999; + text-align: center; + display: table-cell; + vertical-align: middle; + border: 1px solid #ddd; + text-decoration: none; + -webkit-transition: background-color 300ms ease-out, color 100ms ease-in; + /* Safari, Chrome */ + -moz-transition: background-color 300ms ease-out, color 100ms ease-in; + /* Firefox 4.0~16.0 */ + transition: background-color 300ms ease-out, color 100ms ease-in; + /* IE >9, FF >15, Opera >12.0 */ +} + +.editormd-grid-table-row a.selected { + color: #666; + background-color: #eee; +} + +.editormd-grid-table-row a:hover { + color: #777; + background-color: #f6f6f6; +} + +.editormd-tab-head { + list-style: none; + border-bottom: 1px solid #ddd; +} + +.editormd-tab-head li { + display: inline-block; +} + +.editormd-tab-head li a { + color: #999; + display: block; + padding: 6px 12px 5px; + text-align: center; + text-decoration: none; + margin-bottom: -1px; + border: 1px solid #ddd; + -webkit-border-top-left-radius: 3px; + -moz-border-top-left-radius: 3px; + -ms-border-top-left-radius: 3px; + -o-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -webkit-border-top-right-radius: 3px; + -moz-border-top-right-radius: 3px; + -ms-border-top-right-radius: 3px; + -o-border-top-right-radius: 3px; + border-top-right-radius: 3px; + background: #f6f6f6; + -webkit-transition: all 300ms ease-out; + /* Safari, Chrome */ + -moz-transition: all 300ms ease-out; + /* Firefox 4.0~16.0 */ + transition: all 300ms ease-out; + /* IE >9, FF >15, Opera >12.0 */ +} + +.editormd-tab-head li a:hover { + color: #666; + background: #eee; +} + +.editormd-tab-head li.active a { + color: #666; + background: #fff; + border-bottom-color: #fff; +} + +.editormd-tab-head li+li { + margin-left: 3px; +} + +.editormd-tab-box { + padding: 20px 0; +} + +.editormd-form { + color: #666; +} + +.editormd-form label { + float: left; + display: block; + width: 75px; + text-align: left; + padding: 7px 0 15px 5px; + margin: 0 0 2px; + font-weight: normal; +} + +.editormd-form br { + clear: both; +} + +.editormd-form iframe { + display: none; +} + +.editormd-form input:focus { + outline: 0; +} + +.editormd-form input[type="text"], +.editormd-form input[type="number"] { + color: #999; + padding: 8px; + border: 1px solid #ddd; +} + +.editormd-form input[type="number"] { + width: 40px; + display: inline-block; + padding: 6px 8px; +} + +.editormd-form input[type="text"] { + display: inline-block; + width: 264px; +} + +.editormd-form .fa-btns { + display: inline-block; +} + +.editormd-form .fa-btns a { + color: #999; + padding: 7px 10px 0 0; + display: inline-block; + text-decoration: none; + text-align: center; +} + +.editormd-form .fa-btns .fa { + font-size: 1.3em; +} + +.editormd-form .fa-btns label { + float: none; + display: inline-block; + width: auto; + text-align: left; + padding: 0 0 0 5px; + cursor: pointer; +} + +.editormd-form input[type="submit"], +.editormd-form .editormd-btn, +.editormd-form button, +.editormd-dialog-container input[type="submit"], +.editormd-dialog-container .editormd-btn, +.editormd-dialog-container button, +.editormd-dialog-footer input[type="submit"], +.editormd-dialog-footer .editormd-btn, +.editormd-dialog-footer button { + color: #666; + min-width: 75px; + cursor: pointer; + background: #fff; + padding: 7px 10px; + border: 1px solid #ddd; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + -webkit-transition: background 300ms ease-out; + /* Safari, Chrome */ + -moz-transition: background 300ms ease-out; + /* Firefox 4.0~16.0 */ + transition: background 300ms ease-out; + /* IE >9, FF >15, Opera >12.0 */ +} + +.editormd-form input[type="submit"]:hover, +.editormd-form .editormd-btn:hover, +.editormd-form button:hover, +.editormd-dialog-container input[type="submit"]:hover, +.editormd-dialog-container .editormd-btn:hover, +.editormd-dialog-container button:hover, +.editormd-dialog-footer input[type="submit"]:hover, +.editormd-dialog-footer .editormd-btn:hover, +.editormd-dialog-footer button:hover { + background: #eee; +} + +.editormd-form .editormd-btn, +.editormd-dialog-container .editormd-btn, +.editormd-dialog-footer .editormd-btn { + padding: 5px 8px 4px\0; +} + +.editormd-form .editormd-btn+.editormd-btn, +.editormd-dialog-container .editormd-btn+.editormd-btn, +.editormd-dialog-footer .editormd-btn+.editormd-btn { + margin-left: 8px; +} + +.editormd-file-input { + width: 75px; + height: 32px; + margin-left: 8px; + position: relative; + display: inline-block; +} + +.editormd-file-input input[type="file"] { + width: 75px; + height: 32px; + opacity: 0; + cursor: pointer; + background: #000; + display: inline-block; + position: absolute; + top: 0; + right: 0; +} + +.editormd-file-input input[type="file"]::-webkit-file-upload-button { + visibility: hidden; +} + +.editormd-file-input:hover input[type="submit"] { + background: #eee; +} + +.editormd .CodeMirror, +.editormd-preview { + display: inline-block; + width: 50%; + height: 100%; + vertical-align: top; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin: 0; +} + +.editormd-preview { + position: absolute; + top: 35px; + right: 0; + right: -1px\0; + overflow: auto; + line-height: 1.6; + display: none; + background: #fff; +} + +.editormd .CodeMirror { + z-index: 10; + float: left; + border-right: 1px solid #ddd; + font-size: 14px; + font-family: "YaHei Consolas Hybrid", Consolas, "微软雅黑", "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, "Monaco", courier, monospace; + line-height: 1.6; + margin-top: 35px; +} + +.editormd .CodeMirror pre { + font-size: 14px; + padding: 0 12px; +} + +.editormd .CodeMirror-linenumbers { + padding: 0 5px; +} + +.editormd .CodeMirror-selected { + background: #70B7FF; +} + +.editormd .CodeMirror-focused .CodeMirror-selected { + background: #70B7FF; +} + +.editormd .CodeMirror, +.editormd .CodeMirror-scroll, +.editormd .editormd-preview { + -webkit-overflow-scrolling: touch; +} + +.editormd .styled-background { + background-color: #ff7; +} + +.editormd .CodeMirror-focused .cm-matchhighlight { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAFklEQVQI12NgYGBgkKzc8x9CMDAwAAAmhwSbidEoSQAAAABJRU5ErkJggg==); + background-position: bottom; + background-repeat: repeat-x; +} + +.editormd .CodeMirror-empty.CodeMirror-focused { + outline: none; +} + +.editormd .CodeMirror pre.CodeMirror-placeholder { + color: #999; +} + +.editormd .cm-trailingspace { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAACCAYAAAB/qH1jAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QUXCToH00Y1UgAAACFJREFUCNdjPMDBUc/AwNDAAAFMTAwMDA0OP34wQgX/AQBYgwYEx4f9lQAAAABJRU5ErkJggg==); + background-position: bottom left; + background-repeat: repeat-x; +} + +.editormd .cm-tab { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=); + background-position: right; + background-repeat: no-repeat; +} + +/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */ +/*! + * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url("./fonts/fontawesome-webfont.eot?v=4.3.0"); + src: url("./fonts/fontawesome-webfont.eot?#iefix&v=4.3.0") format("embedded-opentype"), url("./fonts/fontawesome-webfont.woff2?v=4.3.0") format("woff2"), url("./fonts/fontawesome-webfont.woff?v=4.3.0") format("woff"), url("./fonts/fontawesome-webfont.ttf?v=4.3.0") format("truetype"), url("./fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular") format("svg"); + font-weight: normal; + font-style: normal; +} + +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + transform: translate(0, 0); +} + +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} + +.fa-2x { + font-size: 2em; +} + +.fa-3x { + font-size: 3em; +} + +.fa-4x { + font-size: 4em; +} + +.fa-5x { + font-size: 5em; +} + +.fa-fw { + width: 1.28571429em; + text-align: center; +} + +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} + +.fa-ul>li { + position: relative; +} + +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} + +.fa-li.fa-lg { + left: -1.85714286em; +} + +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.fa.pull-left { + margin-right: .3em; +} + +.fa.pull-right { + margin-left: .3em; +} + +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} + +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} + +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} + +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} + +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} + +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} + +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} + +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} + +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} + +.fa-stack-1x { + line-height: inherit; +} + +.fa-stack-2x { + font-size: 2em; +} + +.fa-inverse { + color: #ffffff; +} + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} + +.fa-music:before { + content: "\f001"; +} + +.fa-search:before { + content: "\f002"; +} + +.fa-envelope-o:before { + content: "\f003"; +} + +.fa-heart:before { + content: "\f004"; +} + +.fa-star:before { + content: "\f005"; +} + +.fa-star-o:before { + content: "\f006"; +} + +.fa-user:before { + content: "\f007"; +} + +.fa-film:before { + content: "\f008"; +} + +.fa-th-large:before { + content: "\f009"; +} + +.fa-th:before { + content: "\f00a"; +} + +.fa-th-list:before { + content: "\f00b"; +} + +.fa-check:before { + content: "\f00c"; +} + +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} + +.fa-search-plus:before { + content: "\f00e"; +} + +.fa-search-minus:before { + content: "\f010"; +} + +.fa-power-off:before { + content: "\f011"; +} + +.fa-signal:before { + content: "\f012"; +} + +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} + +.fa-trash-o:before { + content: "\f014"; +} + +.fa-home:before { + content: "\f015"; +} + +.fa-file-o:before { + content: "\f016"; +} + +.fa-clock-o:before { + content: "\f017"; +} + +.fa-road:before { + content: "\f018"; +} + +.fa-download:before { + content: "\f019"; +} + +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} + +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} + +.fa-inbox:before { + content: "\f01c"; +} + +.fa-play-circle-o:before { + content: "\f01d"; +} + +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} + +.fa-refresh:before { + content: "\f021"; +} + +.fa-list-alt:before { + content: "\f022"; +} + +.fa-lock:before { + content: "\f023"; +} + +.fa-flag:before { + content: "\f024"; +} + +.fa-headphones:before { + content: "\f025"; +} + +.fa-volume-off:before { + content: "\f026"; +} + +.fa-volume-down:before { + content: "\f027"; +} + +.fa-volume-up:before { + content: "\f028"; +} + +.fa-qrcode:before { + content: "\f029"; +} + +.fa-barcode:before { + content: "\f02a"; +} + +.fa-tag:before { + content: "\f02b"; +} + +.fa-tags:before { + content: "\f02c"; +} + +.fa-book:before { + content: "\f02d"; +} + +.fa-bookmark:before { + content: "\f02e"; +} + +.fa-print:before { + content: "\f02f"; +} + +.fa-camera:before { + content: "\f030"; +} + +.fa-font:before { + content: "\f031"; +} + +.fa-bold:before { + content: "\f032"; +} + +.fa-italic:before { + content: "\f033"; +} + +.fa-text-height:before { + content: "\f034"; +} + +.fa-text-width:before { + content: "\f035"; +} + +.fa-align-left:before { + content: "\f036"; +} + +.fa-align-center:before { + content: "\f037"; +} + +.fa-align-right:before { + content: "\f038"; +} + +.fa-align-justify:before { + content: "\f039"; +} + +.fa-list:before { + content: "\f03a"; +} + +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} + +.fa-indent:before { + content: "\f03c"; +} + +.fa-video-camera:before { + content: "\f03d"; +} + +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} + +.fa-pencil:before { + content: "\f040"; +} + +.fa-map-marker:before { + content: "\f041"; +} + +.fa-adjust:before { + content: "\f042"; +} + +.fa-tint:before { + content: "\f043"; +} + +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} + +.fa-share-square-o:before { + content: "\f045"; +} + +.fa-check-square-o:before { + content: "\f046"; +} + +.fa-arrows:before { + content: "\f047"; +} + +.fa-step-backward:before { + content: "\f048"; +} + +.fa-fast-backward:before { + content: "\f049"; +} + +.fa-backward:before { + content: "\f04a"; +} + +.fa-play:before { + content: "\f04b"; +} + +.fa-pause:before { + content: "\f04c"; +} + +.fa-stop:before { + content: "\f04d"; +} + +.fa-forward:before { + content: "\f04e"; +} + +.fa-fast-forward:before { + content: "\f050"; +} + +.fa-step-forward:before { + content: "\f051"; +} + +.fa-eject:before { + content: "\f052"; +} + +.fa-chevron-left:before { + content: "\f053"; +} + +.fa-chevron-right:before { + content: "\f054"; +} + +.fa-plus-circle:before { + content: "\f055"; +} + +.fa-minus-circle:before { + content: "\f056"; +} + +.fa-times-circle:before { + content: "\f057"; +} + +.fa-check-circle:before { + content: "\f058"; +} + +.fa-question-circle:before { + content: "\f059"; +} + +.fa-info-circle:before { + content: "\f05a"; +} + +.fa-crosshairs:before { + content: "\f05b"; +} + +.fa-times-circle-o:before { + content: "\f05c"; +} + +.fa-check-circle-o:before { + content: "\f05d"; +} + +.fa-ban:before { + content: "\f05e"; +} + +.fa-arrow-left:before { + content: "\f060"; +} + +.fa-arrow-right:before { + content: "\f061"; +} + +.fa-arrow-up:before { + content: "\f062"; +} + +.fa-arrow-down:before { + content: "\f063"; +} + +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} + +.fa-expand:before { + content: "\f065"; +} + +.fa-compress:before { + content: "\f066"; +} + +.fa-plus:before { + content: "\f067"; +} + +.fa-minus:before { + content: "\f068"; +} + +.fa-asterisk:before { + content: "\f069"; +} + +.fa-exclamation-circle:before { + content: "\f06a"; +} + +.fa-gift:before { + content: "\f06b"; +} + +.fa-leaf:before { + content: "\f06c"; +} + +.fa-fire:before { + content: "\f06d"; +} + +.fa-eye:before { + content: "\f06e"; +} + +.fa-eye-slash:before { + content: "\f070"; +} + +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} + +.fa-plane:before { + content: "\f072"; +} + +.fa-calendar:before { + content: "\f073"; +} + +.fa-random:before { + content: "\f074"; +} + +.fa-comment:before { + content: "\f075"; +} + +.fa-magnet:before { + content: "\f076"; +} + +.fa-chevron-up:before { + content: "\f077"; +} + +.fa-chevron-down:before { + content: "\f078"; +} + +.fa-retweet:before { + content: "\f079"; +} + +.fa-shopping-cart:before { + content: "\f07a"; +} + +.fa-folder:before { + content: "\f07b"; +} + +.fa-folder-open:before { + content: "\f07c"; +} + +.fa-arrows-v:before { + content: "\f07d"; +} + +.fa-arrows-h:before { + content: "\f07e"; +} + +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} + +.fa-twitter-square:before { + content: "\f081"; +} + +.fa-facebook-square:before { + content: "\f082"; +} + +.fa-camera-retro:before { + content: "\f083"; +} + +.fa-key:before { + content: "\f084"; +} + +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} + +.fa-comments:before { + content: "\f086"; +} + +.fa-thumbs-o-up:before { + content: "\f087"; +} + +.fa-thumbs-o-down:before { + content: "\f088"; +} + +.fa-star-half:before { + content: "\f089"; +} + +.fa-heart-o:before { + content: "\f08a"; +} + +.fa-sign-out:before { + content: "\f08b"; +} + +.fa-linkedin-square:before { + content: "\f08c"; +} + +.fa-thumb-tack:before { + content: "\f08d"; +} + +.fa-external-link:before { + content: "\f08e"; +} + +.fa-sign-in:before { + content: "\f090"; +} + +.fa-trophy:before { + content: "\f091"; +} + +.fa-github-square:before { + content: "\f092"; +} + +.fa-upload:before { + content: "\f093"; +} + +.fa-lemon-o:before { + content: "\f094"; +} + +.fa-phone:before { + content: "\f095"; +} + +.fa-square-o:before { + content: "\f096"; +} + +.fa-bookmark-o:before { + content: "\f097"; +} + +.fa-phone-square:before { + content: "\f098"; +} + +.fa-twitter:before { + content: "\f099"; +} + +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} + +.fa-github:before { + content: "\f09b"; +} + +.fa-unlock:before { + content: "\f09c"; +} + +.fa-credit-card:before { + content: "\f09d"; +} + +.fa-rss:before { + content: "\f09e"; +} + +.fa-hdd-o:before { + content: "\f0a0"; +} + +.fa-bullhorn:before { + content: "\f0a1"; +} + +.fa-bell:before { + content: "\f0f3"; +} + +.fa-certificate:before { + content: "\f0a3"; +} + +.fa-hand-o-right:before { + content: "\f0a4"; +} + +.fa-hand-o-left:before { + content: "\f0a5"; +} + +.fa-hand-o-up:before { + content: "\f0a6"; +} + +.fa-hand-o-down:before { + content: "\f0a7"; +} + +.fa-arrow-circle-left:before { + content: "\f0a8"; +} + +.fa-arrow-circle-right:before { + content: "\f0a9"; +} + +.fa-arrow-circle-up:before { + content: "\f0aa"; +} + +.fa-arrow-circle-down:before { + content: "\f0ab"; +} + +.fa-globe:before { + content: "\f0ac"; +} + +.fa-wrench:before { + content: "\f0ad"; +} + +.fa-tasks:before { + content: "\f0ae"; +} + +.fa-filter:before { + content: "\f0b0"; +} + +.fa-briefcase:before { + content: "\f0b1"; +} + +.fa-arrows-alt:before { + content: "\f0b2"; +} + +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} + +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} + +.fa-cloud:before { + content: "\f0c2"; +} + +.fa-flask:before { + content: "\f0c3"; +} + +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} + +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} + +.fa-paperclip:before { + content: "\f0c6"; +} + +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} + +.fa-square:before { + content: "\f0c8"; +} + +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} + +.fa-list-ul:before { + content: "\f0ca"; +} + +.fa-list-ol:before { + content: "\f0cb"; +} + +.fa-strikethrough:before { + content: "\f0cc"; +} + +.fa-underline:before { + content: "\f0cd"; +} + +.fa-table:before { + content: "\f0ce"; +} + +.fa-magic:before { + content: "\f0d0"; +} + +.fa-truck:before { + content: "\f0d1"; +} + +.fa-pinterest:before { + content: "\f0d2"; +} + +.fa-pinterest-square:before { + content: "\f0d3"; +} + +.fa-google-plus-square:before { + content: "\f0d4"; +} + +.fa-google-plus:before { + content: "\f0d5"; +} + +.fa-money:before { + content: "\f0d6"; +} + +.fa-caret-down:before { + content: "\f0d7"; +} + +.fa-caret-up:before { + content: "\f0d8"; +} + +.fa-caret-left:before { + content: "\f0d9"; +} + +.fa-caret-right:before { + content: "\f0da"; +} + +.fa-columns:before { + content: "\f0db"; +} + +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} + +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} + +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} + +.fa-envelope:before { + content: "\f0e0"; +} + +.fa-linkedin:before { + content: "\f0e1"; +} + +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} + +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} + +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} + +.fa-comment-o:before { + content: "\f0e5"; +} + +.fa-comments-o:before { + content: "\f0e6"; +} + +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} + +.fa-sitemap:before { + content: "\f0e8"; +} + +.fa-umbrella:before { + content: "\f0e9"; +} + +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} + +.fa-lightbulb-o:before { + content: "\f0eb"; +} + +.fa-exchange:before { + content: "\f0ec"; +} + +.fa-cloud-download:before { + content: "\f0ed"; +} + +.fa-cloud-upload:before { + content: "\f0ee"; +} + +.fa-user-md:before { + content: "\f0f0"; +} + +.fa-stethoscope:before { + content: "\f0f1"; +} + +.fa-suitcase:before { + content: "\f0f2"; +} + +.fa-bell-o:before { + content: "\f0a2"; +} + +.fa-coffee:before { + content: "\f0f4"; +} + +.fa-cutlery:before { + content: "\f0f5"; +} + +.fa-file-text-o:before { + content: "\f0f6"; +} + +.fa-building-o:before { + content: "\f0f7"; +} + +.fa-hospital-o:before { + content: "\f0f8"; +} + +.fa-ambulance:before { + content: "\f0f9"; +} + +.fa-medkit:before { + content: "\f0fa"; +} + +.fa-fighter-jet:before { + content: "\f0fb"; +} + +.fa-beer:before { + content: "\f0fc"; +} + +.fa-h-square:before { + content: "\f0fd"; +} + +.fa-plus-square:before { + content: "\f0fe"; +} + +.fa-angle-double-left:before { + content: "\f100"; +} + +.fa-angle-double-right:before { + content: "\f101"; +} + +.fa-angle-double-up:before { + content: "\f102"; +} + +.fa-angle-double-down:before { + content: "\f103"; +} + +.fa-angle-left:before { + content: "\f104"; +} + +.fa-angle-right:before { + content: "\f105"; +} + +.fa-angle-up:before { + content: "\f106"; +} + +.fa-angle-down:before { + content: "\f107"; +} + +.fa-desktop:before { + content: "\f108"; +} + +.fa-laptop:before { + content: "\f109"; +} + +.fa-tablet:before { + content: "\f10a"; +} + +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} + +.fa-circle-o:before { + content: "\f10c"; +} + +.fa-quote-left:before { + content: "\f10d"; +} + +.fa-quote-right:before { + content: "\f10e"; +} + +.fa-spinner:before { + content: "\f110"; +} + +.fa-circle:before { + content: "\f111"; +} + +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} + +.fa-github-alt:before { + content: "\f113"; +} + +.fa-folder-o:before { + content: "\f114"; +} + +.fa-folder-open-o:before { + content: "\f115"; +} + +.fa-smile-o:before { + content: "\f118"; +} + +.fa-frown-o:before { + content: "\f119"; +} + +.fa-meh-o:before { + content: "\f11a"; +} + +.fa-gamepad:before { + content: "\f11b"; +} + +.fa-keyboard-o:before { + content: "\f11c"; +} + +.fa-flag-o:before { + content: "\f11d"; +} + +.fa-flag-checkered:before { + content: "\f11e"; +} + +.fa-terminal:before { + content: "\f120"; +} + +.fa-code:before { + content: "\f121"; +} + +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} + +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} + +.fa-location-arrow:before { + content: "\f124"; +} + +.fa-crop:before { + content: "\f125"; +} + +.fa-code-fork:before { + content: "\f126"; +} + +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} + +.fa-question:before { + content: "\f128"; +} + +.fa-info:before { + content: "\f129"; +} + +.fa-exclamation:before { + content: "\f12a"; +} + +.fa-superscript:before { + content: "\f12b"; +} + +.fa-subscript:before { + content: "\f12c"; +} + +.fa-eraser:before { + content: "\f12d"; +} + +.fa-puzzle-piece:before { + content: "\f12e"; +} + +.fa-microphone:before { + content: "\f130"; +} + +.fa-microphone-slash:before { + content: "\f131"; +} + +.fa-shield:before { + content: "\f132"; +} + +.fa-calendar-o:before { + content: "\f133"; +} + +.fa-fire-extinguisher:before { + content: "\f134"; +} + +.fa-rocket:before { + content: "\f135"; +} + +.fa-maxcdn:before { + content: "\f136"; +} + +.fa-chevron-circle-left:before { + content: "\f137"; +} + +.fa-chevron-circle-right:before { + content: "\f138"; +} + +.fa-chevron-circle-up:before { + content: "\f139"; +} + +.fa-chevron-circle-down:before { + content: "\f13a"; +} + +.fa-html5:before { + content: "\f13b"; +} + +.fa-css3:before { + content: "\f13c"; +} + +.fa-anchor:before { + content: "\f13d"; +} + +.fa-unlock-alt:before { + content: "\f13e"; +} + +.fa-bullseye:before { + content: "\f140"; +} + +.fa-ellipsis-h:before { + content: "\f141"; +} + +.fa-ellipsis-v:before { + content: "\f142"; +} + +.fa-rss-square:before { + content: "\f143"; +} + +.fa-play-circle:before { + content: "\f144"; +} + +.fa-ticket:before { + content: "\f145"; +} + +.fa-minus-square:before { + content: "\f146"; +} + +.fa-minus-square-o:before { + content: "\f147"; +} + +.fa-level-up:before { + content: "\f148"; +} + +.fa-level-down:before { + content: "\f149"; +} + +.fa-check-square:before { + content: "\f14a"; +} + +.fa-pencil-square:before { + content: "\f14b"; +} + +.fa-external-link-square:before { + content: "\f14c"; +} + +.fa-share-square:before { + content: "\f14d"; +} + +.fa-compass:before { + content: "\f14e"; +} + +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} + +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} + +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} + +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} + +.fa-gbp:before { + content: "\f154"; +} + +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} + +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} + +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} + +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} + +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} + +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} + +.fa-file:before { + content: "\f15b"; +} + +.fa-file-text:before { + content: "\f15c"; +} + +.fa-sort-alpha-asc:before { + content: "\f15d"; +} + +.fa-sort-alpha-desc:before { + content: "\f15e"; +} + +.fa-sort-amount-asc:before { + content: "\f160"; +} + +.fa-sort-amount-desc:before { + content: "\f161"; +} + +.fa-sort-numeric-asc:before { + content: "\f162"; +} + +.fa-sort-numeric-desc:before { + content: "\f163"; +} + +.fa-thumbs-up:before { + content: "\f164"; +} + +.fa-thumbs-down:before { + content: "\f165"; +} + +.fa-youtube-square:before { + content: "\f166"; +} + +.fa-youtube:before { + content: "\f167"; +} + +.fa-xing:before { + content: "\f168"; +} + +.fa-xing-square:before { + content: "\f169"; +} + +.fa-youtube-play:before { + content: "\f16a"; +} + +.fa-dropbox:before { + content: "\f16b"; +} + +.fa-stack-overflow:before { + content: "\f16c"; +} + +.fa-instagram:before { + content: "\f16d"; +} + +.fa-flickr:before { + content: "\f16e"; +} + +.fa-adn:before { + content: "\f170"; +} + +.fa-bitbucket:before { + content: "\f171"; +} + +.fa-bitbucket-square:before { + content: "\f172"; +} + +.fa-tumblr:before { + content: "\f173"; +} + +.fa-tumblr-square:before { + content: "\f174"; +} + +.fa-long-arrow-down:before { + content: "\f175"; +} + +.fa-long-arrow-up:before { + content: "\f176"; +} + +.fa-long-arrow-left:before { + content: "\f177"; +} + +.fa-long-arrow-right:before { + content: "\f178"; +} + +.fa-apple:before { + content: "\f179"; +} + +.fa-windows:before { + content: "\f17a"; +} + +.fa-android:before { + content: "\f17b"; +} + +.fa-linux:before { + content: "\f17c"; +} + +.fa-dribbble:before { + content: "\f17d"; +} + +.fa-skype:before { + content: "\f17e"; +} + +.fa-foursquare:before { + content: "\f180"; +} + +.fa-trello:before { + content: "\f181"; +} + +.fa-female:before { + content: "\f182"; +} + +.fa-male:before { + content: "\f183"; +} + +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} + +.fa-sun-o:before { + content: "\f185"; +} + +.fa-moon-o:before { + content: "\f186"; +} + +.fa-archive:before { + content: "\f187"; +} + +.fa-bug:before { + content: "\f188"; +} + +.fa-vk:before { + content: "\f189"; +} + +.fa-weibo:before { + content: "\f18a"; +} + +.fa-renren:before { + content: "\f18b"; +} + +.fa-pagelines:before { + content: "\f18c"; +} + +.fa-stack-exchange:before { + content: "\f18d"; +} + +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} + +.fa-arrow-circle-o-left:before { + content: "\f190"; +} + +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} + +.fa-dot-circle-o:before { + content: "\f192"; +} + +.fa-wheelchair:before { + content: "\f193"; +} + +.fa-vimeo-square:before { + content: "\f194"; +} + +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} + +.fa-plus-square-o:before { + content: "\f196"; +} + +.fa-space-shuttle:before { + content: "\f197"; +} + +.fa-slack:before { + content: "\f198"; +} + +.fa-envelope-square:before { + content: "\f199"; +} + +.fa-wordpress:before { + content: "\f19a"; +} + +.fa-openid:before { + content: "\f19b"; +} + +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} + +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} + +.fa-yahoo:before { + content: "\f19e"; +} + +.fa-google:before { + content: "\f1a0"; +} + +.fa-reddit:before { + content: "\f1a1"; +} + +.fa-reddit-square:before { + content: "\f1a2"; +} + +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} + +.fa-stumbleupon:before { + content: "\f1a4"; +} + +.fa-delicious:before { + content: "\f1a5"; +} + +.fa-digg:before { + content: "\f1a6"; +} + +.fa-pied-piper:before { + content: "\f1a7"; +} + +.fa-pied-piper-alt:before { + content: "\f1a8"; +} + +.fa-drupal:before { + content: "\f1a9"; +} + +.fa-joomla:before { + content: "\f1aa"; +} + +.fa-language:before { + content: "\f1ab"; +} + +.fa-fax:before { + content: "\f1ac"; +} + +.fa-building:before { + content: "\f1ad"; +} + +.fa-child:before { + content: "\f1ae"; +} + +.fa-paw:before { + content: "\f1b0"; +} + +.fa-spoon:before { + content: "\f1b1"; +} + +.fa-cube:before { + content: "\f1b2"; +} + +.fa-cubes:before { + content: "\f1b3"; +} + +.fa-behance:before { + content: "\f1b4"; +} + +.fa-behance-square:before { + content: "\f1b5"; +} + +.fa-steam:before { + content: "\f1b6"; +} + +.fa-steam-square:before { + content: "\f1b7"; +} + +.fa-recycle:before { + content: "\f1b8"; +} + +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} + +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} + +.fa-tree:before { + content: "\f1bb"; +} + +.fa-spotify:before { + content: "\f1bc"; +} + +.fa-deviantart:before { + content: "\f1bd"; +} + +.fa-soundcloud:before { + content: "\f1be"; +} + +.fa-database:before { + content: "\f1c0"; +} + +.fa-file-pdf-o:before { + content: "\f1c1"; +} + +.fa-file-word-o:before { + content: "\f1c2"; +} + +.fa-file-excel-o:before { + content: "\f1c3"; +} + +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} + +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} + +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} + +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} + +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} + +.fa-file-code-o:before { + content: "\f1c9"; +} + +.fa-vine:before { + content: "\f1ca"; +} + +.fa-codepen:before { + content: "\f1cb"; +} + +.fa-jsfiddle:before { + content: "\f1cc"; +} + +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} + +.fa-circle-o-notch:before { + content: "\f1ce"; +} + +.fa-ra:before, +.fa-rebel:before { + content: "\f1d0"; +} + +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} + +.fa-git-square:before { + content: "\f1d2"; +} + +.fa-git:before { + content: "\f1d3"; +} + +.fa-hacker-news:before { + content: "\f1d4"; +} + +.fa-tencent-weibo:before { + content: "\f1d5"; +} + +.fa-qq:before { + content: "\f1d6"; +} + +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} + +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} + +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} + +.fa-history:before { + content: "\f1da"; +} + +.fa-genderless:before, +.fa-circle-thin:before { + content: "\f1db"; +} + +.fa-header:before { + content: "\f1dc"; +} + +.fa-paragraph:before { + content: "\f1dd"; +} + +.fa-sliders:before { + content: "\f1de"; +} + +.fa-share-alt:before { + content: "\f1e0"; +} + +.fa-share-alt-square:before { + content: "\f1e1"; +} + +.fa-bomb:before { + content: "\f1e2"; +} + +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} + +.fa-tty:before { + content: "\f1e4"; +} + +.fa-binoculars:before { + content: "\f1e5"; +} + +.fa-plug:before { + content: "\f1e6"; +} + +.fa-slideshare:before { + content: "\f1e7"; +} + +.fa-twitch:before { + content: "\f1e8"; +} + +.fa-yelp:before { + content: "\f1e9"; +} + +.fa-newspaper-o:before { + content: "\f1ea"; +} + +.fa-wifi:before { + content: "\f1eb"; +} + +.fa-calculator:before { + content: "\f1ec"; +} + +.fa-paypal:before { + content: "\f1ed"; +} + +.fa-google-wallet:before { + content: "\f1ee"; +} + +.fa-cc-visa:before { + content: "\f1f0"; +} + +.fa-cc-mastercard:before { + content: "\f1f1"; +} + +.fa-cc-discover:before { + content: "\f1f2"; +} + +.fa-cc-amex:before { + content: "\f1f3"; +} + +.fa-cc-paypal:before { + content: "\f1f4"; +} + +.fa-cc-stripe:before { + content: "\f1f5"; +} + +.fa-bell-slash:before { + content: "\f1f6"; +} + +.fa-bell-slash-o:before { + content: "\f1f7"; +} + +.fa-trash:before { + content: "\f1f8"; +} + +.fa-copyright:before { + content: "\f1f9"; +} + +.fa-at:before { + content: "\f1fa"; +} + +.fa-eyedropper:before { + content: "\f1fb"; +} + +.fa-paint-brush:before { + content: "\f1fc"; +} + +.fa-birthday-cake:before { + content: "\f1fd"; +} + +.fa-area-chart:before { + content: "\f1fe"; +} + +.fa-pie-chart:before { + content: "\f200"; +} + +.fa-line-chart:before { + content: "\f201"; +} + +.fa-lastfm:before { + content: "\f202"; +} + +.fa-lastfm-square:before { + content: "\f203"; +} + +.fa-toggle-off:before { + content: "\f204"; +} + +.fa-toggle-on:before { + content: "\f205"; +} + +.fa-bicycle:before { + content: "\f206"; +} + +.fa-bus:before { + content: "\f207"; +} + +.fa-ioxhost:before { + content: "\f208"; +} + +.fa-angellist:before { + content: "\f209"; +} + +.fa-cc:before { + content: "\f20a"; +} + +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} + +.fa-meanpath:before { + content: "\f20c"; +} + +.fa-buysellads:before { + content: "\f20d"; +} + +.fa-connectdevelop:before { + content: "\f20e"; +} + +.fa-dashcube:before { + content: "\f210"; +} + +.fa-forumbee:before { + content: "\f211"; +} + +.fa-leanpub:before { + content: "\f212"; +} + +.fa-sellsy:before { + content: "\f213"; +} + +.fa-shirtsinbulk:before { + content: "\f214"; +} + +.fa-simplybuilt:before { + content: "\f215"; +} + +.fa-skyatlas:before { + content: "\f216"; +} + +.fa-cart-plus:before { + content: "\f217"; +} + +.fa-cart-arrow-down:before { + content: "\f218"; +} + +.fa-diamond:before { + content: "\f219"; +} + +.fa-ship:before { + content: "\f21a"; +} + +.fa-user-secret:before { + content: "\f21b"; +} + +.fa-motorcycle:before { + content: "\f21c"; +} + +.fa-street-view:before { + content: "\f21d"; +} + +.fa-heartbeat:before { + content: "\f21e"; +} + +.fa-venus:before { + content: "\f221"; +} + +.fa-mars:before { + content: "\f222"; +} + +.fa-mercury:before { + content: "\f223"; +} + +.fa-transgender:before { + content: "\f224"; +} + +.fa-transgender-alt:before { + content: "\f225"; +} + +.fa-venus-double:before { + content: "\f226"; +} + +.fa-mars-double:before { + content: "\f227"; +} + +.fa-venus-mars:before { + content: "\f228"; +} + +.fa-mars-stroke:before { + content: "\f229"; +} + +.fa-mars-stroke-v:before { + content: "\f22a"; +} + +.fa-mars-stroke-h:before { + content: "\f22b"; +} + +.fa-neuter:before { + content: "\f22c"; +} + +.fa-facebook-official:before { + content: "\f230"; +} + +.fa-pinterest-p:before { + content: "\f231"; +} + +.fa-whatsapp:before { + content: "\f232"; +} + +.fa-server:before { + content: "\f233"; +} + +.fa-user-plus:before { + content: "\f234"; +} + +.fa-user-times:before { + content: "\f235"; +} + +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} + +.fa-viacoin:before { + content: "\f237"; +} + +.fa-train:before { + content: "\f238"; +} + +.fa-subway:before { + content: "\f239"; +} + +.fa-medium:before { + content: "\f23a"; +} + +/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */ +@font-face { + font-family: 'editormd-logo'; + src: url("./fonts/editormd-logo.eot?-5y8q6h"); + src: url("./fonts/editormd-logo.eot?#iefix-5y8q6h") format("embedded-opentype"), url("./fonts/editormd-logo.woff?-5y8q6h") format("woff"), url("./fonts/editormd-logo.ttf?-5y8q6h") format("truetype"), url("./fonts/editormd-logo.svg?-5y8q6h#icomoon") format("svg"); + font-weight: normal; + font-style: normal; +} + +.editormd-logo, +.editormd-logo-1x, +.editormd-logo-2x, +.editormd-logo-3x, +.editormd-logo-4x, +.editormd-logo-5x, +.editormd-logo-6x, +.editormd-logo-7x, +.editormd-logo-8x { + font-family: 'editormd-logo'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + font-size: inherit; + line-height: 1; + display: inline-block; + text-rendering: auto; + vertical-align: inherit; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.editormd-logo:before, +.editormd-logo-1x:before, +.editormd-logo-2x:before, +.editormd-logo-3x:before, +.editormd-logo-4x:before, +.editormd-logo-5x:before, +.editormd-logo-6x:before, +.editormd-logo-7x:before, +.editormd-logo-8x:before { + content: "\e1987"; + /* + HTML Entity 󡦇 + example: + */ +} + +.editormd-logo-1x { + font-size: 1em; +} + +.editormd-logo-lg { + font-size: 1.2em; +} + +.editormd-logo-2x { + font-size: 2em; +} + +.editormd-logo-3x { + font-size: 3em; +} + +.editormd-logo-4x { + font-size: 4em; +} + +.editormd-logo-5x { + font-size: 5em; +} + +.editormd-logo-6x { + font-size: 6em; +} + +.editormd-logo-7x { + font-size: 7em; +} + +.editormd-logo-8x { + font-size: 8em; +} + +.editormd-logo-color { + color: #2196F3; +} + +/*! github-markdown-css | The MIT License (MIT) | Copyright (c) Sindre Sorhus (sindresorhus.com) | https://github.com/sindresorhus/github-markdown-css */ +@font-face { + font-family: octicons-anchor; + src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAYcAA0AAAAACjQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABwAAAAca8vGTk9TLzIAAAFMAAAARAAAAFZG1VHVY21hcAAAAZAAAAA+AAABQgAP9AdjdnQgAAAB0AAAAAQAAAAEACICiGdhc3AAAAHUAAAACAAAAAj//wADZ2x5ZgAAAdwAAADRAAABEKyikaNoZWFkAAACsAAAAC0AAAA2AtXoA2hoZWEAAALgAAAAHAAAACQHngNFaG10eAAAAvwAAAAQAAAAEAwAACJsb2NhAAADDAAAAAoAAAAKALIAVG1heHAAAAMYAAAAHwAAACABEAB2bmFtZQAAAzgAAALBAAAFu3I9x/Nwb3N0AAAF/AAAAB0AAAAvaoFvbwAAAAEAAAAAzBdyYwAAAADP2IQvAAAAAM/bz7t4nGNgZGFgnMDAysDB1Ml0hoGBoR9CM75mMGLkYGBgYmBlZsAKAtJcUxgcPsR8iGF2+O/AEMPsznAYKMwIkgMA5REMOXicY2BgYGaAYBkGRgYQsAHyGMF8FgYFIM0ChED+h5j//yEk/3KoSgZGNgYYk4GRCUgwMaACRoZhDwCs7QgGAAAAIgKIAAAAAf//AAJ4nHWMMQrCQBBF/0zWrCCIKUQsTDCL2EXMohYGSSmorScInsRGL2DOYJe0Ntp7BK+gJ1BxF1stZvjz/v8DRghQzEc4kIgKwiAppcA9LtzKLSkdNhKFY3HF4lK69ExKslx7Xa+vPRVS43G98vG1DnkDMIBUgFN0MDXflU8tbaZOUkXUH0+U27RoRpOIyCKjbMCVejwypzJJG4jIwb43rfl6wbwanocrJm9XFYfskuVC5K/TPyczNU7b84CXcbxks1Un6H6tLH9vf2LRnn8Ax7A5WQAAAHicY2BkYGAA4teL1+yI57f5ysDNwgAC529f0kOmWRiYVgEpDgYmEA8AUzEKsQAAAHicY2BkYGB2+O/AEMPCAAJAkpEBFbAAADgKAe0EAAAiAAAAAAQAAAAEAAAAAAAAKgAqACoAiAAAeJxjYGRgYGBhsGFgYgABEMkFhAwM/xn0QAIAD6YBhwB4nI1Ty07cMBS9QwKlQapQW3VXySvEqDCZGbGaHULiIQ1FKgjWMxknMfLEke2A+IJu+wntrt/QbVf9gG75jK577Lg8K1qQPCfnnnt8fX1NRC/pmjrk/zprC+8D7tBy9DHgBXoWfQ44Av8t4Bj4Z8CLtBL9CniJluPXASf0Lm4CXqFX8Q84dOLnMB17N4c7tBo1AS/Qi+hTwBH4rwHHwN8DXqQ30XXAS7QaLwSc0Gn8NuAVWou/gFmnjLrEaEh9GmDdDGgL3B4JsrRPDU2hTOiMSuJUIdKQQayiAth69r6akSSFqIJuA19TrzCIaY8sIoxyrNIrL//pw7A2iMygkX5vDj+G+kuoLdX4GlGK/8Lnlz6/h9MpmoO9rafrz7ILXEHHaAx95s9lsI7AHNMBWEZHULnfAXwG9/ZqdzLI08iuwRloXE8kfhXYAvE23+23DU3t626rbs8/8adv+9DWknsHp3E17oCf+Z48rvEQNZ78paYM38qfk3v/u3l3u3GXN2Dmvmvpf1Srwk3pB/VSsp512bA/GG5i2WJ7wu430yQ5K3nFGiOqgtmSB5pJVSizwaacmUZzZhXLlZTq8qGGFY2YcSkqbth6aW1tRmlaCFs2016m5qn36SbJrqosG4uMV4aP2PHBmB3tjtmgN2izkGQyLWprekbIntJFing32a5rKWCN/SdSoga45EJykyQ7asZvHQ8PTm6cslIpwyeyjbVltNikc2HTR7YKh9LBl9DADC0U/jLcBZDKrMhUBfQBvXRzLtFtjU9eNHKin0x5InTqb8lNpfKv1s1xHzTXRqgKzek/mb7nB8RZTCDhGEX3kK/8Q75AmUM/eLkfA+0Hi908Kx4eNsMgudg5GLdRD7a84npi+YxNr5i5KIbW5izXas7cHXIMAau1OueZhfj+cOcP3P8MNIWLyYOBuxL6DRylJ4cAAAB4nGNgYoAALjDJyIAOWMCiTIxMLDmZedkABtIBygAAAA==) format("woff"); +} + +.markdown-body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + color: #333; + overflow: hidden; + font-family: "Microsoft YaHei", Helvetica, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", "Monaco", monospace, Tahoma, STXihei, "华文细黑", STHeiti, "Helvetica Neue", "Droid Sans", "wenquanyi micro hei", FreeSans, Arimo, Arial, SimSun, "宋体", Heiti, "黑体", sans-serif; + font-size: 16px; + line-height: 1.6; + word-wrap: break-word; +} + +.markdown-body a { + background: transparent; +} + +.markdown-body a:active, +.markdown-body a:hover { + outline: 0; +} + +.markdown-body strong { + font-weight: bold; +} + +.markdown-body h1 { + font-size: 2em; + margin: 0.67em 0; +} + +.markdown-body img { + border: 0; +} + +.markdown-body hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +.markdown-body pre { + overflow: auto; +} + +.markdown-body code, +.markdown-body kbd, +.markdown-body pre { + font-family: "Meiryo UI", "YaHei Consolas Hybrid", Consolas, "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; + font-size: 1em; +} + +.markdown-body input { + color: inherit; + font: inherit; + margin: 0; +} + +.markdown-body html input[disabled] { + cursor: default; +} + +.markdown-body input { + line-height: normal; +} + +.markdown-body input[type="checkbox"] { + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} + +.markdown-body table { + border-collapse: collapse; + border-spacing: 0; +} + +.markdown-body td, +.markdown-body th { + padding: 0; +} + +.markdown-body * { + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.markdown-body input { + font: 13px/1.4 Helvetica, arial, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; +} + +.markdown-body a { + color: #4183c4; + text-decoration: none; +} + +.markdown-body a:hover, +.markdown-body a:active { + text-decoration: underline; +} + +.markdown-body hr { + height: 0; + margin: 15px 0; + overflow: hidden; + background: transparent; + border: 0; + border-bottom: 1px solid #ddd; +} + +.markdown-body hr:before { + display: table; + content: ""; +} + +.markdown-body hr:after { + display: table; + clear: both; + content: ""; +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin-top: 15px; + margin-bottom: 15px; + line-height: 1.1; +} + +.markdown-body h1 { + font-size: 30px; +} + +.markdown-body h2 { + font-size: 21px; +} + +.markdown-body h3 { + font-size: 16px; +} + +.markdown-body h4 { + font-size: 14px; +} + +.markdown-body h5 { + font-size: 12px; +} + +.markdown-body h6 { + font-size: 11px; +} + +.markdown-body blockquote { + margin: 0; +} + +.markdown-body ul, +.markdown-body ol { + padding: 0; + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body ol ol, +.markdown-body ul ol { + list-style-type: lower-roman; +} + +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { + list-style-type: lower-alpha; +} + +.markdown-body dd { + margin-left: 0; +} + +.markdown-body code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 12px; +} + +.markdown-body pre { + margin-top: 0; + margin-bottom: 0; + font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; +} + +.markdown-body .octicon { + font: normal normal 16px octicons-anchor; + line-height: 1; + display: inline-block; + text-decoration: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.markdown-body .octicon-link:before { + content: '\f05c'; +} + +.markdown-body>*:first-child { + margin-top: 0 !important; +} + +.markdown-body>*:last-child { + margin-bottom: 0 !important; +} + +.markdown-body .anchor { + position: absolute; + top: 0; + left: 0; + display: block; + padding-right: 6px; + padding-left: 30px; + margin-left: -30px; +} + +.markdown-body .anchor:focus { + outline: none; +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + position: relative; + margin-top: 1em; + margin-bottom: 16px; + font-weight: bold; + line-height: 1.4; +} + +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { + display: none; + color: #000; + vertical-align: middle; +} + +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { + padding-left: 8px; + margin-left: -30px; + text-decoration: none; +} + +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { + display: inline-block; +} + +.markdown-body h1 { + padding-bottom: 0.3em; + font-size: 2.25em; + line-height: 1.2; + border-bottom: 1px solid #eee; +} + +.markdown-body h1 .anchor { + line-height: 1; +} + +.markdown-body h2 { + padding-bottom: 0.3em; + font-size: 1.75em; + line-height: 1.225; + border-bottom: 1px solid #eee; +} + +.markdown-body h2 .anchor { + line-height: 1; +} + +.markdown-body h3 { + font-size: 1.5em; + line-height: 1.43; +} + +.markdown-body h3 .anchor { + line-height: 1.2; +} + +.markdown-body h4 { + font-size: 1.25em; +} + +.markdown-body h4 .anchor { + line-height: 1.2; +} + +.markdown-body h5 { + font-size: 1em; +} + +.markdown-body h5 .anchor { + line-height: 1.1; +} + +.markdown-body h6 { + font-size: 1em; + color: #777; +} + +.markdown-body h6 .anchor { + line-height: 1.1; +} + +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin-top: 0; + margin-bottom: 16px; +} + +/* +.markdown-body hr { + height: 4px; + padding: 0; + margin: 16px 0; + background-color: #e7e7e7; + border: 0 none; +}*/ +.markdown-body ul, +.markdown-body ol { + padding-left: 2em; +} + +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body li>p { + margin-top: 16px; +} + +.markdown-body dl { + padding: 0; +} + +.markdown-body dl dt { + padding: 0; + margin-top: 16px; + font-size: 1em; + font-style: italic; + font-weight: bold; +} + +.markdown-body dl dd { + padding: 0 16px; + margin-bottom: 16px; +} + +.markdown-body blockquote { + padding: 0 15px; + color: #777; + border-left: 4px solid #ddd; +} + +.markdown-body blockquote> :first-child { + margin-top: 0; +} + +.markdown-body blockquote> :last-child { + margin-bottom: 0; +} + +.markdown-body table { + /* display: block; */ + width: 100%; + overflow: auto; + word-break: normal; + word-break: keep-all; +} + +.markdown-body table th { + font-weight: bold; +} + +.markdown-body table th, +.markdown-body table td { + padding: 6px 13px; + border: 1px solid #ddd; +} + +.markdown-body table tr { + background-color: #fff; + border-top: 1px solid #ccc; +} + +.markdown-body table tr:nth-child(2n) { + background-color: #f8f8f8; +} + +.markdown-body img { + max-width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.markdown-body code { + padding: 0; + padding-top: 0.2em; + padding-bottom: 0.2em; + margin: 0; + font-size: 85%; + background-color: rgba(0, 0, 0, 0.04); + border-radius: 3px; +} + +.markdown-body code:before, +.markdown-body code:after { + letter-spacing: -0.2em; + content: "\00a0"; +} + +.markdown-body pre>code { + padding: 0; + margin: 0; + font-size: 100%; + word-break: normal; + white-space: pre; + background: transparent; + border: 0; +} + +.markdown-body .highlight { + margin-bottom: 16px; +} + +.markdown-body .highlight pre, +.markdown-body pre { + padding: 16px; + overflow: auto; + font-size: 85%; + line-height: 1.45; + background-color: #f7f7f7; + border-radius: 3px; +} + +.markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.markdown-body pre { + word-wrap: normal; +} + +.markdown-body pre code { + display: inline; + max-width: initial; + padding: 0; + margin: 0; + overflow: initial; + line-height: inherit; + word-wrap: normal; + background-color: transparent; + border: 0; +} + +.markdown-body pre code:before, +.markdown-body pre code:after { + content: normal; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font-size: 11px; + line-height: 10px; + color: #555; + vertical-align: middle; + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb; +} + +.markdown-body .pl-c { + color: #969896; +} + +.markdown-body .pl-c1, +.markdown-body .pl-mdh, +.markdown-body .pl-mm, +.markdown-body .pl-mp, +.markdown-body .pl-mr, +.markdown-body .pl-s1 .pl-v, +.markdown-body .pl-s3, +.markdown-body .pl-sc, +.markdown-body .pl-sv { + color: #0086b3; +} + +.markdown-body .pl-e, +.markdown-body .pl-en { + color: #795da3; +} + +.markdown-body .pl-s1 .pl-s2, +.markdown-body .pl-smi, +.markdown-body .pl-smp, +.markdown-body .pl-stj, +.markdown-body .pl-vo, +.markdown-body .pl-vpf { + color: #333; +} + +.markdown-body .pl-ent { + color: #63a35c; +} + +.markdown-body .pl-k, +.markdown-body .pl-s, +.markdown-body .pl-st { + color: #a71d5d; +} + +.markdown-body .pl-pds, +.markdown-body .pl-s1, +.markdown-body .pl-s1 .pl-pse .pl-s2, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sra, +.markdown-body .pl-sr .pl-sre, +.markdown-body .pl-src { + color: #df5000; +} + +.markdown-body .pl-mo, +.markdown-body .pl-v { + color: #1d3e81; +} + +.markdown-body .pl-id { + color: #b52a1d; +} + +.markdown-body .pl-ii { + background-color: #b52a1d; + color: #f8f8f8; +} + +.markdown-body .pl-sr .pl-cce { + color: #63a35c; + font-weight: bold; +} + +.markdown-body .pl-ml { + color: #693a17; +} + +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { + color: #1d3e81; + font-weight: bold; +} + +.markdown-body .pl-mq { + color: #008080; +} + +.markdown-body .pl-mi { + color: #333; + font-style: italic; +} + +.markdown-body .pl-mb { + color: #333; + font-weight: bold; +} + +.markdown-body .pl-md, +.markdown-body .pl-mdhf { + background-color: #ffecec; + color: #bd2c00; +} + +.markdown-body .pl-mdht, +.markdown-body .pl-mi1 { + background-color: #eaffea; + color: #55a532; +} + +.markdown-body .pl-mdr { + color: #795da3; + font-weight: bold; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; + line-height: 10px; + color: #555; + vertical-align: middle; + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb; +} + +.markdown-body .task-list-item { + list-style-type: none; +} + +.markdown-body .task-list-item+.task-list-item { + margin-top: 3px; +} + +.markdown-body .task-list-item input { + float: left; + margin: 0.3em 0 0.25em -1.6em; + vertical-align: middle; +} + +.markdown-body :checked+.radio-label { + z-index: 1; + position: relative; + border-color: #4183c4; +} + +.editormd-preview-container, +.editormd-html-preview { + text-align: left; + font-size: 14px; + line-height: 1.6; + padding: 20px; + overflow: auto; + width: 100%; + background-color: #fff; +} + +.editormd-preview-container blockquote, +.editormd-html-preview blockquote { + color: #666; + border-left: 4px solid #ddd; + padding-left: 20px; + margin-left: 0; + font-size: 14px; + font-style: italic; +} + +.editormd-preview-container p code, +.editormd-html-preview p code { + margin-left: 5px; + margin-right: 4px; +} + +.editormd-preview-container abbr, +.editormd-html-preview abbr { + background: #ffffdd; +} + +.editormd-preview-container hr, +.editormd-html-preview hr { + height: 1px; + border: none; + border-top: 1px solid #ddd; + background: none; +} + +.editormd-preview-container code, +.editormd-html-preview code { + border: 1px solid #ddd; + background: #f6f6f6; + padding: 3px; + border-radius: 3px; + font-size: 14px; +} + +.editormd-preview-container pre, +.editormd-html-preview pre { + border: 1px solid #ddd; + background: #f6f6f6; + padding: 10px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; +} + +.editormd-preview-container pre code, +.editormd-html-preview pre code { + padding: 0; +} + +.editormd-preview-container pre, +.editormd-preview-container code, +.editormd-preview-container kbd, +.editormd-html-preview pre, +.editormd-html-preview code, +.editormd-html-preview kbd { + font-family: "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; +} + +.editormd-preview-container table thead tr, +.editormd-html-preview table thead tr { + background-color: #F8F8F8; +} + +.editormd-preview-container p.editormd-tex, +.editormd-html-preview p.editormd-tex { + text-align: center; +} + +.editormd-preview-container span.editormd-tex, +.editormd-html-preview span.editormd-tex { + margin: 0 5px; +} + +.editormd-preview-container .emoji, +.editormd-html-preview .emoji { + width: 24px; + height: 24px; +} + +.editormd-preview-container .katex, +.editormd-html-preview .katex { + font-size: 1.4em; +} + +.editormd-preview-container .sequence-diagram, +.editormd-preview-container .flowchart, +.editormd-html-preview .sequence-diagram, +.editormd-html-preview .flowchart { + margin: 0 auto; + text-align: center; +} + +.editormd-preview-container .sequence-diagram svg, +.editormd-preview-container .flowchart svg, +.editormd-html-preview .sequence-diagram svg, +.editormd-html-preview .flowchart svg { + margin: 0 auto; +} + +.editormd-preview-container .sequence-diagram text, +.editormd-preview-container .flowchart text, +.editormd-html-preview .sequence-diagram text, +.editormd-html-preview .flowchart text { + font-size: 15px !important; + font-family: "YaHei Consolas Hybrid", Consolas, "Microsoft YaHei", "Malgun Gothic", "Segoe UI", Helvetica, Arial !important; +} + +/*! Pretty printing styles. Used with prettify.js. */ +/* SPAN elements with the classes below are added by prettyprint. */ +.pln { + color: #000; +} + +/* plain text */ +@media screen { + .str { + color: #080; + } + + /* string content */ + .kwd { + color: #008; + } + + /* a keyword */ + .com { + color: #800; + } + + /* a comment */ + .typ { + color: #606; + } + + /* a type name */ + .lit { + color: #066; + } + + /* a literal value */ + /* punctuation, lisp open bracket, lisp close bracket */ + .pun, + .opn, + .clo { + color: #660; + } + + .tag { + color: #008; + } + + /* a markup tag name */ + .atn { + color: #606; + } + + /* a markup attribute name */ + .atv { + color: #080; + } + + /* a markup attribute value */ + .dec, + .var { + color: #606; + } + + /* a declaration; a variable name */ + .fun { + color: red; + } + + /* a function name */ +} + +/* Use higher contrast and text-weight for printable form. */ +@media print, +projection { + .str { + color: #060; + } + + .kwd { + color: #006; + font-weight: bold; + } + + .com { + color: #600; + font-style: italic; + } + + .typ { + color: #404; + font-weight: bold; + } + + .lit { + color: #044; + } + + .pun, + .opn, + .clo { + color: #440; + } + + .tag { + color: #006; + font-weight: bold; + } + + .atn { + color: #404; + } + + .atv { + color: #060; + } +} + +/* Put a border around prettyprinted code snippets. */ +pre.prettyprint { + padding: 2px; + border: 1px solid #888; +} + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin-top: 0; + margin-bottom: 0; +} + +/* IE indents via margin-left */ +li.L0, +li.L1, +li.L2, +li.L3, +li.L5, +li.L6, +li.L7, +li.L8 { + list-style-type: none; +} + +/* Alternate shading for lines */ +li.L1, +li.L3, +li.L5, +li.L7, +li.L9 { + background: #eee; +} + +.editormd-preview-container pre.prettyprint, +.editormd-html-preview pre.prettyprint { + padding: 10px; + border: 1px solid #ddd; + white-space: pre-wrap; + word-wrap: break-word; +} + +.editormd-preview-container ol.linenums, +.editormd-html-preview ol.linenums { + color: #999; + padding-left: 2.5em; +} + +.editormd-preview-container ol.linenums li, +.editormd-html-preview ol.linenums li { + list-style-type: decimal; +} + +.editormd-preview-container ol.linenums li code, +.editormd-html-preview ol.linenums li code { + border: none; + background: none; + padding: 0; +} + +.editormd-preview-container .editormd-toc-menu, +.editormd-html-preview .editormd-toc-menu { + margin: 8px 0 12px 0; + display: inline-block; +} + +.editormd-preview-container .editormd-toc-menu>.markdown-toc, +.editormd-html-preview .editormd-toc-menu>.markdown-toc { + position: relative; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + border: 1px solid #ddd; + display: inline-block; + font-size: 1em; +} + +.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul, +.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul { + width: 160%; + min-width: 180px; + position: absolute; + left: -1px; + top: -2px; + z-index: 100; + padding: 0 10px 10px; + display: none; + background: #fff; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); + /* Webkit browsers */ + -moz-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); + /* Firefox */ + -ms-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); + /* IE9 */ + -o-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); + /* Opera(Old) */ + box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); + /* IE9+, News */ +} + +.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul>li ul, +.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul>li ul { + width: 100%; + min-width: 180px; + border: 1px solid #ddd; + display: none; + background: #fff; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} + +.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul>li a, +.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul>li a { + color: #666; + padding: 6px 10px; + display: block; + -webkit-transition: background-color 500ms ease-out; + /* Safari, Chrome */ + -moz-transition: background-color 500ms ease-out; + /* Firefox 4.0~16.0 */ + transition: background-color 500ms ease-out; + /* IE >9, FF >15, Opera >12.0 */ +} + +.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul>li a:hover, +.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul>li a:hover { + background-color: #f6f6f6; +} + +.editormd-preview-container .editormd-toc-menu>.markdown-toc li, +.editormd-html-preview .editormd-toc-menu>.markdown-toc li { + position: relative; +} + +.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul, +.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul { + position: absolute; + top: 32px; + left: 10%; + display: none; + -webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); + /* Webkit browsers */ + -moz-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); + /* Firefox */ + -ms-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); + /* IE9 */ + -o-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); + /* Opera(Old) */ + box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); + /* IE9+, News */ +} + +.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:before, +.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:after, +.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:before, +.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:after { + pointer-events: pointer-events; + position: absolute; + left: 15px; + top: -6px; + display: block; + content: ""; + width: 0; + height: 0; + border: 6px solid transparent; + border-width: 0 6px 6px; + z-index: 10; +} + +.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:before, +.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:before { + border-bottom-color: #ccc; +} + +.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:after, +.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:after { + border-bottom-color: #ffffff; + top: -5px; +} + +.editormd-preview-container .editormd-toc-menu ul, +.editormd-html-preview .editormd-toc-menu ul { + list-style: none; +} + +.editormd-preview-container .editormd-toc-menu a, +.editormd-html-preview .editormd-toc-menu a { + text-decoration: none; +} + +.editormd-preview-container .editormd-toc-menu h1, +.editormd-html-preview .editormd-toc-menu h1 { + font-size: 16px; + padding: 5px 0 10px 10px; + line-height: 1; + border-bottom: 1px solid #eee; +} + +.editormd-preview-container .editormd-toc-menu h1 .fa, +.editormd-html-preview .editormd-toc-menu h1 .fa { + padding-left: 10px; +} + +.editormd-preview-container .editormd-toc-menu .toc-menu-btn, +.editormd-html-preview .editormd-toc-menu .toc-menu-btn { + color: #666; + min-width: 180px; + padding: 5px 10px; + border-radius: 4px; + display: inline-block; + -webkit-transition: background-color 500ms ease-out; + /* Safari, Chrome */ + -moz-transition: background-color 500ms ease-out; + /* Firefox 4.0~16.0 */ + transition: background-color 500ms ease-out; + /* IE >9, FF >15, Opera >12.0 */ +} + +.editormd-preview-container .editormd-toc-menu .toc-menu-btn:hover, +.editormd-html-preview .editormd-toc-menu .toc-menu-btn:hover { + background-color: #f6f6f6; +} + +.editormd-preview-container .editormd-toc-menu .toc-menu-btn .fa, +.editormd-html-preview .editormd-toc-menu .toc-menu-btn .fa { + float: right; + padding: 3px 0 0 10px; + font-size: 1.3em; +} + +.markdown-body .editormd-toc-menu ul { + padding-left: 0; +} + +.markdown-body .highlight pre, +.markdown-body pre { + line-height: 1.6; +} + +hr.editormd-page-break { + border: 1px dotted #ccc; + font-size: 0; + height: 2px; +} + +@media only print { + hr.editormd-page-break { + background: none; + border: none; + height: 0; + } +} + +.editormd-html-preview textarea { + display: none; +} + +.editormd-html-preview hr.editormd-page-break { + background: none; + border: none; + height: 0; +} + +.editormd-preview-close-btn { + color: #fff; + padding: 4px 6px; + font-size: 18px; + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + -ms-border-radius: 500px; + -o-border-radius: 500px; + border-radius: 500px; + display: none; + background-color: #ccc; + position: absolute; + top: 25px; + right: 35px; + z-index: 19; + -webkit-transition: background-color 300ms ease-out; + /* Safari, Chrome */ + -moz-transition: background-color 300ms ease-out; + /* Firefox 4.0~16.0 */ + transition: background-color 300ms ease-out; + /* IE >9, FF >15, Opera >12.0 */ +} + +.editormd-preview-close-btn:hover { + background-color: #999; +} + +.editormd-preview-active { + width: 100%; + padding: 40px; +} + +/* Preview dark theme */ +.editormd-preview-theme-dark { + color: #777; + background: #2C2827; +} + +.editormd-preview-theme-dark .editormd-preview-container { + color: #888; + background-color: #2C2827; +} + +.editormd-preview-theme-dark .editormd-preview-container pre.prettyprint { + border: none; +} + +.editormd-preview-theme-dark .editormd-preview-container blockquote { + color: #555; + padding: 0.5em; + background: #222; + border-color: #333; +} + +.editormd-preview-theme-dark .editormd-preview-container abbr { + color: #fff; + padding: 1px 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + background: #ff9900; +} + +.editormd-preview-theme-dark .editormd-preview-container code { + color: #fff; + border: none; + padding: 1px 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + background: #5A9600; +} + +.editormd-preview-theme-dark .editormd-preview-container table { + border: none; +} + +.editormd-preview-theme-dark .editormd-preview-container .fa-emoji { + color: #B4BF42; +} + +.editormd-preview-theme-dark .editormd-preview-container .katex { + color: #FEC93F; +} + +.editormd-preview-theme-dark .editormd-toc-menu>.markdown-toc { + background: #fff; + border: none; +} + +.editormd-preview-theme-dark .editormd-toc-menu>.markdown-toc h1 { + border-color: #ddd; +} + +.editormd-preview-theme-dark .markdown-body h1, +.editormd-preview-theme-dark .markdown-body h2, +.editormd-preview-theme-dark .markdown-body hr { + border-color: #222; +} + +.editormd-preview-theme-dark pre { + color: #999; + background-color: #111; + background-color: rgba(0, 0, 0, 0.4); + /* plain text */ +} + +.editormd-preview-theme-dark pre .pln { + color: #999; +} + +.editormd-preview-theme-dark li.L1, +.editormd-preview-theme-dark li.L3, +.editormd-preview-theme-dark li.L5, +.editormd-preview-theme-dark li.L7, +.editormd-preview-theme-dark li.L9 { + background: none; +} + +.editormd-preview-theme-dark [class*=editormd-logo] { + color: #2196F3; +} + +.editormd-preview-theme-dark .sequence-diagram text { + fill: #fff; +} + +.editormd-preview-theme-dark .sequence-diagram rect, +.editormd-preview-theme-dark .sequence-diagram path { + color: #fff; + fill: #64D1CB; + stroke: #64D1CB; +} + +.editormd-preview-theme-dark .flowchart rect, +.editormd-preview-theme-dark .flowchart path { + stroke: #A6C6FF; +} + +.editormd-preview-theme-dark .flowchart rect { + fill: #A6C6FF; +} + +.editormd-preview-theme-dark .flowchart text { + fill: #5879B4; +} + +@media screen { + .editormd-preview-theme-dark { + /* string content */ + /* a keyword */ + /* a comment */ + /* a type name */ + /* a literal value */ + /* punctuation, lisp open bracket, lisp close bracket */ + /* a markup tag name */ + /* a markup attribute name */ + /* a markup attribute value */ + /* a declaration; a variable name */ + /* a function name */ + } + + .editormd-preview-theme-dark .str { + color: #080; + } + + .editormd-preview-theme-dark .kwd { + color: #ff9900; + } + + .editormd-preview-theme-dark .com { + color: #444444; + } + + .editormd-preview-theme-dark .typ { + color: #606; + } + + .editormd-preview-theme-dark .lit { + color: #066; + } + + .editormd-preview-theme-dark .pun, + .editormd-preview-theme-dark .opn, + .editormd-preview-theme-dark .clo { + color: #660; + } + + .editormd-preview-theme-dark .tag { + color: #ff9900; + } + + .editormd-preview-theme-dark .atn { + color: #6C95F5; + } + + .editormd-preview-theme-dark .atv { + color: #080; + } + + .editormd-preview-theme-dark .dec, + .editormd-preview-theme-dark .var { + color: #008BA7; + } + + .editormd-preview-theme-dark .fun { + color: red; + } +} + +.editormd-onlyread .editormd-toolbar { + display: none; +} + +.editormd-onlyread .CodeMirror { + margin-top: 0; +} + +.editormd-onlyread .editormd-preview { + top: 0; +} + +.editormd-fullscreen { + position: fixed; + top: 0; + left: 0; + border: none; + margin: 0 auto; +} + +/* Editor.md Dark theme */ +.editormd-theme-dark { + border-color: #1a1a17; +} + +.editormd-theme-dark .editormd-toolbar { + background: #1A1A17; + border-color: #1a1a17; +} + +.editormd-theme-dark .editormd-menu>li>a { + color: #777; + border-color: #1a1a17; +} + +.editormd-theme-dark .editormd-menu>li>a:hover, +.editormd-theme-dark .editormd-menu>li>a.active { + border-color: #333; + background: #333; +} + +.editormd-theme-dark .editormd-menu>li.divider { + border-right: 1px solid #111; +} + +.editormd-theme-dark .CodeMirror { + border-right: 1px solid rgba(0, 0, 0, 0.1); +} \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/FontAwesome.otf b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/FontAwesome.otf new file mode 100644 index 0000000..f7936cc Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/FontAwesome.otf differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/editormd-logo.eot b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/editormd-logo.eot new file mode 100644 index 0000000..6f378fd Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/editormd-logo.eot differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/editormd-logo.svg b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/editormd-logo.svg new file mode 100644 index 0000000..cce729b --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/editormd-logo.svg @@ -0,0 +1,11 @@ + + + +Generated by IcoMoon + + + + + + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/editormd-logo.ttf b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/editormd-logo.ttf new file mode 100644 index 0000000..659c1b3 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/editormd-logo.ttf differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/editormd-logo.woff b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/editormd-logo.woff new file mode 100644 index 0000000..384ee49 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/editormd-logo.woff differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.eot b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..33b2bb8 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.eot differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.svg b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..1ee89d4 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.ttf b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..ed9372f Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.ttf differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.woff b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..8b280b9 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.woff differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.woff2 b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..3311d58 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/fonts/fontawesome-webfont.woff2 differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/images/loading.gif b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/images/loading.gif new file mode 100644 index 0000000..3aa9c85 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/images/loading.gif differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/images/loading@2x.gif b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/images/loading@2x.gif new file mode 100644 index 0000000..bcc021e Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/images/loading@2x.gif differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/images/loading@3x.gif b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/images/loading@3x.gif new file mode 100644 index 0000000..216aa5a Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/css/images/loading@3x.gif differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.css b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.css new file mode 100644 index 0000000..8b013c5 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.css @@ -0,0 +1,57 @@ +@font-face {font-family: "iconfont"; + src: url('iconfont.eot?t=1574747480281'); /* IE9 */ + src: url('iconfont.eot?t=1574747480281#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAq4AAsAAAAAEkgAAAppAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCENgqVXJEcATYCJAMsCxgABCAFhG0HgSkbJQ9RlFFWItmPAndPEYgxUqihtY08MimGiyU//Ifc/Txtq/dnhvozMKIM2Keoi1Eb2YQbbWyxVWwMugluEyrqFvRW667XQdz1Jl43967lTwFINSU6UgVi2y5M4CC5l02KoE6YCgWsVIXsF+7z8Hl7f/s3poEHFhVgd0syTDTRaJJAQ2uuuoWimycWKhrb3fwNdoj7M8wTGQ+ZkKaGahMLGULREIOHkjAJz1464cFqyyBsDxAALFu/rD6/uguFKAJH6LEJ5kBhKRM1JRwRpwkZm8mgYyAgLoeINwHgqH9+9EEsxAAEQQVhcsY658PkRN0akk8MmG+z4cX15QNAQx0ACaAUANWgblbhBxCoF5kD0yk7AShV0sclnCgui6fFe+Ob8Vnx5XF3/LduTeIH44nFEKX8Bw+AghFIYhICIkIIoAYgmNT7YBMGcaT5gAJxmQhkGhAQIIuBgAQ5AwjEIGcBgQTkciAQgHQDgQjkb+ADIejWSO4NgrY2lAAGAvICoBYQ1BRfL0agNCG6igAAByKaMEPMZstzszAjlbAc19xRSCbRlEKYLBPmpFxyPiNlGCSZX9oqpJKyfmJKrC5KOjr/PNunOQzdw2zH05k01kVbs/jz2KKsvvFbgsgcUumf7YF0T/m6DMd5h89Bc4jOoDPtwCvSBp1MgPfPiN6Rli/TzlsuIrNGP3imMoPZpQr5c62BwR+iwy1XlVpscJhDc8ppbl5dyFpUY29uciuVROu7fWQ3n0ekwqa0KB0uVQ3QyHW/3/VOWBKN62PdhshTXfjJIoycUX04zAEm2JWRSCowqCU2x3MP+CYFYORoQeYuU63Doqi2NXGc3aOqq7H7VCpny9Jqgg/QtDWkImnCHi2iSERXIFUt0cRihrPRSdHVHkAbfB2/GM7h026HDdkO5Hqhv9XDTR39Qsww4xVC3xvPQWu4D4MwYnrcjGabYzq6gs6kDViHDcscXoy1tIG2qpw+n8s1wGZzY9ybttrthnEbNDEWt0JrawKq+R7NWt/JELXcXwxnrB3ebPPny87vEQS0rwshqTUAWmyxKXg7R1udyOHQMqVUtDRBHAlzbdjsMCGValH7+/1k19/NFLa9N1ZqVanqVm8DE13Idqw9ABRmC8CgvbB2aqW+kDmIGYufDyxpCVjBmCotdvtPWztzsArbbGv2oCu0mLd7JYvN1MfOK/peRAv9mgrL7E1+r7LcnQ+2e8Zl5O1RanMHW1QVwfQ+Nm+LS9XfYVb1cwQzPq6vq6Tc4Qp5uDKfZvvwmDcAnoIKpy/QrCgNpPV3epqbll4HdWciY1+J5Z2NVjPe8wPvuA1Joe29vjR4ipBSVctYrvtbgRqplwZNOrw5+mIaYQMGusrXL2NAarqisA2vnegAkBJfZHi1CzUZsQuK0mgDp2Vi2zHCMZCAUldN63AvXIkNtF4rWXmMARtg6c1gA0GTVU6Xw6vQ6uw+l1JvuoQYX4DPyUaUepvt9u1XsQBTlujdu0ql1rZH9e0qQxR5uOv5NNLf/u2snI41OB+ZMoUWaGcSahlzzBoZtFT++jnsw68r9u3q7d/v+r4F4FO9cCr3VcKfq/kn/UoG9+nPCu77sm+5JPEt+pNEXt2348bWp0k/oeTLov/P2D+yvfBi5uzKcHtyxjfjtCuGcrtL2jPoG34TxRHcg9IHXFrZwOeWDn6Z3urdxQ44MOqA9tIs7ntOdmTwxt71zh/y55ZqVn1X+ra5JLn3dBi2ZX+vk6NPNvRyan7d4LuzUfVocfWI08WbPt5/jLXs0Dhrtoy4FaLffPBjZyYk9nwoyMkRfCiBhUaW9x27aMKC1aM6WqQpSE2uXjCheVj2kTphn22FC/osKKyrr1t+Wp4h/ydmHGaM/RMvGQYvzTqdv4+zn829Pckk3+G+dSSlUXnLvUNumtR5yUR0y3rLPmHzpKkXU6V5bGKqG341X7VsLPPT0BlD4CcP+o8YxknHLmigTMGze4i5cLSqYFKyIHPGhHFkhu/3gYb2hd3zpDiyXtbRnNw0bsOIMVBNNh2nFpW+YfxUkz1e/5cBhDB45J/TdNkFgwxN9ZpbE0V5xI1iam2/AXRQ+aSqlEnjbvRIH5Oayj/qn/3VlPVpXxiymD4ZKQ3ja4vYixp7A/qQ/F3ZpeaurkNOfJeZlWZMX5rJi3U/D2hkgW30fCQJVxrBedf7LpfmvbuRfc0PhK9KBK3H4oKPJANvi09cFxQ52iR3BR9iN0/Ua2JhK1/xER5wZwr22oxCAgDAvXOcm+AwviZ8VbEcBj57FfUeAiPZxI/zfkywDJsAJ24YLX/muZhMLWN03rvz3vXqkl0/JdhA9PX9R4wjW9jdWQc6tV5eJ69V15yqh9qkiAFzuM5170GNulb+nlyv1hFjn59xQHpA+Lxoq3RrQso6oXQVhuV0WTMzS11Pvrlw/pfWl/PMroXHwyG7H3cRq83VJhVdt5pD4TPTrMfzoo2/dLZ987gxU9Csv33Udu+XtlfmVDftTPg8b71elKRVJ/HdLv58+OyUVrOJ8xc/YnTHp0wUiqZMOH5cK0TCfH/VqfoRbyq+VnYoux5IDhx7paB1w8ID4l6THiqmdTzhtiTZenq/R7xsxEfdfu5Nhdf2V6+//jTukVuebdP20kLO4wk70DVLxlp9fp0N5pPm66GDRAY7OnPUg4wVqHEfUQ1TqrZMTO+Xl7Tg+OZqtBiOGBVVc9U8kMB+ESuQ/UGvrF6s/QBxI0SaCZPPvwfn1lwwyeoqFyfK1Kq1ZTOWztKsJU6UrlzQvmDE0uKiT/RDM0+Wn8xsyINimLJpS8o76n2Nqw7X+e+W3dYPh+EPB8q3yo8aiyY37O1Q1+WFdu1Sv37o5IPsIbOG5IyQx6oOHtzU8FYyu1ke4o/lT6g9Kt+aO6+qzjXGjtxt6g7jmnRF61Bvy+1YY+zk+ySJHJVPuqOjd5SDekG0SwwhfWSmj64n3yHut7tFvkJOBNApxAOQ4EkJKfog6SG3Fe5JKEdfo3blLDY3kgnS/D3rgvSz91sH7OhvhfRP9pqPic+rUpQYMj91839CQk/8Z+yWUORSR18K0Tomp8nhRUvG0k6DpJ4AgOU8gL/g0mT/1p/O/VHlI+KSuMEgiGQxSGL57pR3KUOA1ochJDacgZVYaEtLoeXAPyXFxR7BQJL8MAgyXRjJef9iFLz/GAJK/+VCBAfJwPRR4yKtR6wontHoGPSJe0qEpyRVOaY49NxGZpOOJmnN0D7qQChJoqHIsGUBJep1mAmOWMwYSqhWKTKfmMBkUpG0VnH0TIijOT0cDtOW2ZCnUlBsNA05jOX0Ea5TQcGjSHRho3jk6bchxkpy6Clj9gT3IS0g1k9EhUTmcF8g5Fxj7gs9cISJMZRPET1YU1KIecpHSdmoEGleWxzyGCF8ifq0YWGai85LhLZPpW5vAm6+ccWl0kEgElFIgIRIhMRIgjCiEQPiXfmYFJLlcpXCWscajlcrzDFix8FpYDCVd8btKRZPbS4do/QdyQq8yiZjXeGoMy7OLF5CuY48FdwKagfydvjJE7dk9v7RvGp0LQMAAAA=') format('woff2'), + url('iconfont.woff?t=1574747480281') format('woff'), + url('iconfont.ttf?t=1574747480281') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('iconfont.svg?t=1574747480281#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-modeling:before { + content: "\e727"; +} + +.icon-home:before { + content: "\e619"; +} + +.icon-authenticationsystem:before { + content: "\e62a"; +} + +.icon-zhuye:before { + content: "\e601"; +} + +.icon-APIwendang:before { + content: "\e668"; +} + +.icon-wendang:before { + content: "\e6f5"; +} + +.icon-tubiaozhizuomobanyihuifu-:before { + content: "\e6a4"; +} + +.icon-zdlxb:before { + content: "\e650"; +} + +.icon-APIwendang1:before { + content: "\e652"; +} + +.icon-debug:before { + content: "\e60e"; +} + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.eot b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.eot new file mode 100644 index 0000000..6e21a4a Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.eot differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.js new file mode 100644 index 0000000..8a08f28 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.js @@ -0,0 +1,43 @@ +export default ! function (i) { + var l, t = '', + c = (l = document.getElementsByTagName("script"))[l.length - 1].getAttribute("data-injectcss"); + if (c && !i.__iconfont__svg__cssinject__) { + i.__iconfont__svg__cssinject__ = !0; + try { + document.write("") + } catch (l) { + console && console.log(l) + } + }! function (l) { + if (document.addEventListener) + if (~["complete", "loaded", "interactive"].indexOf(document.readyState)) setTimeout(l, 0); + else { + var c = function () { + document.removeEventListener("DOMContentLoaded", c, !1), l() + }; + document.addEventListener("DOMContentLoaded", c, !1) + } + else document.attachEvent && (e = l, a = i.document, h = !1, (o = function () { + try { + a.documentElement.doScroll("left") + } catch (l) { + return void setTimeout(o, 50) + } + t() + })(), a.onreadystatechange = function () { + "complete" == a.readyState && (a.onreadystatechange = null, t()) + }); + + function t() { + h || (h = !0, e()) + } + var e, a, h, o + }(function () { + var l, c; + (l = document.createElement("div")).innerHTML = t, t = null, (c = l.getElementsByTagName("svg")[0]) && (c.setAttribute("aria-hidden", "true"), c.style.position = "absolute", c.style.width = 0, c.style.height = 0, c.style.overflow = "hidden", function (l, c) { + c.firstChild ? function (l, c) { + c.parentNode.insertBefore(l, c) + }(l, c.firstChild) : c.appendChild(l) + }(c, document.body)) + }) +}(window); diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.json b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.json new file mode 100644 index 0000000..19f6203 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.json @@ -0,0 +1,79 @@ +{ + "id": "1502994", + "name": "Knife4jVue", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "157195", + "name": "modeling", + "font_class": "modeling", + "unicode": "e727", + "unicode_decimal": 59175 + }, + { + "icon_id": "175339", + "name": "icon-home", + "font_class": "home", + "unicode": "e619", + "unicode_decimal": 58905 + }, + { + "icon_id": "763858", + "name": "authenticationSystem", + "font_class": "authenticationsystem", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "1015188", + "name": "主页", + "font_class": "zhuye", + "unicode": "e601", + "unicode_decimal": 58881 + }, + { + "icon_id": "1364596", + "name": "API文档", + "font_class": "APIwendang", + "unicode": "e668", + "unicode_decimal": 58984 + }, + { + "icon_id": "2040851", + "name": "文档", + "font_class": "wendang", + "unicode": "e6f5", + "unicode_decimal": 59125 + }, + { + "icon_id": "4427415", + "name": "文档", + "font_class": "tubiaozhizuomobanyihuifu-", + "unicode": "e6a4", + "unicode_decimal": 59044 + }, + { + "icon_id": "4512932", + "name": "终端参数管理", + "font_class": "zdlxb", + "unicode": "e650", + "unicode_decimal": 58960 + }, + { + "icon_id": "5277251", + "name": "API文档", + "font_class": "APIwendang1", + "unicode": "e652", + "unicode_decimal": 58962 + }, + { + "icon_id": "6828169", + "name": "debug", + "font_class": "debug", + "unicode": "e60e", + "unicode_decimal": 58894 + } + ] +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.svg b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.svg new file mode 100644 index 0000000..95a2834 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.svg @@ -0,0 +1,56 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.ttf b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.ttf new file mode 100644 index 0000000..a8cfd6c Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.ttf differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.woff b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.woff new file mode 100644 index 0000000..8fac29b Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.woff differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.woff2 b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.woff2 new file mode 100644 index 0000000..ac4ebb4 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/iconfonts/iconfont.woff2 differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/logo.png b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/logo.png new file mode 100644 index 0000000..da06608 Binary files /dev/null and b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/assets/logo.png differ diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalFooter/index.less b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalFooter/index.less new file mode 100644 index 0000000..868c628 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalFooter/index.less @@ -0,0 +1,38 @@ +@import "~ant-design-vue/lib/style/themes/default.less"; + +.globalFooter { + padding: 0 16px; + /* margin: 25px 0 24px 0; */ + margin: 14px 0 10px 0; + text-align: center; + color: gray; + + a { + color: gray; + } + + .links { + margin-bottom: 8px; + + a { + color: @text-color-secondary; + transition: all 0.3s; + + &:not(:last-child) { + margin-right: 40px; + } + + &:hover { + color: @text-color; + } + } + } + + .copyright { + font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; + color: @text-color-secondary; + font-size: 16px; + } + + +} \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalFooter/index.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalFooter/index.vue new file mode 100644 index 0000000..f3f3db8 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalFooter/index.vue @@ -0,0 +1,51 @@ + + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalHeader/index.less b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalHeader/index.less new file mode 100644 index 0000000..5d43e29 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalHeader/index.less @@ -0,0 +1,113 @@ +@import "~ant-design-vue/lib/style/themes/default.less"; + +.header { + /* height: 64px; */ + padding: 0 12px 0 0; + background: #fff; + box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); + position: relative; +} + +.logo { + height: 64px; + line-height: 58px; + vertical-align: top; + display: inline-block; + padding: 0 0 0 24px; + cursor: pointer; + font-size: 20px; + + img { + display: inline-block; + vertical-align: middle; + } +} + +i.trigger { + font-size: 20px; + line-height: 64px; + cursor: pointer; + transition: all 0.3s, padding 0s; + padding: 0 24px; + float: left; + + &:hover { + background: @primary-1; + } +} + +.right { + float: right; + height: 100%; + + .action { + cursor: pointer; + padding: 0 12px; + display: inline-block; + transition: all 0.3s; + height: 100%; + + >i { + font-size: 16px; + vertical-align: middle; + color: @text-color; + } + + &:hover, + &.ant-popover-open { + background: @primary-1; + } + } + + .search { + padding: 0; + margin: 0 12px; + + &:hover { + background: transparent; + } + } + + .account { + .avatar { + margin: 20px 8px 20px 0; + color: @primary-color; + background: rgba(255, 255, 255, 0.85); + vertical-align: middle; + } + } +} + +@media only screen and (max-width: @screen-md) { + .header { + .ant-divider-vertical { + vertical-align: unset; + } + + .name { + display: none; + } + + i.trigger { + padding: 0 12px; + } + + .logo { + padding-right: 12px; + position: relative; + } + + .right { + position: absolute; + right: 12px; + top: 0; + background: #fff; + + .account { + .avatar { + margin-right: 0; + } + } + } + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalHeader/index.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalHeader/index.vue new file mode 100644 index 0000000..6509ecb --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalHeader/index.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalHeaderTab/index.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalHeaderTab/index.vue new file mode 100644 index 0000000..fbb07bd --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/GlobalHeaderTab/index.vue @@ -0,0 +1,40 @@ + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/HeaderSearch/index.less b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/HeaderSearch/index.less new file mode 100644 index 0000000..b4f24d8 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/HeaderSearch/index.less @@ -0,0 +1,37 @@ +@import "~ant-design-vue/lib/style/themes/default.less"; + +.headerSearch { + .anticon-search { + cursor: pointer; + font-size: 16px; + } + + .input { + transition: width 0.3s, margin-left 0.3s; + width: 0; + background: transparent; + border-radius: 0; + + .ant-select-selection { + background: transparent; + } + + input { + border: 0; + padding-left: 0; + padding-right: 0; + box-shadow: none !important; + } + + &, + &:hover, + &:focus { + border-bottom: 1px solid @border-color-base; + } + + &.show { + width: 210px; + margin-left: 8px; + } + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/HeaderSearch/index.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/HeaderSearch/index.vue new file mode 100644 index 0000000..ac7d592 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/HeaderSearch/index.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/Markdown/index.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/Markdown/index.vue new file mode 100644 index 0000000..10ee8cc --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/Markdown/index.vue @@ -0,0 +1,31 @@ + + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/SubMenu.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/SubMenu.vue new file mode 100644 index 0000000..ab2feba --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/SubMenu.vue @@ -0,0 +1,19 @@ + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/ThreeMenu.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/ThreeMenu.vue new file mode 100644 index 0000000..467fba2 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/ThreeMenu.vue @@ -0,0 +1,60 @@ + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/ThreeRoute.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/ThreeRoute.vue new file mode 100644 index 0000000..666a474 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/ThreeRoute.vue @@ -0,0 +1,32 @@ + + + + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/ThreeTitle.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/ThreeTitle.vue new file mode 100644 index 0000000..37a29dd --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/ThreeTitle.vue @@ -0,0 +1,34 @@ + + + + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/index.less b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/index.less new file mode 100644 index 0000000..1f81262 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/index.less @@ -0,0 +1,27 @@ +@import "~ant-design-vue/lib/style/themes/default.less"; + +@ease-in-out-circ: cubic-bezier(0.78, 0.14, 0.15, 0.86); + +.sider { + min-height: 100vh; + box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35); + position: relative; + z-index: 10; + + &.ligth { + background-color: white; + + .logo { + background: white; + + h1 { + color: #002140; + } + } + } +} + +.icon { + width: 14px; + margin-right: 10px; +} \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/index.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/index.vue new file mode 100644 index 0000000..2b64a9f --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/SiderMenu/index.vue @@ -0,0 +1,233 @@ + + + + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/common/ContextMenu.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/common/ContextMenu.vue new file mode 100644 index 0000000..caa0302 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/common/ContextMenu.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/common/MethodApi.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/common/MethodApi.vue new file mode 100644 index 0000000..73a9ee9 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/common/MethodApi.vue @@ -0,0 +1,17 @@ + + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/loading/index.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/loading/index.js new file mode 100644 index 0000000..d761c36 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/loading/index.js @@ -0,0 +1,38 @@ +import Loading from "./loading.vue" +import Vue from "vue" + +const LoadingConstrc = Vue.extend(Loading); + +let instance = new LoadingConstrc({ + el: document.createElement("div") +}); + +instance.show = false; +const loadOptions = { + show(options = {}) { + instance.show = true; + if (options) { + //console(instance) + //console(options) + document.body.append(instance.$el); + //options.el.appendChild(instance.$el); + instance.text = options.text; + } + }, + destroy() { + instance.show = false; + } +} + +export default { + install() { + if (!Vue.$kloading) { + Vue.$kloading = loadOptions; + } + Vue.mixin({ + created() { + this.$kloading = Vue.$kloading; + } + }) + } +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/loading/loading.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/loading/loading.vue new file mode 100644 index 0000000..71d4454 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/loading/loading.vue @@ -0,0 +1,79 @@ + + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/markdownSingleTransform.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/markdownSingleTransform.js new file mode 100644 index 0000000..263d775 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/markdownSingleTransform.js @@ -0,0 +1,270 @@ +import KUtils from '@/core/utils' + +/** + * 在单页面文档中点击复制,得到当前文档页的markdown文档 + * @param {*} apiInfo + */ +export default function markdownSingleText(apiInfo) { + var markdownCollections = []; + if (apiInfo != null && apiInfo != undefined) { + //二级标题 + markdownLines(markdownCollections); + markdownCollections.push('## ' + apiInfo.summary); + markdownLines(markdownCollections); + markdownCollections.push('**接口地址**:`' + apiInfo.showUrl + '`'); + markdownLines(markdownCollections); + markdownCollections.push('**请求方式**:`' + apiInfo.methodType + '`'); + markdownLines(markdownCollections); + markdownCollections.push('**请求数据类型**:`' + KUtils.toString(apiInfo.consumes, '*') + '`'); + markdownLines(markdownCollections); + markdownCollections.push('**响应数据类型**:`' + KUtils.toString(apiInfo.produces, '*') + '`'); + markdownLines(markdownCollections); + markdownCollections.push('**接口描述**:' + KUtils.toString(apiInfo.description, '暂无') + ''); + //判断是否有请求示例 + if (KUtils.checkUndefined(apiInfo.requestValue)) { + markdownLines(markdownCollections); + markdownCollections.push('**请求示例**:'); + markdownLines(markdownCollections); + markdownCollections.push('```javascript'); + markdownCollections.push(apiInfo.requestValue); + markdownCollections.push('```'); + } + //请求参数 + createApiRequestParameters(apiInfo, markdownCollections); + //响应状态 + createApiResponseStatus(apiInfo, markdownCollections); + //响应Schema-参数 + //判断响应参数 + createApiResponseParameters(apiInfo, markdownCollections); + } + return markdownCollections.join('\n'); +} +/** + * 主动换行 + * @param {*} markdownCollections + */ +function markdownLines(markdownCollections) { + markdownCollections.push('\n'); +} + +/** + * 请求参数 + * @param {*} apiInfo + * @param {*} markdownCollections + */ +function createApiRequestParameters(apiInfo, markdownCollections) { + let reqParameters = apiInfo.reqParameters; + markdownLines(markdownCollections); + markdownCollections.push('**请求参数**:'); + markdownLines(markdownCollections); + markdownCollections.push('**请求参数**:'); + //判断是否拥有请求参数 + if (reqParameters.length > 0) { + markdownLines(markdownCollections); + //拥有参数 + markdownCollections.push('| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |'); + markdownCollections.push('| -------- | -------- | ----- | -------- | -------- | ------ |'); + //级联表格,在表格需要最佳空格缩进符号 + deepMdTableByRequestParameter(reqParameters, markdownCollections, 1); + } else { + markdownLines(markdownCollections); + markdownCollections.push('暂无'); + } +} + +/** + * 响应状态 + * @param {*} apiInfo + * @param {*} markdownCollections + */ +function createApiResponseStatus(apiInfo, markdownCollections) { + if (KUtils.checkUndefined(apiInfo.responseCodes) && apiInfo.responseCodes.length > 0) { + markdownLines(markdownCollections); + markdownCollections.push('**响应状态**:'); + markdownLines(markdownCollections); + //拥有参数 + markdownCollections.push('| 状态码 | 说明 | schema |'); + markdownCollections.push('| -------- | -------- | ----- | '); + apiInfo.responseCodes.forEach(function (respcode) { + markdownCollections.push('|' + KUtils.toString(respcode.code, '') + '|' + KUtils.toString(respcode.description, '') + '|' + KUtils.toString(respcode.schema, '') + '|') + }) + } +} + +/** + * 响应参数 + * @param {*} apiInfo + * @param {*} markdownCollections + * @param {*} singleFlag + */ +function createApiResponseParameters(apiInfo, markdownCollections) { + //判断是否多个schema + if (apiInfo.multipartResponseSchema) { + var multipartData = apiInfo.multipCodeDatas; + if (KUtils.arrNotEmpty(multipartData)) { + multipartData.forEach(function (resp) { + markdownLines(markdownCollections); + markdownCollections.push('**响应状态码-' + KUtils.toString(resp.code, '') + '**:'); + createApiResponseSingleParam(resp, markdownCollections); + }) + } + } else { + //单个 + createApiResponseSingleParam(apiInfo.multipData, markdownCollections); + } + +} + + +/** + * 响应参数递归遍历参数 + * @param {*} md + * @param {*} modelData + */ +function findRespModelChildren(md, modelData) { + if (modelData != null && modelData != undefined && modelData.length > 0) { + modelData.forEach(function (nmd) { + if (nmd.pid == md.id) { + nmd.children = []; + //本级level+1 + nmd.level = md.level + 1; + findRespModelChildren(nmd, modelData); + //查找后如果没有,则将children置空 + if (nmd.children.length == 0) { + nmd.children = null; + } + md.children.push(nmd); + } + }); + } +} + +/** + * 单个响应状态 + * @param {*} resp + * @param {*} markdownCollections + */ +function createApiResponseSingleParam(resp, markdownCollections) { + //判断是否有响应Header + createApiResponseHeaderParams(resp.responseHeaderParameters, markdownCollections); + //数据 + markdownLines(markdownCollections); + markdownCollections.push('**响应参数**:'); + markdownLines(markdownCollections); + //拥有参数 + if (KUtils.arrNotEmpty(resp.data)) { + //拥有参数 + markdownCollections.push('| 参数名称 | 参数说明 | 类型 | schema |'); + markdownCollections.push('| -------- | -------- | ----- |----- | '); + resp.data.forEach(function (param) { + param.level = 1; + markdownCollections.push('|' + getMdTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepMdTableByResponseParameter(param.children, markdownCollections, (param.level + 1)); + }) + } else { + markdownCollections.push('暂无'); + } + //判断是否拥有响应示例 + markdownLines(markdownCollections); + markdownCollections.push('**响应示例**:'); + if (resp.responseBasicType) { + markdownCollections.push('```text'); + markdownCollections.push(resp.responseText); + markdownCollections.push('```'); + } else { + markdownCollections.push('```javascript'); + markdownCollections.push(resp.responseValue); + markdownCollections.push('```'); + } + +} + +/** + * 递归循环遍历响应参数得到markdown表格 + * @param {*} parameters + * @param {*} markdownCollections + */ +function deepMdTableByResponseParameter(parameters, markdownCollections, level) { + if (parameters != null && parameters != undefined && parameters.length > 0) { + parameters.forEach(function (param) { + param.level = level; + markdownCollections.push('|' + getMdTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepMdTableByResponseParameter(param.children, markdownCollections, (param.level + 1)); + }) + } + +} + +/** + * 响应参数拥有响应头 + * @param {*} responseHeaderParameters + * @param {*} markdownCollections + */ +function createApiResponseHeaderParams(responseHeaderParameters, markdownCollections) { + if (KUtils.checkUndefined(responseHeaderParameters)) { + if (responseHeaderParameters.length > 0) { + markdownLines(markdownCollections); + markdownCollections.push('**响应Header**:'); + markdownLines(markdownCollections); + //拥有参数 + markdownCollections.push('| 参数名称 | 参数说明 | 数据类型 |'); + markdownCollections.push('| -------- | -------- | ----- | '); + responseHeaderParameters.forEach(function (respHeader) { + markdownCollections.push('|' + KUtils.toString(respHeader.name, '') + '|' + KUtils.toString(respHeader.description, '') + '|' + KUtils.toString(respHeader.type, '') + '|'); + }) + } + } +} + + +/** + * 递归循环遍历参数得到markdown表格 + * @param {*} parameters + * @param {*} markdownCollections + */ +function deepMdTableByRequestParameter(parameters, markdownCollections, level) { + if (parameters != null && parameters != undefined && parameters.length > 0) { + parameters.forEach(function (param) { + //赋值一个level + param.level = level; + markdownCollections.push('|' + getMdTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.in, '') + '|' + KUtils.toString(param.require, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepMdTableByRequestParameter(param.children, markdownCollections, (param.level + 1)); + }) + } + +} + + +/** + * 根据参数级别获取名称 + * @param {*} param + */ +function getMdTableByLevel(param) { + var spaceArr = []; + for (var i = 1; i < param.level; i++) { + spaceArr.push('  ') + } + var tmpName = spaceArr.join('') + param.name; + return tmpName; +} + +/** + * 递归遍历子元素 + * @param {*} md + * @param {*} modelData + */ +function findModelChildren(md, modelData) { + if (modelData != null && modelData != undefined && modelData.length > 0) { + modelData.forEach(function (nmd) { + if (nmd.pid == md.id) { + nmd.children = []; + findModelChildren(nmd, modelData); + //查找后如果没有,则将children置空 + if (nmd.children.length == 0) { + nmd.children = null; + } + md.children.push(nmd); + } + }); + } +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/markdownSingleTransformUS.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/markdownSingleTransformUS.js new file mode 100644 index 0000000..19f2244 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/markdownSingleTransformUS.js @@ -0,0 +1,270 @@ +import KUtils from '@/core/utils' + +/** + * 在单页面文档中点击复制,得到当前文档页的markdown文档 + * @param {*} apiInfo + */ +export default function markdownSingleTextUs(apiInfo) { + var markdownCollections = []; + if (apiInfo != null && apiInfo != undefined) { + //二级标题 + markdownLines(markdownCollections); + markdownCollections.push('## ' + apiInfo.summary); + markdownLines(markdownCollections); + markdownCollections.push('**Url**:`' + apiInfo.showUrl + '`'); + markdownLines(markdownCollections); + markdownCollections.push('**Method**:`' + apiInfo.methodType + '`'); + markdownLines(markdownCollections); + markdownCollections.push('**produces**:`' + KUtils.toString(apiInfo.consumes, '*') + '`'); + markdownLines(markdownCollections); + markdownCollections.push('**consumes**:`' + KUtils.toString(apiInfo.produces, '*') + '`'); + markdownLines(markdownCollections); + markdownCollections.push('**description**:' + KUtils.toString(apiInfo.description, 'None') + ''); + //判断是否有请求示例 + if (KUtils.checkUndefined(apiInfo.requestValue)) { + markdownLines(markdownCollections); + markdownCollections.push('**Sample**:'); + markdownLines(markdownCollections); + markdownCollections.push('```javascript'); + markdownCollections.push(apiInfo.requestValue); + markdownCollections.push('```'); + } + //请求参数 + createApiRequestParameters(apiInfo, markdownCollections); + //响应状态 + createApiResponseStatus(apiInfo, markdownCollections); + //响应Schema-参数 + //判断响应参数 + createApiResponseParameters(apiInfo, markdownCollections); + } + return markdownCollections.join('\n'); +} +/** + * 主动换行 + * @param {*} markdownCollections + */ +function markdownLines(markdownCollections) { + markdownCollections.push('\n'); +} + +/** + * 请求参数 + * @param {*} apiInfo + * @param {*} markdownCollections + */ +function createApiRequestParameters(apiInfo, markdownCollections) { + let reqParameters = apiInfo.reqParameters; + markdownLines(markdownCollections); + markdownCollections.push('**Params**:'); + markdownLines(markdownCollections); + markdownCollections.push('**Params**:'); + //判断是否拥有请求参数 + if (reqParameters.length > 0) { + markdownLines(markdownCollections); + //拥有参数 + markdownCollections.push('| name | description | in | require | type | schema |'); + markdownCollections.push('| -------- | -------- | ----- | -------- | -------- | ------ |'); + //级联表格,在表格需要最佳空格缩进符号 + deepMdTableByRequestParameter(reqParameters, markdownCollections, 1); + } else { + markdownLines(markdownCollections); + markdownCollections.push('None'); + } +} + +/** + * 响应状态 + * @param {*} apiInfo + * @param {*} markdownCollections + */ +function createApiResponseStatus(apiInfo, markdownCollections) { + if (KUtils.checkUndefined(apiInfo.responseCodes) && apiInfo.responseCodes.length > 0) { + markdownLines(markdownCollections); + markdownCollections.push('**status**:'); + markdownLines(markdownCollections); + //拥有参数 + markdownCollections.push('| code | description | schema |'); + markdownCollections.push('| -------- | -------- | ----- | '); + apiInfo.responseCodes.forEach(function (respcode) { + markdownCollections.push('|' + KUtils.toString(respcode.code, '') + '|' + KUtils.toString(respcode.description, '') + '|' + KUtils.toString(respcode.schema, '') + '|') + }) + } +} + +/** + * 响应参数 + * @param {*} apiInfo + * @param {*} markdownCollections + * @param {*} singleFlag + */ +function createApiResponseParameters(apiInfo, markdownCollections) { + //判断是否多个schema + if (apiInfo.multipartResponseSchema) { + var multipartData = apiInfo.multipCodeDatas; + if (KUtils.arrNotEmpty(multipartData)) { + multipartData.forEach(function (resp) { + markdownLines(markdownCollections); + markdownCollections.push('**code-' + KUtils.toString(resp.code, '') + '**:'); + createApiResponseSingleParam(resp, markdownCollections); + }) + } + } else { + //单个 + createApiResponseSingleParam(apiInfo.multipData, markdownCollections); + } + +} + + +/** + * 响应参数递归遍历参数 + * @param {*} md + * @param {*} modelData + */ +function findRespModelChildren(md, modelData) { + if (modelData != null && modelData != undefined && modelData.length > 0) { + modelData.forEach(function (nmd) { + if (nmd.pid == md.id) { + nmd.children = []; + //本级level+1 + nmd.level = md.level + 1; + findRespModelChildren(nmd, modelData); + //查找后如果没有,则将children置空 + if (nmd.children.length == 0) { + nmd.children = null; + } + md.children.push(nmd); + } + }); + } +} + +/** + * 单个响应状态 + * @param {*} resp + * @param {*} markdownCollections + */ +function createApiResponseSingleParam(resp, markdownCollections) { + //判断是否有响应Header + createApiResponseHeaderParams(resp.responseHeaderParameters, markdownCollections); + //数据 + markdownLines(markdownCollections); + markdownCollections.push('**Responses**:'); + markdownLines(markdownCollections); + //拥有参数 + if (KUtils.arrNotEmpty(resp.data)) { + //拥有参数 + markdownCollections.push('| name | description | type | schema |'); + markdownCollections.push('| -------- | -------- | ----- |----- | '); + resp.data.forEach(function (param) { + param.level = 1; + markdownCollections.push('|' + getMdTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepMdTableByResponseParameter(param.children, markdownCollections, (param.level + 1)); + }) + } else { + markdownCollections.push('None'); + } + //判断是否拥有响应示例 + markdownLines(markdownCollections); + markdownCollections.push('**Response Sample**:'); + if (resp.responseBasicType) { + markdownCollections.push('```text'); + markdownCollections.push(resp.responseText); + markdownCollections.push('```'); + } else { + markdownCollections.push('```javascript'); + markdownCollections.push(resp.responseValue); + markdownCollections.push('```'); + } + +} + +/** + * 递归循环遍历响应参数得到markdown表格 + * @param {*} parameters + * @param {*} markdownCollections + */ +function deepMdTableByResponseParameter(parameters, markdownCollections, level) { + if (parameters != null && parameters != undefined && parameters.length > 0) { + parameters.forEach(function (param) { + param.level = level; + markdownCollections.push('|' + getMdTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepMdTableByResponseParameter(param.children, markdownCollections, (param.level + 1)); + }) + } + +} + +/** + * 响应参数拥有响应头 + * @param {*} responseHeaderParameters + * @param {*} markdownCollections + */ +function createApiResponseHeaderParams(responseHeaderParameters, markdownCollections) { + if (KUtils.checkUndefined(responseHeaderParameters)) { + if (responseHeaderParameters.length > 0) { + markdownLines(markdownCollections); + markdownCollections.push('**Response Header**:'); + markdownLines(markdownCollections); + //拥有参数 + markdownCollections.push('|name | description | type |'); + markdownCollections.push('| -------- | -------- | ----- | '); + responseHeaderParameters.forEach(function (respHeader) { + markdownCollections.push('|' + KUtils.toString(respHeader.name, '') + '|' + KUtils.toString(respHeader.description, '') + '|' + KUtils.toString(respHeader.type, '') + '|'); + }) + } + } +} + + +/** + * 递归循环遍历参数得到markdown表格 + * @param {*} parameters + * @param {*} markdownCollections + */ +function deepMdTableByRequestParameter(parameters, markdownCollections, level) { + if (parameters != null && parameters != undefined && parameters.length > 0) { + parameters.forEach(function (param) { + //赋值一个level + param.level = level; + markdownCollections.push('|' + getMdTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.in, '') + '|' + KUtils.toString(param.require, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepMdTableByRequestParameter(param.children, markdownCollections, (param.level + 1)); + }) + } + +} + + +/** + * 根据参数级别获取名称 + * @param {*} param + */ +function getMdTableByLevel(param) { + var spaceArr = []; + for (var i = 1; i < param.level; i++) { + spaceArr.push('  ') + } + var tmpName = spaceArr.join('') + param.name; + return tmpName; +} + +/** + * 递归遍历子元素 + * @param {*} md + * @param {*} modelData + */ +function findModelChildren(md, modelData) { + if (modelData != null && modelData != undefined && modelData.length > 0) { + modelData.forEach(function (nmd) { + if (nmd.pid == md.id) { + nmd.children = []; + findModelChildren(nmd, modelData); + //查找后如果没有,则将children置空 + if (nmd.children.length == 0) { + nmd.children = null; + } + md.children.push(nmd); + } + }); + } +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/markdownTransform.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/markdownTransform.js new file mode 100644 index 0000000..2993554 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/markdownTransform.js @@ -0,0 +1,360 @@ +import KUtils from '@/core/utils' + +/** + * 根据当前swagger分组实例得到当前组下markdown纯文本 + * @param {*} instance + */ +export default function markdownText(instance) { + var markdownCollections = []; + if (instance != null && instance != undefined) { + createBasicInfo(instance, markdownCollections); + createTagsInfo(instance, markdownCollections); + //增强文档 + createPlusInfo(instance, markdownCollections); + } + return markdownCollections.join('\n'); +} + +/** + * 主动换行 + * @param {*} markdownCollections + */ +function markdownLines(markdownCollections) { + markdownCollections.push('\n'); +} + +/** + * 基本信息 + * @param {*} instance 当前分组实例对象 + * @param {*} markdownCollections markdown文本集合对象 + */ +function createBasicInfo(instance, markdownCollections) { + markdownCollections.push('# ' + instance.title); + markdownLines(markdownCollections); + markdownCollections.push('**简介**:' + instance.description); + markdownLines(markdownCollections); + markdownCollections.push('**HOST**:' + instance.host); + markdownLines(markdownCollections); + markdownCollections.push('**联系人**:' + instance.contact); + markdownLines(markdownCollections); + markdownCollections.push('**Version**:' + instance.version); + markdownLines(markdownCollections); + markdownCollections.push('**接口路径**:' + instance.url); + markdownLines(markdownCollections); + //第三方md软件Typora目录格式 + markdownCollections.push('[TOC]'); + markdownLines(markdownCollections); +} + +/** + * 增加增强文档 + * @param {*} instance + * @param {*} markdownCollections + */ +function createPlusInfo(instance, markdownCollections) { + if (KUtils.checkUndefined(instance.markdownFiles)) { + if (instance.markdownFiles.length > 0) { + markdownLines(markdownCollections); + markdownCollections.push('# 附录'); + instance.markdownFiles.forEach(function (md) { + markdownLines(markdownCollections); + //判断是否包含children + if(KUtils.arrNotEmpty(md.children)){ + markdownCollections.push('## ' + md.name); + markdownLines(markdownCollections); + + md.children.forEach(mdfile=>{ + markdownCollections.push('### ' + mdfile.title); + markdownCollections.push(mdfile.content); + }) + } + }) + } + } + +} + +/** + * 遍历tags分组信息 + * @param {*} instance 当前分组实例对象 + * @param {*} markdownCollections markdown文本集合对象 + */ +function createTagsInfo(instance, markdownCollections) { + if (instance.tags != undefined && instance.tags != null) { + markdownCollections.push('\n'); + instance.tags.forEach(function (tag) { + markdownLines(markdownCollections); + markdownCollections.push('# ' + tag.name) + if (tag.childrens != undefined && tag.childrens != null && tag.childrens.length > 0) { + //遍历 + tag.childrens.forEach(function (apiInfo) { + createApiInfo(apiInfo, markdownCollections); + }) + } else { + markdownCollections.push('暂无接口文档') + } + }) + + } +} + +/** + * 遍历接口详情 + * @param {*} apiInfo 接口实例 + * @param {*} markdownCollections markdown文本集合对象 + */ +function createApiInfo(apiInfo, markdownCollections) { + //二级标题 + markdownLines(markdownCollections); + markdownCollections.push('## ' + apiInfo.summary); + markdownLines(markdownCollections); + markdownCollections.push('**接口地址**:`' + apiInfo.showUrl + '`'); + markdownLines(markdownCollections); + markdownCollections.push('**请求方式**:`' + apiInfo.methodType + '`'); + markdownLines(markdownCollections); + markdownCollections.push('**请求数据类型**:`' + KUtils.toString(apiInfo.consumes, '*') + '`'); + markdownLines(markdownCollections); + markdownCollections.push('**响应数据类型**:`' + KUtils.toString(apiInfo.produces, '*') + '`'); + markdownLines(markdownCollections); + if(KUtils.strNotBlank(apiInfo.author)){ + markdownCollections.push('**开发者**:' + KUtils.toString(apiInfo.author, '暂无') + ''); + markdownLines(markdownCollections); + } + markdownCollections.push('**接口描述**:' + KUtils.toString(apiInfo.description, '暂无') + ''); + //判断是否有请求示例 + if (KUtils.checkUndefined(apiInfo.requestValue)) { + markdownLines(markdownCollections); + markdownCollections.push('**请求示例**:'); + markdownLines(markdownCollections); + markdownCollections.push('```javascript'); + markdownCollections.push(apiInfo.requestValue); + markdownCollections.push('```'); + } + //请求参数 + createApiRequestParameters(apiInfo, markdownCollections); + //响应状态 + createApiResponseStatus(apiInfo, markdownCollections); + //响应Schema-参数 + //判断响应参数 + createApiResponseParameters(apiInfo, markdownCollections); + +} +/** + * 响应状态 + * @param {*} apiInfo + * @param {*} markdownCollections + */ +function createApiResponseStatus(apiInfo, markdownCollections) { + if (KUtils.checkUndefined(apiInfo.responseCodes) && apiInfo.responseCodes.length > 0) { + markdownLines(markdownCollections); + markdownCollections.push('**响应状态**:'); + markdownLines(markdownCollections); + //拥有参数 + markdownCollections.push('| 状态码 | 说明 | schema |'); + markdownCollections.push('| -------- | -------- | ----- | '); + apiInfo.responseCodes.forEach(function (respcode) { + markdownCollections.push('|' + KUtils.toString(respcode.code, '') + '|' + KUtils.toString(respcode.description, '') + '|' + KUtils.toString(respcode.schema, '') + '|') + }) + } +} + +/** + * 响应参数拥有响应头 + * @param {*} responseHeaderParameters + * @param {*} markdownCollections + */ +function createApiResponseHeaderParams(responseHeaderParameters, markdownCollections) { + if (KUtils.checkUndefined(responseHeaderParameters)) { + if (responseHeaderParameters.length > 0) { + markdownLines(markdownCollections); + markdownCollections.push('**响应Header**:'); + markdownLines(markdownCollections); + //拥有参数 + markdownCollections.push('| 参数名称 | 参数说明 | 数据类型 |'); + markdownCollections.push('| -------- | -------- | ----- | '); + responseHeaderParameters.forEach(function (respHeader) { + markdownCollections.push('|' + KUtils.toString(respHeader.name, '') + '|' + KUtils.toString(respHeader.description, '') + '|' + KUtils.toString(respHeader.type, '') + '|'); + }) + } + } +} + +/** + * 响应参数 + * @param {*} apiInfo + * @param {*} markdownCollections + * @param {*} singleFlag + */ +function createApiResponseParameters(apiInfo, markdownCollections) { + //判断是否多个schema + if (apiInfo.multipartResponseSchema) { + var multipartData = apiInfo.multipCodeDatas; + if (KUtils.arrNotEmpty(multipartData)) { + multipartData.forEach(function (resp) { + markdownLines(markdownCollections); + markdownCollections.push('**响应状态码-' + KUtils.toString(resp.code, '') + '**:'); + createApiResponseSingleParam(resp, markdownCollections); + }) + } + } else { + //单个 + createApiResponseSingleParam(apiInfo.multipData, markdownCollections); + } +} +/** + * 单个响应状态 + * @param {*} resp + * @param {*} markdownCollections + */ +function createApiResponseSingleParam(resp, markdownCollections) { + //判断是否有响应Header + createApiResponseHeaderParams(resp.responseHeaderParameters, markdownCollections); + //数据 + markdownLines(markdownCollections); + markdownCollections.push('**响应参数**:'); + markdownLines(markdownCollections); + if (KUtils.arrNotEmpty(resp.data)) { + //拥有参数 + markdownCollections.push('| 参数名称 | 参数说明 | 类型 | schema |'); + markdownCollections.push('| -------- | -------- | ----- |----- | '); + resp.data.forEach(function (param) { + param.level = 1; + markdownCollections.push('|' + getMdTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepMdTableByResponseParameter(param.children, markdownCollections, (param.level + 1)); + }) + } else { + markdownCollections.push('暂无'); + } + //判断是否拥有响应示例 + markdownLines(markdownCollections); + markdownCollections.push('**响应示例**:'); + if (resp.responseBasicType) { + markdownCollections.push('```text'); + markdownCollections.push(resp.responseText); + markdownCollections.push('```'); + } else { + markdownCollections.push('```javascript'); + markdownCollections.push(resp.responseValue); + markdownCollections.push('```'); + } + +} + + +/** + * 请求参数 + * @param {*} apiInfo + * @param {*} markdownCollections + */ +function createApiRequestParameters(apiInfo, markdownCollections) { + //window.console.log(apiInfo) + + let reqParameters = apiInfo.reqParameters; + markdownLines(markdownCollections); + markdownCollections.push('**请求参数**:'); + //判断是否拥有请求参数 + if(KUtils.arrNotEmpty(reqParameters)){ + //if (reqParameters.length > 0) { + markdownLines(markdownCollections); + //拥有参数 + markdownCollections.push('| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |'); + markdownCollections.push('| -------- | -------- | ----- | -------- | -------- | ------ |'); + //级联表格,在表格需要最佳空格缩进符号 + deepMdTableByRequestParameter(reqParameters, markdownCollections, 1); + } else { + markdownLines(markdownCollections); + markdownCollections.push('暂无'); + } +} + +/** + * 递归循环遍历响应参数得到markdown表格 + * @param {*} parameters + * @param {*} markdownCollections + */ +function deepMdTableByResponseParameter(parameters, markdownCollections, level) { + if (parameters != null && parameters != undefined && parameters.length > 0) { + parameters.forEach(function (param) { + param.level = level; + markdownCollections.push('|' + getMdTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepMdTableByResponseParameter(param.children, markdownCollections, (param.level + 1)); + }) + } + +} + + +/** + * 递归循环遍历参数得到markdown表格 + * @param {*} parameters + * @param {*} markdownCollections + */ +function deepMdTableByRequestParameter(parameters, markdownCollections, level) { + if (parameters != null && parameters != undefined && parameters.length > 0) { + parameters.forEach(function (param) { + //赋值一个level + param.level = level; + markdownCollections.push('|' + getMdTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.in, '') + '|' + KUtils.toString(param.require, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepMdTableByRequestParameter(param.children, markdownCollections, (param.level + 1)); + }) + } + +} + + +/** + * 根据参数级别获取名称 + * @param {*} param + */ +function getMdTableByLevel(param) { + var spaceArr = []; + for (var i = 1; i < param.level; i++) { + spaceArr.push('  ') + } + var tmpName = spaceArr.join('') + param.name; + return tmpName; +} + +/** + * 递归遍历子元素 + * @param {*} md + * @param {*} modelData + */ +function findModelChildren(md, modelData) { + if (modelData != null && modelData != undefined && modelData.length > 0) { + modelData.forEach(function (nmd) { + if (nmd.pid == md.id) { + nmd.children = []; + findModelChildren(nmd, modelData); + //查找后如果没有,则将children置空 + if (nmd.children.length == 0) { + nmd.children = null; + } + md.children.push(nmd); + } + }); + } +} + +/** + * 响应参数递归遍历参数 + * @param {*} md + * @param {*} modelData + */ +function findRespModelChildren(md, modelData) { + if (modelData != null && modelData != undefined && modelData.length > 0) { + modelData.forEach(function (nmd) { + if (nmd.pid == md.id) { + nmd.children = []; + //本级level+1 + nmd.level = md.level + 1; + findRespModelChildren(nmd, modelData); + //查找后如果没有,则将children置空 + if (nmd.children.length == 0) { + nmd.children = null; + } + md.children.push(nmd); + } + }); + } +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/markdownTransformUS.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/markdownTransformUS.js new file mode 100644 index 0000000..69dc94f --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/markdownTransformUS.js @@ -0,0 +1,358 @@ +import KUtils from '@/core/utils' + +/** + * 根据当前swagger分组实例得到当前组下markdown纯文本 + * @param {*} instance + */ +export default function markdownTextUS(instance) { + var markdownCollections = []; + if (instance != null && instance != undefined) { + createBasicInfo(instance, markdownCollections); + createTagsInfo(instance, markdownCollections); + //增强文档 + createPlusInfo(instance, markdownCollections); + } + return markdownCollections.join('\n'); +} + +/** + * 主动换行 + * @param {*} markdownCollections + */ +function markdownLines(markdownCollections) { + markdownCollections.push('\n'); +} + +/** + * 基本信息 + * @param {*} instance 当前分组实例对象 + * @param {*} markdownCollections markdown文本集合对象 + */ +function createBasicInfo(instance, markdownCollections) { + markdownCollections.push('# ' + instance.title); + markdownLines(markdownCollections); + markdownCollections.push('**Description**:' + instance.description); + markdownLines(markdownCollections); + markdownCollections.push('**HOST**:' + instance.host); + markdownLines(markdownCollections); + markdownCollections.push('**Contacts**:' + instance.contact); + markdownLines(markdownCollections); + markdownCollections.push('**Version**:' + instance.version); + markdownLines(markdownCollections); + markdownCollections.push('**URL**:' + instance.url); + markdownLines(markdownCollections); + //第三方md软件Typora目录格式 + markdownCollections.push('[TOC]'); + markdownLines(markdownCollections); +} + +/** + * 增加增强文档 + * @param {*} instance + * @param {*} markdownCollections + */ +function createPlusInfo(instance, markdownCollections) { + if (KUtils.checkUndefined(instance.markdownFiles)) { + if (instance.markdownFiles.length > 0) { + markdownLines(markdownCollections); + markdownCollections.push('# appendix'); + instance.markdownFiles.forEach(function (md) { + markdownLines(markdownCollections); + //判断是否包含children + if(KUtils.arrNotEmpty(md.children)){ + markdownCollections.push('## ' + md.name); + markdownLines(markdownCollections); + + md.children.forEach(mdfile=>{ + markdownCollections.push('### ' + mdfile.title); + markdownCollections.push(mdfile.content); + }) + } + }) + } + } + +} + +/** + * 遍历tags分组信息 + * @param {*} instance 当前分组实例对象 + * @param {*} markdownCollections markdown文本集合对象 + */ +function createTagsInfo(instance, markdownCollections) { + if (instance.tags != undefined && instance.tags != null) { + markdownCollections.push('\n'); + instance.tags.forEach(function (tag) { + markdownLines(markdownCollections); + markdownCollections.push('# ' + tag.name) + if (tag.childrens != undefined && tag.childrens != null && tag.childrens.length > 0) { + //遍历 + tag.childrens.forEach(function (apiInfo) { + createApiInfo(apiInfo, markdownCollections); + }) + } else { + markdownCollections.push('None') + } + }) + + } +} + +/** + * 遍历接口详情 + * @param {*} apiInfo 接口实例 + * @param {*} markdownCollections markdown文本集合对象 + */ +function createApiInfo(apiInfo, markdownCollections) { + //二级标题 + markdownLines(markdownCollections); + markdownCollections.push('## ' + apiInfo.summary); + markdownLines(markdownCollections); + markdownCollections.push('**url**:`' + apiInfo.showUrl + '`'); + markdownLines(markdownCollections); + markdownCollections.push('**method**:`' + apiInfo.methodType + '`'); + markdownLines(markdownCollections); + markdownCollections.push('**produces**:`' + KUtils.toString(apiInfo.consumes, '*') + '`'); + markdownLines(markdownCollections); + markdownCollections.push('**consumes**:`' + KUtils.toString(apiInfo.produces, '*') + '`'); + markdownLines(markdownCollections); + if(KUtils.strNotBlank(apiInfo.author)){ + markdownCollections.push('**author**:' + KUtils.toString(apiInfo.author, '暂无') + ''); + markdownLines(markdownCollections); + } + markdownCollections.push('**Note**:' + KUtils.toString(apiInfo.description, '暂无') + ''); + //判断是否有请求示例 + if (KUtils.checkUndefined(apiInfo.requestValue)) { + markdownLines(markdownCollections); + markdownCollections.push('**Example**:'); + markdownLines(markdownCollections); + markdownCollections.push('```javascript'); + markdownCollections.push(apiInfo.requestValue); + markdownCollections.push('```'); + } + //请求参数 + createApiRequestParameters(apiInfo, markdownCollections); + //响应状态 + createApiResponseStatus(apiInfo, markdownCollections); + //响应Schema-参数 + //判断响应参数 + createApiResponseParameters(apiInfo, markdownCollections); + +} +/** + * 响应状态 + * @param {*} apiInfo + * @param {*} markdownCollections + */ +function createApiResponseStatus(apiInfo, markdownCollections) { + if (KUtils.checkUndefined(apiInfo.responseCodes) && apiInfo.responseCodes.length > 0) { + markdownLines(markdownCollections); + markdownCollections.push('**Status**:'); + markdownLines(markdownCollections); + //拥有参数 + markdownCollections.push('| code | description | schema |'); + markdownCollections.push('| -------- | -------- | ----- | '); + apiInfo.responseCodes.forEach(function (respcode) { + markdownCollections.push('|' + KUtils.toString(respcode.code, '') + '|' + KUtils.toString(respcode.description, '') + '|' + KUtils.toString(respcode.schema, '') + '|') + }) + } +} + +/** + * 响应参数拥有响应头 + * @param {*} responseHeaderParameters + * @param {*} markdownCollections + */ +function createApiResponseHeaderParams(responseHeaderParameters, markdownCollections) { + if (KUtils.checkUndefined(responseHeaderParameters)) { + if (responseHeaderParameters.length > 0) { + markdownLines(markdownCollections); + markdownCollections.push('**Response Header**:'); + markdownLines(markdownCollections); + //拥有参数 + markdownCollections.push('| name | description | type |'); + markdownCollections.push('| -------- | -------- | ----- | '); + responseHeaderParameters.forEach(function (respHeader) { + markdownCollections.push('|' + KUtils.toString(respHeader.name, '') + '|' + KUtils.toString(respHeader.description, '') + '|' + KUtils.toString(respHeader.type, '') + '|'); + }) + } + } +} + +/** + * 响应参数 + * @param {*} apiInfo + * @param {*} markdownCollections + * @param {*} singleFlag + */ +function createApiResponseParameters(apiInfo, markdownCollections) { + //判断是否多个schema + if (apiInfo.multipartResponseSchema) { + var multipartData = apiInfo.multipCodeDatas; + if (KUtils.arrNotEmpty(multipartData)) { + multipartData.forEach(function (resp) { + markdownLines(markdownCollections); + markdownCollections.push('**code-' + KUtils.toString(resp.code, '') + '**:'); + createApiResponseSingleParam(resp, markdownCollections); + }) + } + } else { + //单个 + createApiResponseSingleParam(apiInfo.multipData, markdownCollections); + } +} +/** + * 单个响应状态 + * @param {*} resp + * @param {*} markdownCollections + */ +function createApiResponseSingleParam(resp, markdownCollections) { + //判断是否有响应Header + createApiResponseHeaderParams(resp.responseHeaderParameters, markdownCollections); + //数据 + markdownLines(markdownCollections); + markdownCollections.push('**Response Params**:'); + markdownLines(markdownCollections); + if (KUtils.arrNotEmpty(resp.data)) { + //拥有参数 + markdownCollections.push('| name | description | type | schema |'); + markdownCollections.push('| -------- | -------- | ----- |----- | '); + resp.data.forEach(function (param) { + param.level = 1; + markdownCollections.push('|' + getMdTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepMdTableByResponseParameter(param.children, markdownCollections, (param.level + 1)); + }) + } else { + markdownCollections.push('None'); + } + //判断是否拥有响应示例 + markdownLines(markdownCollections); + markdownCollections.push('**Response Example**:'); + if (resp.responseBasicType) { + markdownCollections.push('```text'); + markdownCollections.push(resp.responseText); + markdownCollections.push('```'); + } else { + markdownCollections.push('```javascript'); + markdownCollections.push(resp.responseValue); + markdownCollections.push('```'); + } + +} + + +/** + * 请求参数 + * @param {*} apiInfo + * @param {*} markdownCollections + */ +function createApiRequestParameters(apiInfo, markdownCollections) { + + let reqParameters = apiInfo.reqParameters; + markdownLines(markdownCollections); + markdownCollections.push('**Params**:'); + //判断是否拥有请求参数 + if (KUtils.arrNotEmpty(reqParameters)) { + markdownLines(markdownCollections); + //拥有参数 + markdownCollections.push('| name | description | in | require | type | schema |'); + markdownCollections.push('| -------- | -------- | ----- | -------- | -------- | ------ |'); + //级联表格,在表格需要最佳空格缩进符号 + deepMdTableByRequestParameter(reqParameters, markdownCollections, 1); + } else { + markdownLines(markdownCollections); + markdownCollections.push('暂无'); + } +} + +/** + * 递归循环遍历响应参数得到markdown表格 + * @param {*} parameters + * @param {*} markdownCollections + */ +function deepMdTableByResponseParameter(parameters, markdownCollections, level) { + if (parameters != null && parameters != undefined && parameters.length > 0) { + parameters.forEach(function (param) { + param.level = level; + markdownCollections.push('|' + getMdTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepMdTableByResponseParameter(param.children, markdownCollections, (param.level + 1)); + }) + } + +} + + +/** + * 递归循环遍历参数得到markdown表格 + * @param {*} parameters + * @param {*} markdownCollections + */ +function deepMdTableByRequestParameter(parameters, markdownCollections, level) { + if (parameters != null && parameters != undefined && parameters.length > 0) { + parameters.forEach(function (param) { + //赋值一个level + param.level = level; + markdownCollections.push('|' + getMdTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.in, '') + '|' + KUtils.toString(param.require, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepMdTableByRequestParameter(param.children, markdownCollections, (param.level + 1)); + }) + } + +} + + +/** + * 根据参数级别获取名称 + * @param {*} param + */ +function getMdTableByLevel(param) { + var spaceArr = []; + for (var i = 1; i < param.level; i++) { + spaceArr.push('  ') + } + var tmpName = spaceArr.join('') + param.name; + return tmpName; +} + +/** + * 递归遍历子元素 + * @param {*} md + * @param {*} modelData + */ +function findModelChildren(md, modelData) { + if (modelData != null && modelData != undefined && modelData.length > 0) { + modelData.forEach(function (nmd) { + if (nmd.pid == md.id) { + nmd.children = []; + findModelChildren(nmd, modelData); + //查找后如果没有,则将children置空 + if (nmd.children.length == 0) { + nmd.children = null; + } + md.children.push(nmd); + } + }); + } +} + +/** + * 响应参数递归遍历参数 + * @param {*} md + * @param {*} modelData + */ +function findRespModelChildren(md, modelData) { + if (modelData != null && modelData != undefined && modelData.length > 0) { + modelData.forEach(function (nmd) { + if (nmd.pid == md.id) { + nmd.children = []; + //本级level+1 + nmd.level = md.level + 1; + findRespModelChildren(nmd, modelData); + //查找后如果没有,则将children置空 + if (nmd.children.length == 0) { + nmd.children = null; + } + md.children.push(nmd); + } + }); + } +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/officeDocTemplate.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/officeDocTemplate.js new file mode 100644 index 0000000..dba3d7a --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/officeDocTemplate.js @@ -0,0 +1,577 @@ +export function getDocumentVueTemplates(title, resumecss, dataStr) { + return ` + + + + + ${title} + + + + +
+
+ + + + +
+

{{instance.title}}

+
+
+ + +

简介

+
+ +
+ +
+
+ + +

作者

+
+ +
+ +
+
+ + +

版本

+
+ +
+ +
+
+ + +

host

+
+ +
+ +
+
+ + +

basePath

+
+ +
+ +
+
+ + +

服务Url

+
+ +
+ +
+
+ + +

分组名称

+
+ +
+ +
+
+ + +

分组url

+
+ +
+ +
+
+ + +

分组location

+
+ +
+ +
+
+ + +

接口统计信息

+
+ + + + {{param.method}} + + + {{param.count}} + + + + +
+
+
+
+ + + + + 隐藏 + + + + + + + + +

{{tag.name}}

+
+ + + + + {{ api.summary }} + + + {{ api.summary }} + + + +
+ {{ api.methodType }} + {{ api.showUrl }} +
+
+ + + + 请求数据类型 + {{ api.consumes }} + + + + + 响应数据类型 + {{ api.produces }} + + + +
+
+
+ 开发者 +
+
+
+ +
+
+ 接口描述 +
+
+
+ +
+
+ 请求示例 +
+

+              
+
+ 请求参数 +
+ + + + + + + + +
+ 响应状态 +
+ + + + + +
+ + + + +
+
+ 响应Header +
+ + +
+ +
+ 响应参数 +
+ + +
+ 响应示例 +
+
+ {{ resp.responseText }} +
+

+                    
+                    
+                  
+
+
+
+ +
+
+ 响应Header +
+ + +
+ +
+ 响应参数 +
+ + +
+ 响应示例 +
+
+ {{ api.multipData.responseText }} +
+

+              
+ + + +
+
+
+ +
+
+ + + + + ` +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/officeDocTemplateUS.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/officeDocTemplateUS.js new file mode 100644 index 0000000..e5d60c9 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/officeDocTemplateUS.js @@ -0,0 +1,577 @@ +export function getDocumentVueTemplatesUS(title, resumecss, dataStr) { + return ` + + + + + ${title} + + + + +
+
+ + + + +
+

{{instance.title}}

+
+
+ + +

Description

+
+ +
+ +
+
+ + +

Author

+
+ +
+ +
+
+ + +

Version

+
+ +
+ +
+
+ + +

Host

+
+ +
+ +
+
+ + +

basePath

+
+ +
+ +
+
+ + +

serviceUrl

+
+ +
+ +
+
+ + +

GroupName

+
+ +
+ +
+
+ + +

GroupUrl

+
+ +
+ +
+
+ + +

GroupLocation

+
+ +
+ +
+
+ + +

count

+
+ + + + {{param.method}} + + + {{param.count}} + + + + +
+
+
+
+ + + + + Hide + + + + + + + + +

{{tag.name}}

+
+ + + + + {{ api.summary }} + + + {{ api.summary }} + + + +
+ {{ api.methodType }} + {{ api.showUrl }} +
+
+ + + + produces + {{ api.consumes }} + + + + + consumes + {{ api.produces }} + + + +
+
+
+ Author +
+
+
+ +
+
+ Note +
+
+
+ +
+
+ Example +
+

+              
+
+ Params +
+ + + + + + + + +
+ Status +
+ + + + + +
+ + + + +
+
+ Response Header +
+ + +
+ +
+ Response Params +
+ + +
+ Response Example +
+
+ {{ resp.responseText }} +
+

+                    
+                    
+                  
+
+
+
+ +
+
+ Response Header +
+ + +
+ +
+ Response Params +
+ + +
+ Response Example +
+
+ {{ api.multipData.responseText }} +
+

+              
+ + + +
+
+
+ +
+
+ + + + + ` +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/wordTransform.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/wordTransform.js new file mode 100644 index 0000000..e313efb --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/officeDocument/wordTransform.js @@ -0,0 +1,563 @@ +import KUtils from '@/core/utils' +import marked from 'marked' + +marked.setOptions({ + gfm: true, + tables: true, + breaks: false, + pedantic: false, + sanitize: false, + smartLists: true, + smartypants: false +}) + +/** + * 根据当前swagger分组实例得到当前组下word文本 + * @param {*} instance + */ +export default function wordText(instance) { + var markdownCollections = []; + if (instance != null && instance != undefined) { + createWordHeader(markdownCollections); + createWordBasicInfo(instance, markdownCollections); + createWordTagsInfo(instance, markdownCollections); + //增强文档 + createWordPlusInfo(instance, markdownCollections); + createWordFooter(markdownCollections); + } + return markdownCollections.join('\n'); +} + +/** + * 主动换行 + * @param {*} markdownCollections + */ +function wordLines(markdownCollections) { + markdownCollections.push('\n'); +} + +function createWordHeader(markdownCollections){ + var wordHeader=` + + + + + 导出Swagger文档到Word + + + + +
` + markdownCollections.push(wordHeader); +} + +function createWordFooter(markdownCollections){ + markdownCollections.push('
'); +} + +/** + * 基本信息 + * @param {*} instance 当前分组实例对象 + * @param {*} markdownCollections markdown文本集合对象 + */ +function createWordBasicInfo(instance, markdownCollections) { + markdownCollections.push('

1.项目说明

'); + markdownCollections.push('
'); + + markdownCollections.push('
标题:'+instance.title+'
'); + markdownCollections.push('
'); + + + markdownCollections.push('
简介:'+instance.description+'
'); + markdownCollections.push('
'); + + markdownCollections.push('
作者:'+instance.contact+'
'); + markdownCollections.push('
'); + + markdownCollections.push('
HOST:'+instance.host+'
'); + markdownCollections.push('
'); + + markdownCollections.push('
basePath:'+instance.basePath+'
'); + markdownCollections.push('
'); + + markdownCollections.push('
termsOfService:'+instance.termsOfService+'
'); + markdownCollections.push('
'); + + markdownCollections.push('
联系人:'+instance.contact+'
') + markdownCollections.push('
'); + + markdownCollections.push('
Version:'+instance.version+'
'); + markdownCollections.push('
'); + + markdownCollections.push('
GroupName:'+instance.name+'
'); + markdownCollections.push('
'); + + markdownCollections.push('
分组Url:'+instance.url+'
'); + markdownCollections.push('
'); + + markdownCollections.push('
分组Location:'+instance.location+'
'); + markdownCollections.push('
'); + + markdownCollections.push('
'); +} + +/** + * 增加增强文档 + * @param {*} instance + * @param {*} markdownCollections + */ +function createWordPlusInfo(instance, markdownCollections) { + if (KUtils.checkUndefined(instance.markdownFiles)) { + if(KUtils.arrNotEmpty(instance.markdownFiles)){ + //if (instance.markdownFiles.length > 0) { + wordLines(markdownCollections); + //markdownCollections.push('# 附录'); + markdownCollections.push('

3.附录

') + instance.markdownFiles.forEach(function (md,mdIndex) { + wordLines(markdownCollections); + var mindex=mdIndex+1; + var mdTitle='3.'+mindex+md.name; + markdownCollections.push('

'+mdTitle+'

'); + if(KUtils.arrNotEmpty(md.children)){ + md.children.forEach(mdfile=>{ + markdownCollections.push('

'+mdfile.title+'

'); + markdownCollections.push('
'); + //判断非空 + if(KUtils.strNotBlank(mdfile.content)){ + markdownCollections.push(marked(mdfile.content)); + } + markdownCollections.push('
'); + }) + } + }) + } + } + +} + +/** + * 遍历tags分组信息 + * @param {*} instance 当前分组实例对象 + * @param {*} markdownCollections markdown文本集合对象 + */ +function createWordTagsInfo(instance, markdownCollections) { + if (instance.tags != undefined && instance.tags != null) { + markdownCollections.push('\n'); + markdownCollections.push('

2.接口列表

') + instance.tags.forEach(function (tag,index) { + var docIdex=parseInt(index)+1; + var docParent='2.'+docIdex; + var tagTitle=docParent+tag.name; + markdownCollections.push('

'+tagTitle+'

'); + wordLines(markdownCollections); + if (tag.childrens != undefined && tag.childrens != null && tag.childrens.length > 0) { + //遍历 + tag.childrens.forEach(function (apiInfo,aIndex) { + var apiIndex=aIndex+1; + createWrodApiInfo(apiInfo, markdownCollections,docParent,apiIndex); + }) + } else { + markdownCollections.push('暂无接口文档') + } + }) + + } +} + +/** + * 遍历接口详情 + * @param {*} apiInfo 接口实例 + * @param {*} markdownCollections markdown文本集合对象 + */ +function createWrodApiInfo(apiInfo, markdownCollections,parentDoc,apiIndex) { + //二级标题 + wordLines(markdownCollections); + var h3Title=parentDoc+'.'+apiIndex+apiInfo.summary; + markdownCollections.push('

'+h3Title+'

'); + markdownCollections.push('
'); + + markdownCollections.push('
接口地址
') + markdownCollections.push('
'+apiInfo.methodType+'  '+apiInfo.showUrl+'
'); + + markdownCollections.push('
接口描述
'); + markdownCollections.push('
'+KUtils.toString(apiInfo.description, '暂无')+'
'); + + markdownCollections.push('
请求数据类型
'); + markdownCollections.push('
'+KUtils.toString(apiInfo.consumes, '*')+'
') + + markdownCollections.push('
响应数据类型
'); + markdownCollections.push('
'+KUtils.toString(apiInfo.produces, '*')+'
') + + if(KUtils.strNotBlank(apiInfo.author)){ + markdownCollections.push('
开发者
'); + markdownCollections.push('
'+KUtils.toString(apiInfo.author, '暂无')+'
'); + } + //判断是否有请求示例 + if (KUtils.checkUndefined(apiInfo.requestValue)) { + markdownCollections.push('
请求示例
'); + + markdownCollections.push('
'); + //需要判断是否是xml请求 + markdownCollections.push('
');
+    if(apiInfo.xmlRequest){
+      //xml请求,不做处理
+      markdownCollections.push(apiInfo.requestValue);
+    }else{
+      markdownCollections.push(wordJsonFormatter(apiInfo.requestValue));
+    }
+
+    markdownCollections.push('
'); + markdownCollections.push('
'); + } + + //请求参数 + createWordApiRequestParameters(apiInfo, markdownCollections); + //响应状态 + createWordApiResponseStatus(apiInfo, markdownCollections); + //响应Schema-参数 + //判断响应参数 + createWordApiResponseParameters(apiInfo, markdownCollections); + + markdownCollections.push('
'); +} +/** + * 响应状态 + * @param {*} apiInfo + * @param {*} markdownCollections + */ +function createWordApiResponseStatus(apiInfo, markdownCollections) { + if (KUtils.checkUndefined(apiInfo.responseCodes) && apiInfo.responseCodes.length > 0) { + wordLines(markdownCollections); + markdownCollections.push('
响应状态

'); + markdownCollections.push('
'); + + markdownCollections.push(''); + //表头 + markdownCollections.push('') + //内容 + markdownCollections.push(''); + wordLines(markdownCollections); + //拥有参数 + apiInfo.responseCodes.forEach(function (respcode) { + markdownCollections.push(''); + markdownCollections.push(''); + markdownCollections.push(''); + markdownCollections.push(''); + //markdownCollections.push('|' + KUtils.toString(respcode.code, '') + '|' + KUtils.toString(respcode.description, '') + '|' + KUtils.toString(respcode.schema, '') + '|') + markdownCollections.push(''); + }) + + markdownCollections.push(''); + markdownCollections.push('
状态码说明schema
'+KUtils.toString(respcode.code, '')+''+KUtils.toString(respcode.description, '')+''+KUtils.toString(respcode.schema, '')+'

'); + + markdownCollections.push('
'); + } +} + +/** + * 响应参数拥有响应头 + * @param {*} responseHeaderParameters + * @param {*} markdownCollections + */ +function createWordApiResponseHeaderParams(responseHeaderParameters, markdownCollections) { + if (KUtils.checkUndefined(responseHeaderParameters)) { + if(KUtils.arrNotEmpty(responseHeaderParameters)){ + //if (responseHeaderParameters.length > 0) { + wordLines(markdownCollections); + markdownCollections.push('
响应Header
') + wordLines(markdownCollections); + //拥有参数 + markdownCollections.push('
'); + markdownCollections.push(''); + //表头 + markdownCollections.push(''); + //内容 + markdownCollections.push(''); + responseHeaderParameters.forEach(function (respHeader) { + markdownCollections.push('') + markdownCollections.push(''); + markdownCollections.push(''); + markdownCollections.push(''); + //markdownCollections.push('|' + KUtils.toString(respHeader.name, '') + '|' + KUtils.toString(respHeader.description, '') + '|' + KUtils.toString(respHeader.type, '') + '|'); + markdownCollections.push('') + }) + markdownCollections.push(''); + markdownCollections.push('
参数名称参数说明类型
'+KUtils.toString(respHeader.name, '')+''+KUtils.toString(respHeader.description, '')+''+KUtils.toString(respHeader.type, '')+'
'); + markdownCollections.push('
'); + + } + } +} + +/** + * 响应参数 + * @param {*} apiInfo + * @param {*} markdownCollections + * @param {*} singleFlag + */ +function createWordApiResponseParameters(apiInfo, markdownCollections) { + //判断是否多个schema + if (apiInfo.multipartResponseSchema) { + var multipartData = apiInfo.multipCodeDatas; + if (KUtils.arrNotEmpty(multipartData)) { + multipartData.forEach(function (resp) { + wordLines(markdownCollections); + markdownCollections.push('
响应状态码-'+KUtils.toString(resp.code, '')+'
'); + //markdownCollections.push('**响应状态码-' + KUtils.toString(resp.code, '') + '**:'); + createWordApiResponseSingleParam(resp, markdownCollections); + }) + } + } else { + //单个 + createWordApiResponseSingleParam(apiInfo.multipData, markdownCollections); + } +} +/** + * 单个响应状态 + * @param {*} resp + * @param {*} markdownCollections + */ +function createWordApiResponseSingleParam(resp, markdownCollections) { + //判断是否有响应Header + createWordApiResponseHeaderParams(resp.responseHeaderParameters, markdownCollections); + //数据 + wordLines(markdownCollections); + markdownCollections.push('
响应参数
'); + //markdownCollections.push('**响应参数**:'); + wordLines(markdownCollections); + markdownCollections.push('
'); + markdownCollections.push(''); + //表头 + markdownCollections.push(''); + markdownCollections.push('') + if (KUtils.arrNotEmpty(resp.data)) { + //拥有参数 + resp.data.forEach(function (param) { + param.level = 1; + markdownCollections.push('') + markdownCollections.push(''); + markdownCollections.push(''); + markdownCollections.push(''); + markdownCollections.push(''); + markdownCollections.push(''); + //markdownCollections.push('|' + getWordTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepWordTableByResponseParameter(param.children, markdownCollections, (param.level + 1)); + }) + } else { + //markdownCollections.push('暂无'); + markdownCollections.push('') + } + markdownCollections.push('') + markdownCollections.push('
参数名称参数说明类型schema
'+getWordTableByLevel(param)+''+KUtils.toString(param.description, '')+''+KUtils.toString(param.type, '')+''+KUtils.toString(param.schemaValue, '')+'
暂无
'); + markdownCollections.push('
'); + //判断是否拥有响应示例 + wordLines(markdownCollections); + markdownCollections.push('
响应示例
') + markdownCollections.push('
');
+  if (resp.responseBasicType) {
+    markdownCollections.push(resp.responseText)
+  } else {
+    markdownCollections.push(wordJsonFormatter(resp.responseValue))
+  }
+  markdownCollections.push('
'); + +} + + +/** + * 请求参数 + * @param {*} apiInfo + * @param {*} markdownCollections + */ +function createWordApiRequestParameters(apiInfo, markdownCollections) { + + let reqParameters = apiInfo.reqParameters; + wordLines(markdownCollections); + markdownCollections.push('
请求参数

') + markdownCollections.push('
'); + markdownCollections.push(''); + //表头 + markdownCollections.push(''); + markdownCollections.push(''); + //判断是否拥有请求参数 + if(KUtils.arrNotEmpty(reqParameters)){ + //if (reqParameters.length > 0) { + //级联表格,在表格需要最佳空格缩进符号 + deepWordTableByRequestParameter(reqParameters, markdownCollections, 1); + }else{ + //无参数 + markdownCollections.push(''); + } + markdownCollections.push(''); + markdownCollections.push('
参数名称参数说明请求类型必须数据类型schema
暂无
') + markdownCollections.push('
'); +} + +/** + * 递归循环遍历响应参数得到markdown表格 + * @param {*} parameters + * @param {*} markdownCollections + */ +function deepWordTableByResponseParameter(parameters, markdownCollections, level) { + if (parameters != null && parameters != undefined && parameters.length > 0) { + parameters.forEach(function (param) { + param.level = level; + markdownCollections.push('') + markdownCollections.push(''+getWordTableByLevel(param)+''); + markdownCollections.push(''+KUtils.toString(param.description, '')+''); + markdownCollections.push(''+KUtils.toString(param.type, '')+''); + markdownCollections.push(''+KUtils.toString(param.schemaValue, '')+''); + markdownCollections.push(''); + //markdownCollections.push('|' + getWordTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepWordTableByResponseParameter(param.children, markdownCollections, (param.level + 1)); + }) + } + +} + + +/** + * 递归循环遍历参数得到markdown表格 + * @param {*} parameters + * @param {*} markdownCollections + */ +function deepWordTableByRequestParameter(parameters, markdownCollections, level) { + if (parameters != null && parameters != undefined && parameters.length > 0) { + parameters.forEach(function (param) { + //赋值一个level + param.level = level; + markdownCollections.push(''); + markdownCollections.push(''+getWordTableByLevel(param)+''); + markdownCollections.push(''+KUtils.toString(param.description, '')+''); + markdownCollections.push(''+KUtils.toString(param.in, '')+''); + markdownCollections.push(''+KUtils.toString(param.require, '')+''); + markdownCollections.push(''+KUtils.toString(param.type, '') +''); + markdownCollections.push(''+KUtils.toString(param.schemaValue, '') +''); + markdownCollections.push(''); + //markdownCollections.push('|' + getWordTableByLevel(param) + '|' + KUtils.toString(param.description, '') + '|' + KUtils.toString(param.in, '') + '|' + KUtils.toString(param.require, '') + '|' + KUtils.toString(param.type, '') + '|' + KUtils.toString(param.schemaValue, '') + '|') + deepWordTableByRequestParameter(param.children, markdownCollections, (param.level + 1)); + }) + } + +} + + +/** + * 根据参数级别获取名称 + * @param {*} param + */ +function getWordTableByLevel(param) { + var spaceArr = []; + for (var i = 1; i < param.level; i++) { + spaceArr.push(' ') + } + var tmpName = spaceArr.join('') + param.name; + return tmpName; +} + +function wordJsonFormatter(json){ + try { + if (typeof json != "string") { + json = JSON.stringify(json, undefined, 2); + } + json = json + .replace(/&/g, "&") + .replace(//g, ">"); + return json.replace( + /("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, + function(match) { + var cls = "number"; + if (/^"/.test(match)) { + if (/:$/.test(match)) { + cls = "key"; + } else { + cls = "string"; + } + } else if (/true|false/.test(match)) { + cls = "boolean"; + } else if (/null/.test(match)) { + cls = "null"; + } + return '' + match + ""; + } + ); + } catch (error) { + return json; + } +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/utils/Knife4jUtils.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/utils/Knife4jUtils.js new file mode 100644 index 0000000..21e6b2f --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/utils/Knife4jUtils.js @@ -0,0 +1,43 @@ +/** + * 根据url菜单查找组件名称,用于打开Tab选项卡 + * @param {*} path + * @param {*} menuData + */ +export function findComponentsByPath(path, menuData) { + var tmpComp = null; + for (var i = 0; i < menuData.length; i++) { + if (menuData[i].path == path) { + tmpComp = menuData[i]; + break; + } + if (tmpComp == null) { + var chds = menuData[i].children; + if (chds != undefined && chds !== null) { + tmpComp = findComponentsByPath(path, chds); + } + } + } + return tmpComp; +} + +/** + * 根据菜单主键key查找菜单项 + * @param {*} key + * @param {*} menuData + */ +export function findMenuByKey(key, menuData) { + var tmpComp = null; + for (var i = 0; i < menuData.length; i++) { + if (menuData[i].key == key) { + tmpComp = menuData[i]; + break; + } + if (tmpComp == null) { + var chds = menuData[i].children; + if (chds != undefined && chds !== null) { + tmpComp = findMenuByKey(key, chds); + } + } + } + return tmpComp; +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/utils/pathTools.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/utils/pathTools.js new file mode 100644 index 0000000..06ce17d --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/utils/pathTools.js @@ -0,0 +1,7 @@ +// /userinfo/2144/id => ['/userinfo','/useinfo/2144,'/userindo/2144/id'] +export function urlToList(url) { + const urllist = url.split("/").filter(i => i); + return urllist.map((urlItem, index) => { + return `/${urllist.slice(0, index + 1).join("/")}`; + }); +} diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/utils/vkbeautify.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/utils/vkbeautify.js new file mode 100644 index 0000000..fcb7524 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/components/utils/vkbeautify.js @@ -0,0 +1,374 @@ +/** + * vkBeautify - javascript plugin to pretty-print or minify text in XML, JSON, CSS and SQL formats. + * https://github.com/aabluedragon/vkbeautify + * Copyright (c) 2012 Vadim Kiryukhin + * vkiryukhin @ gmail.com + * http://www.eslinstructor.net/vkbeautify/ + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Pretty print + * + * vkbeautify.xml(text [,indent_pattern]); + * vkbeautify.json(text [,indent_pattern]); + * vkbeautify.css(text [,indent_pattern]); + * vkbeautify.sql(text [,indent_pattern]); + * + * @text - String; text to beatufy; + * @indent_pattern - Integer | String; + * Integer: number of white spaces; + * String: character string to visualize indentation ( can also be a set of white spaces ) + * Minify + * + * vkbeautify.xmlmin(text [,preserve_comments]); + * vkbeautify.jsonmin(text); + * vkbeautify.cssmin(text [,preserve_comments]); + * vkbeautify.sqlmin(text); + * + * @text - String; text to minify; + * @preserve_comments - Bool; [optional]; + * Set this flag to true to prevent removing comments from @text ( minxml and mincss functions only. ) + * + * Examples: + * vkbeautify.xml(text); // pretty print XML + * vkbeautify.json(text, 4 ); // pretty print JSON + * vkbeautify.css(text, '. . . .'); // pretty print CSS + * vkbeautify.sql(text, '----'); // pretty print SQL + * + * vkbeautify.xmlmin(text, true);// minify XML, preserve comments + * vkbeautify.jsonmin(text);// minify JSON + * vkbeautify.cssmin(text);// minify CSS, remove comments ( default ) + * vkbeautify.sqlmin(text);// minify SQL + * + */ +function createShiftArr(step) { + + var space = ' '; + + if (isNaN(parseInt(step))) { // argument is string + space = step; + } else { // argument is integer + switch (step) { + case 1: + space = ' '; + break; + case 2: + space = ' '; + break; + case 3: + space = ' '; + break; + case 4: + space = ' '; + break; + case 5: + space = ' '; + break; + case 6: + space = ' '; + break; + case 7: + space = ' '; + break; + case 8: + space = ' '; + break; + case 9: + space = ' '; + break; + case 10: + space = ' '; + break; + case 11: + space = ' '; + break; + case 12: + space = ' '; + break; + } + } + + var shift = ['\n']; // array of shifts + for (var ix = 0; ix < 100; ix++) { + shift.push(shift[ix] + space); + } + return shift; +} + +function vkbeautify() { + this.step = ' '; // 4 spaces + this.shift = createShiftArr(this.step); +}; + +vkbeautify.prototype.xml = function (text, step) { + + var ar = text.replace(/>\s{0,}<") + .replace(//g, "") + .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns'); + return str.replace(/>\s{0,}<"); +} + +vkbeautify.prototype.jsonmin = function (text) { + + if (typeof JSON === 'undefined') return text; + + return JSON.stringify(JSON.parse(text), null, 0); + +} + +vkbeautify.prototype.cssmin = function (text, preserveComments) { + + var str = preserveComments ? text : + text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g, ""); + + return str.replace(/\s{1,}/g, ' ') + .replace(/\{\s{1,}/g, "{") + .replace(/\}\s{1,}/g, "}") + .replace(/\;\s{1,}/g, ";") + .replace(/\/\*\s{1,}/g, "/*") + .replace(/\*\/\s{1,}/g, "*/"); +} + +vkbeautify.prototype.sqlmin = function (text) { + return text.replace(/\s{1,}/g, " ").replace(/\s{1,}\(/, "(").replace(/\s{1,}\)/, ")"); +} + +//module.exports = new vkbeautify(); +export default vkbeautify; diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/Environment.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/Environment.js new file mode 100644 index 0000000..222687a --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/Environment.js @@ -0,0 +1,200 @@ +import localStore from '@/store/local' +import constant from '@/store/constants' +import KUtils from '@/core/utils'; +import GlobalIndexDbCache from '@/core/GlobalIndexDbCache' + +var KEnvironment =function(settings){ + //window.console.log(settings) + this.groupid=settings.groupid||'afterScriptGroup'; + //执行命令的缓存对象 + this.commands=[]; + this.allgroupids=settings.allgroupids||[]; + this.response=settings.response||{ + data:{}, + headers:{} + }; + this.global={ + /** + * 设置当前逻辑分组下全局Header + * @param {*} name Header名称 + * @param {*} value Header值 + */ + setHeader:(name,value)=>{ + this.global.setCommon(name,value,'header',false); + }, + /** + * 设置所有逻辑分组下全局Header + * @param {*} name Header名称 + * @param {*} value Header值 + */ + setAllHeader:(name,value)=>{ + this.global.setCommon(name,value,'header',true); + }, + /** + * 当前逻辑分组下全局设置query类型的参数 + * @param {*} name 参数名称 + * @param {*} value 参数值 + */ + setParameter:(name,value)=>{ + this.global.setCommon(name,value,'query',false); + }, + /** + * 所有逻辑分组下全局设置query类型的参数 + * @param {*} name 参数名称 + * @param {*} value 参数值 + */ + setAllParameter:(name,value)=>{ + this.global.setCommon(name,value,'query',true); + }, + setCommon:(name,value,type,all)=>{ + //延时执行该方法 + //this.global.executeAsyncCommon(name,value,type,all); + this.global.cacheCommand(name,value,type,all); + /* window.setTimeout(()=>{ + this.global.executeAsyncCommon(name,value,type,all) + },250) */ + }, + cacheCommand:(name,value,type,all)=>{ + //将所有命令缓存 + this.commands.push({ + name:name, + value:value, + type:type, + all:all + }) + }, + action:()=>{ + //window.console.info("缓存cache"); + //window.console.info(this.commands); + if(this.commands!=null&&this.commands.length>0){ + let allCommands=this.commands; + //命令不为空 + let key=this.groupid; + let allGroup=this.allgroupids; + //window.console.log(allGroup) + localStore.getItem(constant.globalParameter).then(val=>{ + //window.console.log(val); + let dbcache=new GlobalIndexDbCache(constant.globalParameter,val,allGroup,allCommands,key); + //保存 + dbcache.save(); + + }) + + } + }, + executeAsyncCommon:(name,value,type,all)=>{ + //window.console.log('setCommon,name:'+name+',value:'+value+',type:'+type); + var key=this.groupid; + var pkid=name+type; + if(all){ + var allGroup=this.allgroupids; + //更新所有逻辑分组下的全局参数 + localStore.getItem(constant.globalParameter).then(val => { + if(KUtils.checkUndefined(val)){ + var tmpVal={}; + allGroup.forEach(gid=>{ + var tmpValue=val[gid]; + if(KUtils.checkUndefined(tmpValue)||KUtils.arrEmpty(tmpValue)){ + //空的,直接push + tmpValue=[]; + tmpValue.push({ + name: name, + value: value, + in: type, + pkid: pkid + }) + tmpVal[gid]=tmpValue; + }else{ + //不为空,更新 + //1.是否包含该参数,包含则更新,不包含新增 + var exlength=tmpValue.filter(p=>p.pkid==pkid && p.in==type).length; + if(exlength==0){ + //不存在 + tmpValue.push({ + name: name, + value: value, + in: type, + pkid: pkid + }) + }else{ + tmpValue.forEach(gp=>{ + if(gp.in==type && gp.pkid==pkid){ + gp.value=value; + } + }) + } + tmpVal[gid]=tmpValue; + } + window.console.log("更新value") + window.console.log(tmpVal) + }) + //存储 + localStore.setItem(constant.globalParameter, tmpVal); + }else{ + var tmpGlobalParams=[]; + tmpGlobalParams.push({ + name: name, + value: value, + in: type, + pkid: pkid + }) + var groupVal={}; + allGroup.forEach(gid=>{ + groupVal[gid]=tmpGlobalParams; + }) + //存储 + localStore.setItem(constant.globalParameter, groupVal); + } + }) + }else{ + //设置当前逻辑分组的全局参数 + localStore.getItem(constant.globalParameter).then(val => { + //存在全局参数 + var groupParameters=[]; + var tmpVal={}; + if(KUtils.checkUndefined(val)){ + for(var gid in val){ + if(gid==key){ + groupParameters=val[gid]; + }else{ + tmpVal[gid]=val[gid]; + } + } + var exlength=groupParameters.filter(p=>p.pkid==pkid && p.in==type).length; + if(exlength==0){ + //不存在 + groupParameters.push({ + name: name, + value: value, + in: type, + pkid: pkid + }) + }else{ + groupParameters.forEach(gp=>{ + if(gp.in==type && gp.pkid==pkid){ + gp.value=value; + } + }) + } + tmpVal[key]=groupParameters; + //存储 + localStore.setItem(constant.globalParameter, tmpVal); + }else{ + groupParameters.push({ + name: name, + value: value, + in: type, + pkid: pkid + }) + } + tmpVal[key]=groupParameters; + // window.console.log(tmpVal) + //存储 + localStore.setItem(constant.globalParameter, tmpVal); + }) + } + } + } +}; + +export default KEnvironment; \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/GlobalIndexDbCache.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/GlobalIndexDbCache.js new file mode 100644 index 0000000..efca3ab --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/GlobalIndexDbCache.js @@ -0,0 +1,92 @@ +import localStore from '@/store/local' +import KUtils from '@/core/utils'; + +/** + * 浏览器IndexDb针对Knife4j的全局参数存储操作类 + * @param {*} cacheKey 存储键值 + * @param {*} cacheValue 缓存值 + * @param {*} allGroups 分组对象 + * @param {*} commands 命令分组 + */ +var GlobalIndexDbCache =function(cacheKey,cacheValue,allGroups,commands,groupId){ + this.groupId=groupId; + this.cacheKey=cacheKey; + this.allGroups=allGroups; + this.commands=commands; + //目标值,最终store存储的值 + this.targetValue=cacheValue||{}; + this.init(); +} + +GlobalIndexDbCache.prototype={ + init(){ + //从当前的缓存值中初始化 + //window.console.log("初始化"); + //window.console.log(this.cacheKey) + //window.console.log("tag") + //window.console.log(this.targetValue) + //判断执行命令是否为空 + if(KUtils.arrNotEmpty(this.commands)){ + //直接更新 + this.commands.forEach(cmd=>{ + this.addValue(cmd.name,cmd.value,cmd.type,cmd.all); + }) + } + }, + /** + * 增加全局变量值 + * @param {*} name 变量名 + * @param {*} value 变量值 + * @param {*} type 类型 + * @param {*} all 是否全局保存 + */ + addValue(name,value,type,all){ + //增加缓存值,判断当前的缓存值是否为空 + if(all){ + //判断是否全局保存 + this.allGroups.forEach(gid=>{ + this.addCurrentGroup(name,value,type,gid); + }) + }else{ + //非全局参数,当前分组 + this.addCurrentGroup(name,value,type,this.groupId); + } + }, + addCurrentGroup(name,value,type,gid){ + //主键值 + let pkId=name+type; + //非全局参数 + let tmpCacheArrays=this.targetValue[gid]; + if(KUtils.arrNotEmpty(tmpCacheArrays)){ + //已经存在缓存,遍历 + let length=tmpCacheArrays.filter(p=>p.pkid==pkId&&p.in==type).length; + if(length>0){ + //存在,更新缓存值 + tmpCacheArrays.forEach(p=>{ + if(p.pkid==pkId&&p.in==type){ + p.value=value; + } + }) + }else{ + //不存在,直接push增加 + tmpCacheArrays.push({name: name,value: value,in: type,pkid: pkId}); + } + }else{ + //不存在 + tmpCacheArrays=[]; + tmpCacheArrays.push({name: name,value: value,in: type,pkid: pkId}); + } + //赋值 + this.targetValue[gid]=tmpCacheArrays; + + }, + save(){ + //window.console.log("save..") + //window.console.log(this.targetValue); + //最终一致性保存IndexDb中 + localStore.setItem(this.cacheKey, this.targetValue); + } +} + + +export default GlobalIndexDbCache; \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/Knife4jAsync.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/Knife4jAsync.js new file mode 100644 index 0000000..f4d7726 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/Knife4jAsync.js @@ -0,0 +1,7035 @@ +/*** + * swagger-bootstrap-ui v1.9.7 / 2019-11-11 16:10:52 + * + * + * Gitee:https://gitee.com/xiaoym/knife4j + * GitHub:https://github.com/xiaoymin/swagger-bootstrap-ui + * QQ:621154782 + * + * Swagger enhanced UI component package + * + * Author: xiaoyumin + * email:xiaoymin@foxmail.com + * Copyright: 2017 - 2019, xiaoyumin, https://doc.xiaominfo.com/ + * + * Licensed under Apache License 2.0 + * https://github.com/xiaoymin/swagger-bootstrap-ui/blob/master/LICENSE + * + * v1.7.5 + * create by xiaoymin on 2018-7-4 15:32:07 + * + * 重构swagger-bootstrap-ui组件,为以后动态扩展更高效,扩展接口打下基础 + * + * v2.0.0 + * modified by xiaoymin on 2019-11-11 16:42:43 + * + * v2.0.5 + * 剥离解析OpenAPI规范的逻辑,只解析基础部分,提供页面渲染速度,dev分支 + * + * v2.0.6 + * 同时支持v2以及v3,v2版本支持OAuth2.0认证 + * + * 基于Vue + Ant Design Vue重构Ui组件 + * + */ +import { + message +} from 'ant-design-vue' +import md5 from 'js-md5' +import { + urlToList +} from '@/components/utils/pathTools' +import KUtils from './utils' +import marked from 'marked' +import async from 'async' +import { + findComponentsByPath, + findMenuByKey +} from '@/components/utils/Knife4jUtils' +import Constants from '@/store/constants' +import uniqueId from 'lodash/uniqueId' +import isObject from 'lodash/isObject' +import has from 'lodash/has' +import cloneDeep from 'lodash/cloneDeep' +import unset from 'lodash/unset' +import isNull from 'lodash/isNull' +import isUndefined from 'lodash/isUndefined' +import xml2js from 'xml2js' +import DebugAxios from 'axios' + +marked.setOptions({ + gfm: true, + tables: true, + breaks: false, + pedantic: false, + sanitize: false, + smartLists: true, + smartypants: false +}) + +function SwaggerBootstrapUi(options) { + this.swaggerData=null; + //默认false + this.springdoc=options.springdoc||false; + //此处判断底层springfox版本 + //1、springfox提供的分组地址/swagger-resources + //2、springdoc-open提供的分组地址:v3/api-docs/swagger-config + //swagger请求api地址 + if(this.springdoc){ + this.url = options.url || 'v3/api-docs/swagger-config' + }else{ + this.url = options.url || 'swagger-resources' + } + this.i18n=options.i18n||'zh-CN' + //是否Knife4jAggregationDesktop + this.desktop=options.desktop||false; + this.desktopCode=null; + this.i18nVue=options.i18nVue||null; + //是否从地址栏设置i18n,如果是,那么默认以外部地址传入为主,否则会根据后台配置的setting中的language进行合并显示具体对应的i18n版本 + this.i18nFlag=options.i18nFlag||false; + //服务端版本是否依赖springfox2.10.5版本 + //该版本会自动追加basePath,因为Knife4j在以前的版本中帮忙追加了basePath所以导致重复 + this.baseSpringFox=options.baseSpringFox||false; + //this.i18nInstance = null + this.configUrl = options.configUrl || 'swagger-resources/configuration/ui' + //用于控制是否请求configUrl的配置 + this.configSupport = options.configSupport || false; + //用于控制是否请求configSecurityUrl的配置 + this.securitySupport = options.securitySupport || false; + //去除Vue实例的对象引用,该处可能存在循环依赖的问题,造成JS内存过高 + //this.$Vue = options.Vue + //增加一些属性用来代替VUE对象实例 + this.serviceOptions = null; + this.defaultServiceOption = null; + this.routeParams = options.routeParams || null; + this.menuData = null; + this.store = options.store || {}; + this.localStore = options.localStore || {}; + // + this.plus = options.plus + //文档id + this.docId = 'content' + this.title = 'knife4j' + this.titleOfUrl = 'https://gitee.com/xiaoym/knife4j' + this.load = 1 + //tabid + this.tabId = 'tabUl' + this.tabContentId = 'tabContent' + this.searchEleId = 'spanSearch' + this.searchTxtEleId = 'searchTxt' + this.menuId = 'menu' + this.searchMenuId = 'searchMenu' + //实例分组 + this.instances = [] + //当前分组实例 + this.currentInstance = null + //全局菜单 add by xiaoymin at 2019-11-30 13:51:39 + //菜单初始化时添加,后期tab切换时用来查找 + this.globalMenuDatas = [] + //动态tab + this.globalTabId = 'sbu-dynamic-tab' + this.globalTabs = [] + this.layui = options.layui + this.ace = options.ace + this.treetable = options.treetable + this.layTabFilter = 'admin-pagetabs' + this.version = '1.9.6' + this.requestOrigion = 'SwaggerBootstrapUi' + this.requestParameter = {} //浏览器请求参数 + //个性化配置 + this.settings = options.settings|| { + enableDebug:true,//是否开启Debug调试栏 + enableFooter:true,//是否默认显示底部Footer + enableFooterCustom:false,//是否自定义Footer + footerCustomContent:"",//自定义footer内容 + enableSearch:true,//是否显示搜索框 + enableOpenApi:true,//是否显示OpenApi原始规范结构 + enableHomeCustom:false,// 是否开启主页自定义配置,默认false + homeCustomLocation:'',//自定义主页的Markdown文档内容 + enableGroup:true,//是否显示分组下拉框,默认true(即显示),一般情况下,如果是单个分组的情况下,可以设置该属性为false,即不显示分组,那么也就不用选择了 + + enableSwaggerModels:true,//是否显示界面中SwaggerModel功能 + swaggerModelName:'Swagger Models',//重命名界面Swagger Model的显示名称 + enableReloadCacheParameter:false,// 是否在每个Debug调试栏后显示刷新变量按钮,默认不显示 + enableAfterScript:true,//调试Tab是否显示AfterScript功能,默认开启 + enableDocumentManage:true,//是否显示界面中"文档管理"功能 + enableVersion:false,//是否开启界面中对某接口的版本控制,如果开启,后端变化后Ui界面会存在小蓝点 + showApiUrl: false, //接口api地址不显示 + showTagStatus: true, //分组tag显示description属性,针对@Api注解没有tags属性值的情况 + enableSwaggerBootstrapUi: false, //是否开启swaggerBootstrapUi增强 + treeExplain: true, + enableDynamicParameter: false, //开启动态参数 + enableFilterMultipartApis: false, //针对RequestMapping的接口请求类型,在不指定参数类型的情况下,如果不过滤,默认会显示7个类型的接口地址参数,如果开启此配置,默认展示一个Post类型的接口地址 + enableFilterMultipartApiMethodType: "POST", //默认保存类型 + enableRequestCache: true, //是否开启请求参数缓存 + enableCacheOpenApiTable: false, //是否开启缓存已打开的api文档 + enableHost:false,//是否启用Host + enableHostText:'',//启用Host后文本 + language: options.i18n||'zh-CN' //默认语言版本 + } + //SwaggerBootstrapUi增强注解地址 + this.extUrl = '/v2/api-docs' + this.ext3Url='/v3/api-docs' + //验证增强有效地址 + this.validateExtUrl = '' + //缓存api对象,以区分是否是新的api,存储SwaggerBootstapUiCacheApi对象 + this.cacheApis = options.cacheApis|| [] + this.hasLoad = false + //add i18n supports by xiaoymin at 2019-4-17 20:27:34 + //this.i18n = new I18n(); + this.i18nInstance=options.i18nInstance||{} + //配置属性 2019-8-28 13:19:35,目前仅支持属性supportedSubmitMethods + this.configuration = { + supportedSubmitMethods: [ + 'get', + 'put', + 'post', + 'delete', + 'options', + 'head', + 'patch', + 'trace' + ] + } +} + +/*** + * swagger-bootstrap-ui的main方法,初始化文档所有功能,类似于SpringBoot的main方法 + */ +SwaggerBootstrapUi.prototype.main = function () { + var that = this + //that.welcome(); + that.initRequestParameters() + that.initSettings(); + /* that.initUnTemplatePageI18n(); + that.initWindowWidthAndHeight(); + that.initApis(); + that.windowResize(); */ + //2019/08/28 13:16:50 支持configuration接口,主要是相关配置,目前支持属性supportedSubmitMethods(请求调试) + //接口地址:/swagger-resources/configuration/ui +} + +/*** + * 初始化请求参数 + * 开启请求参数缓存:cache=1 + * 菜单Api地址显示: showMenuApi=1 + * 分组tag显示dsecription说明属性: showDes=1 + * 开启RequestMapping接口过滤,默认只显示: filterApi=1 filterApiType=post + * 开启缓存已打开的api文档:cacheApi=1 + * 启用SwaggerBootstrapUi提供的增强功能:plus=1 + * i18n支持:lang=zh|en + */ +SwaggerBootstrapUi.prototype.initRequestParameters = function () { + var that = this + var params = window.location.search + if (params != undefined && params != '') { + var notQus = params.substr(1) + if (notQus != undefined && notQus != null && notQus != '') { + var pms = notQus.split('&') + for (var i = 0; i < pms.length; i++) { + var pm = pms[i] + if (pm != undefined && pm != null && pm != '') { + var pmArr = pm.split('=') + that.requestParameter[KUtils.trim(pmArr[0])] = KUtils.trim(pmArr[1]) + } + } + } + } + that.log('请求参数========================================') + that.log(that.requestParameter) +} + +/*** + * 读取个性化配置信息 + * modified by xiaoymin at 2019-11-30 20:49:59 + * 个性化配置功能在v1.9.7版本中更新,去掉原来一些复杂无用的配置,通过单页面Settings.vue单组件来对个性化配置进行操作 + * 此处仅作为一个读取初始化的作用 + */ +SwaggerBootstrapUi.prototype.initSettings = function () { + var that = this + that.log("本地Settings初始化") + //添加对knife4j-front版本的支持,静态版本不提供配置 + if (that.configSupport) { + that.configInit() + } + //加载分组接口 + that.analysisGroup(); +} + +SwaggerBootstrapUi.prototype.initApis = function () { + var that = this + if (window.localStorage) { + var store = window.localStorage + var cacheApis = store['SwaggerBootstrapUiCacheApis'] + if (cacheApis != undefined && cacheApis != null && cacheApis != '') { + //var settings = JSON.parse(cacheApis) + var settings = KUtils.json5parse(cacheApis) + that.cacheApis = settings + } else { + that.cacheApis = [] + } + } +} + +/** + * Swagger配置信息加载 + */ +SwaggerBootstrapUi.prototype.configInit = function () { + var that = this + this.ajax({ + url: that.configUrl, + type: 'get', + timeout: 20000, + dataType: 'json' + },data=>{ + if ( + data != null && + data != undefined && + data.hasOwnProperty('supportedSubmitMethods') + ) { + var originalSupportSubmitMethods = data['supportedSubmitMethods'] + if (originalSupportSubmitMethods.length > 0) { + var newSupports = [] + originalSupportSubmitMethods.forEach(function (method) { + newSupports.push(method.toLowerCase()) + }) + that.configuration.supportedSubmitMethods = newSupports + } else { + that.configuration.supportedSubmitMethods = [] + } + } + },err=>{ + //message.error('Knife4j文档请求异常') + //隐藏config的请求接口错误显示 + that.error(err); + }) + /* that.$Vue + .$axios({ + url: that.configUrl, + type: 'get', + timeout: 20000, + dataType: 'json' + }) + .then(function (data) { + if ( + data != null && + data != undefined && + data.hasOwnProperty('supportedSubmitMethods') + ) { + var originalSupportSubmitMethods = data['supportedSubmitMethods'] + if (originalSupportSubmitMethods.length > 0) { + var newSupports = [] + originalSupportSubmitMethods.forEach(function (method) { + newSupports.push(method.toLowerCase()) + }) + that.configuration.supportedSubmitMethods = newSupports + } else { + that.configuration.supportedSubmitMethods = [] + } + } + }).catch(function (err) { + //message.error('Knife4j文档请求异常') + //隐藏config的请求接口错误显示 + that.error(err); + }) */ +} + +/*** + * 调用swagger的分组接口,获取swagger分组信息,包括分组名称,接口url地址,版本号等 + */ +SwaggerBootstrapUi.prototype.analysisGroup = function () { + var that = this + try { + var headers={}; + if(that.desktop){ + var loc=window.location.pathname; + //默认根目录 + var code='ROOT'; + var reg=new RegExp('(?:/(.*?))?/doc.html',"ig"); + if(reg.exec(loc)){ + var c=RegExp.$1; + if(KUtils.strNotBlank(c)){ + code=c; + } + } + headers={ + 'knife4j-gateway-code':code + }; + this.desktopCode=code; + } + var path = window.location.pathname.replace('index.html','').replace(/^\/+|\/+$/g,'') + path = path ? (path+'/') : '' + that.ajax({ + url: path + that.url, + type: 'get', + timeout: 20000, + dataType: 'json', + headers:headers + },data=>{ + if(that.springdoc){ + that.analysisSpringDocOpenApiGroupSuccess(data); + }else{ + that.analysisGroupSuccess(data) + } + //创建分组元素 + that.createGroupElement() + },err=>{ + message.error('Knife4j文档请求异常') + that.error(err) + }) + } catch (err) { + that.error(err) + } +} +/** + * 解析springdoc-OpenAPI + * @param {*} data + */ +SwaggerBootstrapUi.prototype.analysisSpringDocOpenApiGroupSuccess=function(data){ + var that = this + var t = typeof data + var groupData = null + if (t == 'string') { + //groupData = JSON.parse(data) + groupData = KUtils.json5parse(data) + } else { + groupData = data + } + that.log('响应分组json数据') + that.log(groupData) + var serviceOptions = []; + var allGroupIds=[]; + var groupUrls=KUtils.getValue(groupData,'urls',[],true); + var newGroupData=[]; + if(KUtils.arrNotEmpty(groupUrls)){ + groupUrls.forEach(gu=>{ + var newGroup={ + name:KUtils.getValue(gu,'name','knife4j',true), + url:KUtils.getValue(gu,'url','',true), + location:KUtils.getValue(gu,'url','',true), + swaggerVersion:'3.0.3' + } + newGroupData.push(newGroup); + }) + } + newGroupData.forEach(function (group) { + var g = new SwaggerBootstrapUiInstance( + KUtils.toString(group.name,'').replace(/\//g,'-'), + group.location, + group.swaggerVersion + ) + g.url = group.url + g.desktop=that.desktop; + g.desktopCode=that.desktopCode; + //g.url="/test/json"; + var newUrl = '' + //此处需要判断basePath路径的情况 + if (group.url != null && group.url != undefined && group.url != '') { + newUrl = group.url + } else { + newUrl = group.location + } + g.extUrl=newUrl; + if (that.validateExtUrl == '') { + that.validateExtUrl = g.extUrl + } + //判断当前分组url是否存在basePath + if ( + group.basePath != null && + group.basePath != undefined && + group.basePath != '' + ) { + g.baseUrl = group.basePath + } + //赋值查找缓存的id + if (that.cacheApis.length > 0) { + var cainstance = null + that.cacheApis.forEach(ca => { + if (ca.id == g.groupId) { + cainstance = ca + } + }) + /* $.each(that.cacheApis, function (x, ca) { + if (ca.id == g.groupId) { + cainstance = ca + } + }) */ + if (cainstance != null) { + g.firstLoad = false + //判断旧版本是否包含updatesApi属性 + if (!cainstance.hasOwnProperty('updateApis')) { + cainstance['updateApis'] = {} + } + g.cacheInstance = cainstance + that.log(g) + //g.groupApis=cainstance.cacheApis; + } else { + g.cacheInstance = new SwaggerBootstrapUiCacheApis({ + id: g.groupId, + name: g.name + }) + } + } else { + g.cacheInstance = new SwaggerBootstrapUiCacheApis({ + id: g.groupId, + name: g.name + }) + } + //双向绑定 + serviceOptions.push({ + label: g.name, + value: g.id + }) + //增加所有分组id,为afterScript特性 + allGroupIds.push(g.id); + that.instances.push(g) + }) + //赋值分组id + if(KUtils.arrNotEmpty(that.instances)){ + that.instances.forEach(inst=>{ + inst.allGroupIds=allGroupIds; + }) + } + //初始化所有 + this.serviceOptions=serviceOptions; + this.store.dispatch('globals/setServiceOptions', serviceOptions); + //that.$Vue.serviceOptions = serviceOptions; + if (serviceOptions.length > 0) { + //that.$Vue.defaultServiceOption = serviceOptions[0].value; + this.defaultServiceOption=serviceOptions[0].value; + this.store.dispatch('globals/setDefaultService', serviceOptions[0].value); + } +} + +/*** + * 请求分组成功处理逻辑 + * @param data + */ +SwaggerBootstrapUi.prototype.analysisGroupSuccess = function (data) { + var that = this + var t = typeof data + var groupData = null + if (t == 'string') { + //groupData = JSON.parse(data) + groupData = KUtils.json5parse(data) + } else { + groupData = data + } + that.log('响应分组json数据') + that.log(groupData) + var serviceOptions = []; + var allGroupIds=[]; + groupData.forEach(function (group) { + var g = new SwaggerBootstrapUiInstance( + KUtils.toString(group.name,'').replace(/\//g,'-'), + group.location, + group.swaggerVersion + ) + g.url = group.url + //测试api接口JSON + //g.url="/test/json"; + //Knife4j自研微服务聚合使用,默认是null + g.header=KUtils.getValue(group,'header',null,true); + g.basicAuth=KUtils.getValue(group,'basicAuth',null,true); + g.servicePath=KUtils.getValue(group,'servicePath',null,true); + g.desktop=that.desktop; + g.desktopCode=that.desktopCode; + var newUrl = '' + //此处需要判断basePath路径的情况 + if (group.url != null && group.url != undefined && group.url != '') { + newUrl = group.url + } else { + newUrl = group.location + } + g.extUrl=newUrl; + //去除增强地址 + /* var extBasePath = '' + var idx = newUrl.indexOf('/v2/api-docs') + var idx3 =newUrl.indexOf('/v3/api-docs'); + if (idx >= 0 || idx3>=0) { + //增强地址存在basePath + extBasePath = newUrl.substr(0, idx) + } + that.log('增强basePath地址:' + extBasePath) + //赋值增强地址 + if(g.oas2()){ + g.extUrl = extBasePath + that.extUrl + '?group=' +KUtils.groupName(newUrl,group.name) + //根据原地址获取group参数,如果group参数不存在,则获取分组name + }else{ + g.extUrl = extBasePath + that.ext3Url + '?group=' +KUtils.groupName(newUrl,group.name) + } + */ + if (that.validateExtUrl == '') { + that.validateExtUrl = g.extUrl + } + //判断当前分组url是否存在basePath + if ( + group.basePath != null && + group.basePath != undefined && + group.basePath != '' + ) { + g.baseUrl = group.basePath + } + //赋值查找缓存的id + if (that.cacheApis.length > 0) { + var cainstance = null + that.cacheApis.forEach(ca => { + if (ca.id == g.groupId) { + cainstance = ca + } + }) + /* $.each(that.cacheApis, function (x, ca) { + if (ca.id == g.groupId) { + cainstance = ca + } + }) */ + if (cainstance != null) { + g.firstLoad = false + //判断旧版本是否包含updatesApi属性 + if (!cainstance.hasOwnProperty('updateApis')) { + cainstance['updateApis'] = {} + } + g.cacheInstance = cainstance + that.log(g) + //g.groupApis=cainstance.cacheApis; + } else { + g.cacheInstance = new SwaggerBootstrapUiCacheApis({ + id: g.groupId, + name: g.name + }) + } + } else { + g.cacheInstance = new SwaggerBootstrapUiCacheApis({ + id: g.groupId, + name: g.name + }) + } + //双向绑定 + serviceOptions.push({ + label: g.name, + value: g.id + }) + //增加所有分组id,为afterScript特性 + allGroupIds.push(g.id); + that.instances.push(g) + }) + //赋值分组id + if(KUtils.arrNotEmpty(that.instances)){ + that.instances.forEach(inst=>{ + inst.allGroupIds=allGroupIds; + }) + } + //初始化所有 + this.serviceOptions=serviceOptions; + this.store.dispatch('globals/setServiceOptions', serviceOptions); + //that.$Vue.serviceOptions = serviceOptions; + if (serviceOptions.length > 0) { + //that.$Vue.defaultServiceOption = serviceOptions[0].value; + this.defaultServiceOption = serviceOptions[0].value; + this.store.dispatch('globals/setDefaultService', serviceOptions[0].value); + } + +} + +/*** + * 创建swagger分组页面元素 + */ +SwaggerBootstrapUi.prototype.createGroupElement = function () { + var that = this; + //创建分组flag + that.log("分组-------------------------------") + //that.log(that.instances) + //that.log(that.$Vue.$route.params) + //此处需要根据当前访问hash地址动态设置访问的下拉组 + //待写,是否包含分组名称 + var urlParams = this.routeParams; + if (KUtils.checkUndefined(urlParams)) { + if (urlParams.hasOwnProperty('groupName')) { + //是否不为空 + var gpName = urlParams.groupName; + if (KUtils.checkUndefined(gpName) && gpName != '') { + let selectInstance = that.selectInstanceByGroupName(gpName); + that.log("包含分组名称") + that.log(selectInstance) + //双向绑定下拉框的服务选项 + //that.$Vue.defaultServiceOption = selectInstance.id; + this.defaultServiceOption = selectInstance.id; + this.store.dispatch('globals/setDefaultService', selectInstance.id); + that.analysisApi(selectInstance); + } else { + //默认加载第一个url + that.analysisApi(that.instances[0]); + } + } else { + //默认加载第一个url + that.analysisApi(that.instances[0]); + } + } else { + //默认加载第一个url + that.analysisApi(that.instances[0]); + } + +} + +/*** + * 获取当前分组实例 + * @param name + * @returns {*} + */ +SwaggerBootstrapUi.prototype.selectInstanceByGroupName = function (name) { + var that = this; + var instance = null; + that.instances.forEach(function (group) { + //}) + //$.each(that.instances,function (i, group) { + if (group.name == name) { + instance = group; + return; + } + }) + return instance; +} + +/*** + * 加载swagger的分组详情接口 + * @param instance 分组接口请求实例 + */ +SwaggerBootstrapUi.prototype.analysisApi = function (instance) { + var that = this; + try { + //赋值 + that.currentInstance = instance; + if (!that.currentInstance.load) { + var api = instance.url; + if (api == undefined || api == null || api == "") { + api = instance.location; + } + //判断是否开启增强功能 + if (that.settings.enableSwaggerBootstrapUi) { + api = instance.extUrl; + } + //这里判断url请求是否已加载过 + //防止出现根路径的情况 + //如果是springdoc-openapi,无需判断,因为springdoc-openapi会把basePath带上 + if(!that.springdoc){ + var idx = api.indexOf('/'); + if (idx == 0) { + api = api.substr(1); + } + } + //测试 + //api = 'run.json'; + //此处加上transformResponse参数,防止Long类型在前端丢失精度 + //https://github.com/xiaoymin/swagger-bootstrap-ui/issues/269 + var reqHeaders={'language':that.settings.language}; + var requestConfig={ + url: api, + dataType: 'json', + timeout: 20000, + type: 'get', + //# 发送一个语言的header头给后端 + transformResponse:[function(data){ + return KUtils.json5parse(data); + }] + }; + //针对Knife4jAggregationDesktop软件的请求头 + if(that.desktop){ + reqHeaders=Object.assign({},reqHeaders,{'knife4j-gateway-code':that.desktopCode}); + } + if(KUtils.checkUndefined(this.currentInstance.header)){ + //Knife4j自研Aggreration微服务聚合组件请求头 + reqHeaders=Object.assign({},reqHeaders,{'knfie4j-gateway-request':that.currentInstance.header}); + } + if(KUtils.checkUndefined(this.currentInstance.basicAuth)){ + reqHeaders=Object.assign({},reqHeaders,{'knife4j-gateway-basic-request':that.currentInstance.basicAuth}); + } + requestConfig=Object.assign({},requestConfig,{headers:reqHeaders}); + that.ajax(requestConfig,data=>{ + that.analysisApiSuccess(data); + }, err => { + message.error('Knife4j文档请求异常') + that.error(err); + }) + /* DebugAxios.create().request({ + url: api, + dataType: 'json', + timeout: 20000, + type: 'get' + }).then(function (data) { + that.analysisApiSuccess(data); + }).catch(function (err) { + message.error('Knife4j文档请求异常') + that.error(err); + }) */ + } else { + //that.setInstanceBasicPorperties(null); + //更新当前缓存security + //that.updateCurrentInstanceSecuritys(); + that.createDescriptionElement(); + that.createDetailMenu(false); + that.afterApiInitSuccess(); + this.store.dispatch('globals/setSwaggerInstance', this.currentInstance); + } + } catch (err) { + that.error(err); + if (window.console) { + console.error(err); + } + } +} + +/** + * 当swagger-api请求初始化完成后,初始化页面的相关操作 + * 包括搜索、打开地址hash地址、tab事件等等 + */ +SwaggerBootstrapUi.prototype.afterApiInitSuccess = function () { + var that = this; + //搜索 + //that.searchEvents(); + //tab事件,新版本无此属性 + //that.tabCloseEventsInit(); + //opentab + that.initOpenTable(); + //hash + //that.hashInitEvent(); + //init hashMethod + //地址栏打开api地址 + //新版本默认已实现 + //that.initCurrentHashApi(); +} + +/*** + * 已经打开的api缓存,下一次刷新时打开 + * 新版本需要通过tabs实现 + */ +SwaggerBootstrapUi.prototype.initOpenTable = function () { + var that = this; + if (!that.settings.enableCacheOpenApiTable) { + return + } + if (window.localStorage) { + var store = window.localStorage; + var cacheApis = store["SwaggerBootstrapUiCacheOpenApiTableApis"] || "{}"; + //var settings = JSON.parse(cacheApis); + var settings = KUtils.json5parse(cacheApis); + var insid = that.currentInstance.groupId; + var cacheApis = settings[insid] || []; + + if (cacheApis.length > 0) { + for (var i = 0; i < cacheApis.length; i++) { + var cacheApi = cacheApis[i]; + that.log(cacheApi) + //var xx=that.getMenu().find(".menuLi[lay-id='"+cacheApi.tabId+"']"); + //xx.trigger("click"); + } + } + } +} + +/** + * 接口请求api成功时的操作 + */ +SwaggerBootstrapUi.prototype.analysisApiSuccess = function (data) { + var that = this; + that.hasLoad = true; + that.log(data); + //console.log(data); + var t = typeof (data); + var menu = null; + if (t == 'string') { + //menu = JSON.parse(data); + menu = KUtils.json5parse(data); + } else { + menu = data; + } + that.setInstanceBasicPorperties(menu); + that.resolvedOASVersion(menu); + //since2.0.6 + if(this.currentInstance.oas2()){ + that.openSettings(menu); + that.openDocuments(menu); + }else{ + that.openV3Settings(menu); + that.openV3Documents(menu); + } + that.dispatchSettings(); + that.analysisDefinition(menu); + //DApiUI.definitions(menu); + that.mergeLocalSecurityContext(); + that.log(menu); + that.createDescriptionElement(); + //当前实例已加载 + that.currentInstance.load = true; + //创建swaggerbootstrapui主菜单 + that.createDetailMenu(true); + //opentab + //that.initOpenTable(); + //that.afterApiInitSuccess(); + this.store.dispatch('globals/setSwaggerInstance', this.currentInstance); + +} + +/** + * 根据接口响应的OpenAPI结构,在确认当前的OpenAPI规范版本 + * https://gitee.com/xiaoym/knife4j/issues/I37X0Q + * @param {*} openApi + */ +SwaggerBootstrapUi.prototype.resolvedOASVersion=function(openApi){ + let version=KUtils.getValue(openApi, 'openapi', '', true); + //默认2.0 + let vs='2.0'; + if(KUtils.strNotBlank(version)){ + vs=version; + } + this.currentInstance.groupVersion=vs; +} + +/** + * 全局配置set操作 + */ +SwaggerBootstrapUi.prototype.dispatchSettings=function(){ + this.store.dispatch('globals/setAfterScript', this.settings.enableAfterScript); + this.store.dispatch('globals/setReloadCacheParameter', this.settings.enableReloadCacheParameter); + this.store.dispatch('globals/setSettings', this.settings); +} + +/** + * https://gitee.com/xiaoym/knife4j/issues/I1VC4I + * 更新本地全局authorize变量 + */ +SwaggerBootstrapUi.prototype.mergeLocalSecurityContext=function(){ + //初始化从本地读取 + var that = this; + var backArr = that.currentInstance.securityArrs; + //前缀+实例id + //全局通用 + var key = Constants.globalSecurityParamPrefix + that.currentInstance.id; + var tmpGlobalSecuritys = []; + var globalSecurityObject={}; + var securityArr=[]; + //var key = constant.globalSecurityParamPrefix; + that.localStore.getItem(Constants.globalSecurityParameterObject).then(gbp => { + //判断当前分组下的security是否为空 + if (KUtils.arrNotEmpty(backArr)) { + //读取本分组下的security + that.localStore.getItem(key).then(currentSecurity => { + if (KUtils.checkUndefined(currentSecurity)) { + //当前分组不为空 + //需要对比后端最新的参数情况,后端有可能已经删除参数 + var tmpSecuritys = []; + backArr.forEach(security => { + //判断当前的key在缓存中是否存在 + var caches = currentSecurity.filter(se => se.id == security.id); + if (caches.length > 0) { + //存在 + if (KUtils.strNotBlank(security.value)) { + tmpSecuritys.push(security); + } else { + tmpSecuritys.push(caches[0]); + } + } else { + tmpSecuritys.push(security); + } + }); + securityArr = tmpSecuritys; + } else { + securityArr = backArr; + } + //当前分组下的security不为空,判断全局分组,兼容升级的情况下,gbp可能会存在为空的情况 + if (KUtils.checkUndefined(gbp)) { + globalSecurityObject=gbp; + tmpGlobalSecuritys = tmpGlobalSecuritys.concat(gbp); + //从全局参数中更新当前分组下的参数 + securityArr.forEach(selfSecurity => { + var globalValueTmp=gbp[selfSecurity.id]; + if(KUtils.checkUndefined(globalValueTmp)){ + //id相等,更新value值 + selfSecurity.value = globalValueTmp; + }else{ + globalSecurityObject[selfSecurity.id]=selfSecurity.value; + } + }); + } else { + //为空的情况下,则默认直接新增当前分组下的security + //tmpGlobalSecuritys = tmpGlobalSecuritys.concat(that.securityArr); + securityArr.forEach(sa=>{ + globalSecurityObject[sa.id]=sa.value; + }) + } + //更新当前实例下的securitys + that.localStore.setItem(key, securityArr); + //更新全局的securitys + //console.log("全局---") + //console.log(this.globalSecurityObject) + that.localStore.setItem(Constants.globalSecurityParameterObject,globalSecurityObject); + }); + }else{ + this.localStore.removeItem(key); + } + }); +} + +/** + * 读取扩展属性Setting配置,后端直接开启增强 + * @since:knife4j 2.0.6 + * @param {*} data + */ +SwaggerBootstrapUi.prototype.openSettings=function(data){ + var that=this; + //判断是否包含x-openapi的增强 + var openapi=data['x-openapi']; + if(KUtils.checkUndefined(openapi)){ + //包含,判断settings + if(KUtils.checkUndefined(openapi['x-setting'])){ + var setting=openapi['x-setting']; + //存在,进行合并 + //与当前缓存在local本地的进行对比与合并 + var mergeSetting=Object.assign({},that.settings,setting); + if(that.i18nFlag){ + //外部i18n传参 + mergeSetting=Object.assign({},mergeSetting,{'language':that.i18n}); + } + that.settings=mergeSetting; + that.localStore.setItem(Constants.globalSettingsKey,mergeSetting); + //设置i18n + var i18n=KUtils.getValue(mergeSetting,'language','zh-CN',true); + this.localStore.setItem(Constants.globalI18nCache, i18n); + setTimeout(()=>{ + if(KUtils.checkUndefined(that.i18nVue)){ + that.i18nVue.locale = i18n; + } + that.store.dispatch('globals/setLang', i18n); + },500) + }else{ + //此处逻辑存在问题,如果开发者通过界面中的个性化设置保存了部分操作,则需要继承开发者的配置(2021/05/02) + //https://gitee.com/xiaoym/knife4j/issues/I27CN8 + that.setDefaultSettings(); + //不存在,直接移除缓存 + //that.localStore.setItem(Constants.globalSettingsKey,Constants.defaultSettings); + //当前settings设置为默认值 + //this.settings=Constants.defaultSettings; + } + }else{ + that.setDefaultSettings(); + //不存在,直接移除缓存 + //that.localStore.setItem(Constants.globalSettingsKey,Constants.defaultSettings); + //当前settings设置为默认值 + //this.settings=Constants.defaultSettings; + } + +} + +/** + * https://gitee.com/xiaoym/knife4j/issues/I27CN8 + */ +SwaggerBootstrapUi.prototype.setDefaultSettings=function(){ + //此处逻辑存在问题,如果开发者通过界面中的个性化设置保存了部分操作,则需要继承开发者的配置(2021/05/02) + //https://gitee.com/xiaoym/knife4j/issues/I27CN8 + //不存在,直接移除缓存 + let extSettings=this.settings; + let defaultSettings=Constants.defaultSettings; + let defaultWebSettings=Constants.defaultWebSettings; + var mergeSetting=Object.assign({},defaultSettings,extSettings); + //默认配置需要排除Ui界面中的几个配置,因为界面开发者可能存在保存操作,在界面初始化加载的时候需要从缓存读取继承 + mergeSetting=Object.assign({},mergeSetting,defaultWebSettings); + this.localStore.setItem(Constants.globalSettingsKey,mergeSetting); + //当前settings设置为默认值 + this.settings=mergeSetting; +} + +SwaggerBootstrapUi.prototype.openV3Settings=function(data){ + var that=this; + //判断是否包含extensions的增强 + var openapi=data['extensions']; + if(KUtils.checkUndefined(openapi)){ + //包含,判断settings + if(KUtils.checkUndefined(openapi['x-setting'])){ + var settings=openapi['x-setting']; + if(KUtils.arrNotEmpty(settings)){ + var setting=settings[0]; + //存在,进行合并 + //与当前缓存在local本地的进行对比与合并 + var mergeSetting=Object.assign({},that.settings,setting); + if(that.i18nFlag){ + //外部i18n传参 + mergeSetting=Object.assign({},mergeSetting,{'language':that.i18n}); + } + that.settings=mergeSetting; + that.localStore.setItem(Constants.globalSettingsKey,mergeSetting); + //设置i18n + var i18n=KUtils.getValue(mergeSetting,'language','zh-CN',true); + this.localStore.setItem(Constants.globalI18nCache, i18n); + setTimeout(()=>{ + if(KUtils.checkUndefined(that.i18nVue)){ + that.i18nVue.locale = i18n; + } + that.store.dispatch('globals/setLang', i18n); + },500) + } + }else{ + //不存在,直接移除缓存 + that.setDefaultSettings(); + } + }else{ + that.setDefaultSettings(); + } + +} + +/** + * 扩展其他文档 + * @since:knife4j 2.0.6 + * @param {*} data + */ +SwaggerBootstrapUi.prototype.openDocuments=function(data){ + var that=this; + //判断是否包含x-openapi的增强 + var openapi=data['x-openapi']; + if(KUtils.checkUndefined(openapi)){ + //判断是否包含markdown文档 + if(KUtils.arrNotEmpty(openapi['x-markdownFiles'])){ + var mkdFiles=openapi['x-markdownFiles']; + var currentInstanceMarkdownFileMap={}; + mkdFiles.forEach(mdTag=>{ + var swuFileTag=new SwaggerBootstrapUiMarkdownTag(mdTag.name); + //判断是否包含 + if(KUtils.arrNotEmpty(mdTag['children'])){ + var swuFileChildrens=mdTag['children']; + swuFileChildrens.forEach(mdFile=>{ + var mdf=new SwaggerBootstrapUiMarkdownFile(mdFile.title); + swuFileTag.children.push(mdf); + //缓存对象 + currentInstanceMarkdownFileMap[mdf.id]=KUtils.getValue(mdFile,'content','',true); + }) + } + that.currentInstance.markdownFiles.push(swuFileTag); + }) + //离线文件缓存到本地local,先删除后更新 + var currentCacheFilesKey=that.currentInstance.id+'markdownFiles'; + that.localStore.removeItem(currentCacheFilesKey); + that.localStore.setItem(currentCacheFilesKey,currentInstanceMarkdownFileMap); + } + } +} + + +/** + * 扩展其他文档 + * @since:knife4j 2.0.6 + * @param {*} data + */ +SwaggerBootstrapUi.prototype.openV3Documents=function(data){ + var that=this; + //判断是否包含x-openapi的增强 + var openapi=data['extensions']; + if(KUtils.checkUndefined(openapi)){ + //判断是否包含markdown文档 + if(KUtils.arrNotEmpty(openapi['x-markdownFiles'])){ + var mkdFiles=openapi['x-markdownFiles']; + var currentInstanceMarkdownFileMap={}; + mkdFiles.forEach(mdTag=>{ + var swuFileTag=new SwaggerBootstrapUiMarkdownTag(mdTag.name); + //判断是否包含 + if(KUtils.arrNotEmpty(mdTag['children'])){ + var swuFileChildrens=mdTag['children']; + swuFileChildrens.forEach(mdFile=>{ + var mdf=new SwaggerBootstrapUiMarkdownFile(mdFile.title); + var mdContentTmp=KUtils.getValue(mdFile,'content','',true); + //离线文档缓存 + //mdf.content=mdContentTmp; + swuFileTag.children.push(mdf); + //缓存对象 + currentInstanceMarkdownFileMap[mdf.id]=mdContentTmp; + }) + } + that.currentInstance.markdownFiles.push(swuFileTag); + }) + //离线文件缓存到本地local,先删除后更新 + var currentCacheFilesKey=that.currentInstance.id+'markdownFiles'; + that.localStore.removeItem(currentCacheFilesKey); + that.localStore.setItem(currentCacheFilesKey,currentInstanceMarkdownFileMap); + } + } +} +/*** + * 更新当前实例的security对象 + */ +SwaggerBootstrapUi.prototype.updateCurrentInstanceSecuritys = function () { + var that = this; + if (that.currentInstance.securityArrs != null && that.currentInstance.securityArrs.length > 0) { + //判断是否有缓存cache值 + //var cacheSecurityData=$("#sbu-header").data("cacheSecurity"); + var cacheSecurityData = that.getSecurityStores(); + if (cacheSecurityData != null && cacheSecurityData != undefined) { + cacheSecurityData.forEach(function (ca) { + //}) + //$.each(cacheSecurityData,function (i, ca) { + that.currentInstance.securityArrs.forEach(function (sa) { + //}) + //$.each(that.currentInstance.securityArrs,function (j, sa) { + if (ca.key == sa.key && ca.name == sa.name) { + sa.value = ca.value; + } + }) + }) + + } + } +} + +/*** + * 从localStorage对象中获取 + */ +SwaggerBootstrapUi.prototype.getSecurityStores = function () { + var csys = null; + if (window.localStorage) { + var store = window.localStorage; + var cacheSecuritys = store["SwaggerBootstrapUiCacheSecuritys"]; + if (cacheSecuritys != undefined && cacheSecuritys != null && cacheSecuritys != "") { + //var settings = JSON.parse(cacheApis); + var settings = KUtils.json5parse(cacheApis); + csys = settings; + } + } + return csys; +} + +/*** + * 基础实例赋值 + * @param menu + */ +SwaggerBootstrapUi.prototype.setInstanceBasicPorperties = function (menu) { + if (this.currentInstance.oas2()) { + this.basicInfoOAS2(menu); + } else { + this.basicInfoOAS3(menu); + } + +} + +/** + * 解析OAS2.0的基础配置信息 + * @param {*} menu + */ +SwaggerBootstrapUi.prototype.basicInfoOAS2 = function (menu) { + var that = this; + var title = '', + description = '', + name = '', + version = '', + termsOfService = ''; + var host = KUtils.getValue(menu, "host", "", true); + that.currentInstance.host = host; + if (menu != null && menu != undefined) { + if (menu.hasOwnProperty("info")) { + var info = menu.info; + title = KUtils.getValue(info, "title", '', true); + description = KUtils.getValue(info, "description", "", true); + if (info.hasOwnProperty("contact")) { + var contact = info["contact"]; + name = KUtils.getValue(contact, "name", "", true); + } + version = KUtils.getValue(info, "version", "", true); + termsOfService = KUtils.getValue(info, "termsOfService", "", true); + } + //that.currentInstance.host = host; + that.currentInstance.title = title; + //impl markdown syntax + that.currentInstance.description = marked(description); + that.currentInstance.contact = name; + that.currentInstance.version = version; + that.currentInstance.termsOfService = termsOfService; + //that.currentInstance.basePath = menu["basePath"]; + that.currentInstance.basePath = KUtils.getValue(menu,'basePath','/',true); + //赋值OpenAPI基础属性 + var openApiBaseInfo={ + swagger:menu['swagger']||'2.0', + info:menu['info']||{}, + host:menu['host']||'', + basePath:menu['basePath']||'/', + schemes:menu['schemes']||[], + consumes:menu['consumes']||['*/*'], + produces:menu['produces']||['*/*'] + } + that.currentInstance.openApiBaseInfo=openApiBaseInfo; + } else { + title = that.currentInstance.title; + } +} +/** + * 解析OAS3.0的基础配置 + * @param {*} menu + */ +SwaggerBootstrapUi.prototype.basicInfoOAS3 = function (menu) { + var that = this; + var title = '', + description = '', + name = '', + version = '', + termsOfService = ''; + var host = KUtils.getValue(menu, "host", "", true); + if (KUtils.checkUndefined(menu)) { + if (menu.hasOwnProperty("servers") && KUtils.checkUndefined(menu["servers"])) { + var servers = menu["servers"]; + if (KUtils.arrNotEmpty(servers)) { + host = servers[0]["url"]; + } + } + that.currentInstance.host = host; + if (menu.hasOwnProperty("info") && KUtils.checkUndefined(menu["info"])) { + var info = menu.info; + title = KUtils.getValue(info, "title", '', true); + description = KUtils.getValue(info, "description", "", true); + if (info.hasOwnProperty("contact")) { + var contact = info["contact"]; + name = KUtils.getValue(contact, "name", "", true); + } + version = KUtils.getValue(info, "version", "", true); + termsOfService = KUtils.getValue(info, "termsOfService", "", true); + + that.currentInstance.title = title; + //impl markdown syntax + that.currentInstance.description = marked(description); + that.currentInstance.contact = name; + that.currentInstance.version = version; + that.currentInstance.termsOfService = termsOfService; + //that.currentInstance.basePath = menu["basePath"]; + that.currentInstance.basePath = KUtils.getValue(menu, 'basePath', '/', true); + } else { + title = that.currentInstance.title; + } + //赋值OpenAPI基础属性 + var openApiBaseInfo={ + openapi:menu['openapi']||'3.0.3', + info:menu['info']||{}, + servers:menu['servers']||[] + } + that.currentInstance.openApiBaseInfo=openApiBaseInfo; + } +} + +/** + * 递归查询additionalProperties中的类型,针对Map类型会存在一直递归下去的情况,程序中则一直递归查询到包含属性additionalProperties的情况,直到找到类则跳出 + * @param {*} addtionalObject + * @param {*} oas 是否v2 + */ +SwaggerBootstrapUi.prototype.deepAdditionalProperties = function (addtionalObject, oas) { + var definiationName = ''; + //console.log(addtionalObject) + if (KUtils.checkUndefined(addtionalObject)) { + if (addtionalObject.hasOwnProperty('additionalProperties')) { + var dpAddtional = addtionalObject['additionalProperties']; + return this.deepAdditionalProperties(dpAddtional, oas); + } else { + //不存在了, + if (addtionalObject.hasOwnProperty('$ref')) { + var adref = addtionalObject['$ref']; + var regex = new RegExp(KUtils.oasmodel(oas), 'ig'); + if (regex.test(adref)) { + definiationName = RegExp.$1; + } + } else if (addtionalObject.hasOwnProperty('items')) { + var addItem = addtionalObject['items']; + if (addItem.hasOwnProperty('$ref')) { + var adrefItem = addItem['$ref']; + var regexItem = new RegExp(KUtils.oasmodel(oas), 'ig'); + if (regexItem.test(adrefItem)) { + definiationName = RegExp.$1; + } + } + } + } + } + return definiationName; + +} +/** + * 异步解析类 + * @param {*} menu + * @param {*} swud + * @param {*} oas2 是否v2版本 + */ +SwaggerBootstrapUi.prototype.analysisDefinitionAsync = function (menu, swud, oas2) { + if (oas2) { + this.analysisDefinitionAsyncOAS2(menu, swud, oas2); + } else { + this.analysisDefinitionAsyncOAS3(menu, swud, oas2); + } +} +/** + * 异步解析v2版本的model + * @param {*} menu + * @param {*} swud + * @param {*} oas2 + */ +SwaggerBootstrapUi.prototype.analysisDefinitionAsyncOAS2 = function (menu, swud, oas2) { + var that = this; + var modelName = swud.name; + //解析definition + if (menu != null && typeof (menu) != "undefined" && menu != undefined && menu.hasOwnProperty("definitions")) { + var definitions = menu["definitions"]; + //改用async的for循环 + for (var name in definitions) { + if (name == modelName) { + /* swud = new SwaggerBootstrapUiDefinition(); + swud.name = name; + swud.ignoreFilterName = name; */ + //that.log("开始解析Definition:"+name); + //获取value + var value = definitions[name]; + if (KUtils.checkUndefined(value)) { + swud.description = KUtils.propValue("description", value, ""); + swud.type = KUtils.propValue("type", value, ""); + swud.title = KUtils.propValue("title", value, ""); + //判断是否有required属性 + if (value.hasOwnProperty("required")) { + swud.required = value["required"]; + } + //是否有properties + if (value.hasOwnProperty("properties")) { + var properties = value["properties"]; + var defiTypeValue = {}; + for (var property in properties) { + var propobj = properties[property]; + //判断是否包含readOnly属性 + if (!propobj.hasOwnProperty("readOnly") || !propobj["readOnly"]) { + } + var spropObj = new SwaggerBootstrapUiProperty(); + //赋值readOnly属性 + if (propobj.hasOwnProperty("readOnly")) { + spropObj.readOnly = propobj["readOnly"]; + } + spropObj.name = property; + spropObj.originProperty = propobj; + spropObj.type = KUtils.propValue("type", propobj, "string"); + spropObj.description = KUtils.propValue("description", propobj, ""); + //判断是否包含枚举 + if (propobj.hasOwnProperty("enum")) { + spropObj.enum = propobj["enum"]; + if (spropObj.description != "") { + spropObj.description += ","; + } + spropObj.description = spropObj.description + "可用值:" + spropObj.enum.join(","); + } + if (spropObj.type == "string") { + //spropObj.example = String(KUtils.propValue("example", propobj, "")); + spropObj.example = KUtils.getExample("example", propobj, ""); + + } else { + spropObj.example = KUtils.propValue("example", propobj, ""); + } + spropObj.format = KUtils.propValue("format", propobj, ""); + spropObj.required = KUtils.propValue("required", propobj, false); + if (swud.required.length > 0) { + //有required属性,需要再判断一次 + if (swud.required.indexOf(spropObj.name) > -1) { + //if($.inArray(spropObj.name,swud.required)>-1){ + //存在 + spropObj.required = true; + } + } + //默认string类型 + var propValue = ""; + //判断是否有类型 + if (propobj.hasOwnProperty("type")) { + var type = propobj["type"]; + //判断是否有example + if (propobj.hasOwnProperty("example")) { + if (type == "string") { + //propValue = String(KUtils.propValue("example", propobj, "")); + propValue = KUtils.getExample("example", propobj, ""); + } else { + propValue = propobj["example"]; + } + } else if (KUtils.checkIsBasicType(type)) { + propValue = KUtils.getBasicTypeValue(type); + //此处如果是object情况,需要判断additionalProperties属性的情况 + if (type == "object") { + if (propobj.hasOwnProperty("additionalProperties")) { + var addpties = propobj["additionalProperties"]; + that.log("------解析map-=-----------additionalProperties,defName:" + name); + //判断是否additionalProperties中还包含additionalProperties属性 + var addtionalName = this.deepAdditionalProperties(addpties, oas2); + //console.log("递归类型---"+addtionalName) + //判断是否有ref属性,如果有,存在引用类,否则默认是{}object的情况 + if (KUtils.strNotBlank(addtionalName)) { + //console.log("-------------------------addtionalName--------"+addtionalName) + //这里需要递归判断是否是本身,如果是,则退出递归查找 + var globalArr = new Array(); + //添加类本身 + globalArr.push(name); + var addTempValue = null; + if (addtionalName != name) { + addTempValue = that.findRefDefinition(addtionalName, definitions, false, globalArr,null,oas2); + } else { + addTempValue = that.findRefDefinition(addtionalName, definitions, true, globalArr, name,oas2); + } + propValue = { + "additionalProperties1": addTempValue + } + //console.log(propValue) + spropObj.type = addtionalName; + spropObj.refType = addtionalName; + } else if (addpties.hasOwnProperty("$ref")) { + var adref = addpties["$ref"]; + var regex = new RegExp(KUtils.oasmodel(oas2), "ig"); + if (regex.test(adref)) { + var addrefType = RegExp.$1; + var addTempValue = null; + //这里需要递归判断是否是本身,如果是,则退出递归查找 + var globalArr = new Array(); + //添加类本身 + globalArr.push(name); + + if (addrefType != name) { + addTempValue = that.findRefDefinition(addrefType, definitions, false, globalArr, null, oas2); + } else { + addTempValue = that.findRefDefinition(addrefType, definitions, true, globalArr, name, oas2); + } + propValue = { + "additionalProperties1": addTempValue + } + that.log("解析map-=完毕:") + that.log(propValue); + spropObj.type = addrefType; + spropObj.refType = addrefType; + } + } else if (addpties.hasOwnProperty("items")) { + //数组 + var addPropItems = addpties["items"]; + + var adref = addPropItems["$ref"]; + var regex = new RegExp(KUtils.oasmodel(oas2), "ig"); + if (regex.test(adref)) { + var addrefType = RegExp.$1; + var addTempValue = null; + //这里需要递归判断是否是本身,如果是,则退出递归查找 + var globalArr = new Array(); + //添加类本身 + globalArr.push(name); + + if (addrefType != name) { + addTempValue = that.findRefDefinition(addrefType, definitions, false, globalArr, null, oas2); + } else { + addTempValue = that.findRefDefinition(addrefType, definitions, true, globalArr, name, oas2); + } + var tempAddValue = new Array(); + tempAddValue.push(addTempValue); + propValue = { + "additionalProperties1": tempAddValue + } + that.log("解析map-=完毕:") + that.log(propValue); + spropObj.type = "array"; + spropObj.refType = addrefType; + } + } + } + } + } else { + if (type == "array") { + propValue = new Array(); + var items = propobj["items"]; + var ref = items["$ref"]; + //此处有可能items是array + if (items.hasOwnProperty("type")) { + if (items["type"] == "array") { + ref = items["items"]["$ref"]; + } + } + //判断是否存在枚举 + if (items.hasOwnProperty("enum")) { + if (spropObj.description != "") { + spropObj.description += ","; + } + spropObj.description = spropObj.description + "可用值:" + items["enum"].join(","); + } + var regex = new RegExp(KUtils.oasmodel(oas2), "ig"); + if (regex.test(ref)) { + var refType = RegExp.$1; + spropObj.refType = refType; + //这里需要递归判断是否是本身,如果是,则退出递归查找 + var globalArr = new Array(); + //添加类本身 + globalArr.push(name); + if (refType != name) { + propValue.push(that.findRefDefinition(refType, definitions, false, globalArr, null, oas2)); + } else { + propValue.push(that.findRefDefinition(refType, definitions, true, globalArr, name, oas2)); + } + } else { + //schema基础类型显示 + spropObj.refType = items["type"]; + } + } + } + + } else { + //that.log("解析属性:"+property); + //that.log(propobj); + if (propobj.hasOwnProperty("$ref")) { + var ref = propobj["$ref"]; + var regex = new RegExp(KUtils.oasmodel(oas2), "ig"); + if (regex.test(ref)) { + var refType = RegExp.$1; + spropObj.refType = refType; + //这里需要递归判断是否是本身,如果是,则退出递归查找 + var globalArr = new Array(); + //添加类本身 + globalArr.push(name); + if (refType != name) { + propValue = that.findRefDefinition(refType, definitions, false, globalArr, null, oas2); + } else { + propValue = that.findRefDefinition(refType, definitions, true, globalArr, null, oas2); + } + + } + } else { + propValue = {}; + } + } + spropObj.value = propValue; + //判断是否有format,如果是integer,判断是64位还是32位 + if (spropObj.format != null && spropObj.format != undefined && spropObj.format != "") { + //spropObj.type=spropObj.format; + spropObj.type += "(" + spropObj.format + ")"; + } + //判断最终类型 + if (spropObj.refType != null && spropObj.refType != "") { + //判断基础类型,非数字类型 + if (spropObj.type == "string") { + spropObj.type = spropObj.refType; + } + } + //addprop + //这里判断去重 + if (!that.checkPropertiesExists(swud.properties, spropObj)) { + swud.properties.push(spropObj); + //如果当前属性readOnly=true,则实体类value排除此属性的值 + if (!spropObj.readOnly) { + defiTypeValue[property] = propValue; + } + } + } + swud.value = defiTypeValue; + } + } + ////console("开始递归---------------deepTreeTableRefParameter") + deepTreeTableRefParameter(swud, that, swud, swud, oas2); + ////console(swud) + //that.currentInstance.difArrs.push(swud); + swud.init = true; + break; + } + } + } +} + +/** + * 异步解析v3版本的model + * @param {*} menu + * @param {*} swud + * @param {*} oas2 + */ +SwaggerBootstrapUi.prototype.analysisDefinitionAsyncOAS3 = function (menu, swud, oas2) { + var that = this; + var modelName = swud.name; + var definitions = {}; + if (KUtils.checkUndefined(menu) && menu.hasOwnProperty("components")) { + var components = menu["components"]; + if (KUtils.checkUndefined(components) && components.hasOwnProperty("schemas")) { + var def = components["schemas"]; + if (KUtils.checkUndefined(def)) { + definitions = def; + } + } + } + //解析definition + if (KUtils.checkUndefined(definitions)) { + //改用async的for循环 + for (var name in definitions) { + if (name == modelName) { + /* swud = new SwaggerBootstrapUiDefinition(); + swud.name = name; + swud.ignoreFilterName = name; */ + //that.log("开始解析Definition:"+name); + //获取value + var value = definitions[name]; + if (KUtils.checkUndefined(value)) { + swud.description = KUtils.propValue("description", value, ""); + swud.type = KUtils.propValue("type", value, ""); + swud.title = KUtils.propValue("title", value, ""); + //判断是否有required属性 + if (value.hasOwnProperty("required")) { + swud.required = value["required"]; + } + //是否有properties + if (value.hasOwnProperty("properties")) { + var properties = value["properties"]; + var defiTypeValue = {}; + for (var property in properties) { + var propobj = properties[property]; + //判断是否包含readOnly属性 + if (!propobj.hasOwnProperty("readOnly") || !propobj["readOnly"]) {} + var spropObj = new SwaggerBootstrapUiProperty(); + //jsr303 + that.validateJSR303(spropObj,propobj); + //赋值readOnly属性 + if (propobj.hasOwnProperty("readOnly")) { + spropObj.readOnly = propobj["readOnly"]; + } + spropObj.name = property; + spropObj.originProperty = propobj; + spropObj.type = KUtils.propValue("type", propobj, "string"); + spropObj.description = KUtils.propValue("description", propobj, ""); + //判断是否包含枚举 + if (propobj.hasOwnProperty("enum")) { + spropObj.enum = propobj["enum"]; + if (spropObj.description != "") { + spropObj.description += ","; + } + spropObj.description = spropObj.description + "可用值:" + spropObj.enum.join(","); + } + if (spropObj.type == "string") { + //spropObj.example = String(KUtils.propValue("example", propobj, "")); + spropObj.example = KUtils.getExample("example", propobj, ""); + } else { + spropObj.example = KUtils.propValue("example", propobj, ""); + } + + spropObj.format = KUtils.propValue("format", propobj, ""); + spropObj.required = KUtils.propValue("required", propobj, false); + if (swud.required.length > 0) { + //有required属性,需要再判断一次 + if (swud.required.indexOf(spropObj.name) > -1) { + //if($.inArray(spropObj.name,swud.required)>-1){ + //存在 + spropObj.required = true; + } + } + //默认string类型 + var propValue = ""; + //判断是否有类型 + if (propobj.hasOwnProperty("type")) { + var type = propobj["type"]; + //判断是否有example + if (propobj.hasOwnProperty("example")) { + if (type == "string") { + //propValue = String(KUtils.propValue("example", propobj, "")); + propValue = KUtils.getExample("example", propobj, ""); + } else { + propValue = propobj["example"]; + } + } else if (KUtils.checkIsBasicType(type)) { + propValue = KUtils.getBasicTypeValue(type); + //此处如果是object情况,需要判断additionalProperties属性的情况 + if (type == "object") { + if (propobj.hasOwnProperty("additionalProperties")) { + var addpties = propobj["additionalProperties"]; + that.log("------解析map-=-----------additionalProperties,defName:" + name); + //判断是否additionalProperties中还包含additionalProperties属性 + var addtionalName = this.deepAdditionalProperties(addpties, oas2); + //console.log("递归类型---"+addtionalName) + //判断是否有ref属性,如果有,存在引用类,否则默认是{}object的情况 + if (KUtils.strNotBlank(addtionalName)) { + //console.log("-------------------------addtionalName--------"+addtionalName) + //这里需要递归判断是否是本身,如果是,则退出递归查找 + var globalArr = new Array(); + //添加类本身 + globalArr.push(name); + var addTempValue = null; + if (addtionalName != name) { + addTempValue = that.findRefDefinition(addtionalName, definitions, false, globalArr, null, oas2); + } else { + addTempValue = that.findRefDefinition(addtionalName, definitions, true, globalArr, name, oas2); + } + propValue = { + "additionalProperties1": addTempValue + } + //console.log(propValue) + spropObj.type = addtionalName; + spropObj.refType = addtionalName; + } else if (addpties.hasOwnProperty("$ref")) { + var adref = addpties["$ref"]; + var regex = new RegExp(KUtils.oasmodel(oas2), "ig"); + if (regex.test(adref)) { + var addrefType = RegExp.$1; + var addTempValue = null; + //这里需要递归判断是否是本身,如果是,则退出递归查找 + var globalArr = new Array(); + //添加类本身 + globalArr.push(name); + + if (addrefType != name) { + addTempValue = that.findRefDefinition(addrefType, definitions, false, globalArr, null, oas2); + } else { + addTempValue = that.findRefDefinition(addrefType, definitions, true, globalArr, name, oas2); + } + propValue = { + "additionalProperties1": addTempValue + } + that.log("解析map-=完毕:") + that.log(propValue); + spropObj.type = addrefType; + spropObj.refType = addrefType; + } + } else if (addpties.hasOwnProperty("items")) { + //数组 + var addPropItems = addpties["items"]; + + var adref = addPropItems["$ref"]; + var regex = new RegExp(KUtils.oasmodel(oas2), "ig"); + if (regex.test(adref)) { + var addrefType = RegExp.$1; + var addTempValue = null; + //这里需要递归判断是否是本身,如果是,则退出递归查找 + var globalArr = new Array(); + //添加类本身 + globalArr.push(name); + + if (addrefType != name) { + addTempValue = that.findRefDefinition(addrefType, definitions, false, globalArr, null, oas2); + } else { + addTempValue = that.findRefDefinition(addrefType, definitions, true, globalArr, name, oas2); + } + var tempAddValue = new Array(); + tempAddValue.push(addTempValue); + propValue = { + "additionalProperties1": tempAddValue + } + that.log("解析map-=完毕:") + that.log(propValue); + spropObj.type = "array"; + spropObj.refType = addrefType; + } + } + } + } + } else { + if (type == "array") { + propValue = new Array(); + var items = propobj["items"]; + var ref = items["$ref"]; + //此处有可能items是array + if (items.hasOwnProperty("type")) { + if (items["type"] == "array") { + ref = items["items"]["$ref"]; + } + } + //判断是否存在枚举 + if (items.hasOwnProperty("enum")) { + if (spropObj.description != "") { + spropObj.description += ","; + } + spropObj.description = spropObj.description + "可用值:" + items["enum"].join(","); + } + var regex = new RegExp(KUtils.oasmodel(oas2), "ig"); + if (regex.test(ref)) { + var refType = RegExp.$1; + spropObj.refType = refType; + //这里需要递归判断是否是本身,如果是,则退出递归查找 + var globalArr = new Array(); + //添加类本身 + globalArr.push(name); + if (refType != name) { + propValue.push(that.findRefDefinition(refType, definitions, false, globalArr, null, oas2)); + } else { + propValue.push(that.findRefDefinition(refType, definitions, true, globalArr, name, oas2)); + } + } else { + //schema基础类型显示 + spropObj.refType = items["type"]; + } + } + } + + } else { + //that.log("解析属性:"+property); + //that.log(propobj); + if (propobj.hasOwnProperty("$ref")) { + var ref = propobj["$ref"]; + var regex = new RegExp(KUtils.oasmodel(oas2), "ig"); + if (regex.test(ref)) { + var refType = RegExp.$1; + spropObj.refType = refType; + //这里需要递归判断是否是本身,如果是,则退出递归查找 + var globalArr = new Array(); + //添加类本身 + globalArr.push(name); + if (refType != name) { + propValue = that.findRefDefinition(refType, definitions, false, globalArr, null, oas2); + } else { + propValue = that.findRefDefinition(refType, definitions, true, globalArr, null, oas2); + } + + } + } else { + propValue = {}; + } + } + spropObj.value = propValue; + //判断是否有format,如果是integer,判断是64位还是32位 + if (spropObj.format != null && spropObj.format != undefined && spropObj.format != "") { + //spropObj.type=spropObj.format; + spropObj.type += "(" + spropObj.format + ")"; + } + //判断最终类型 + if (spropObj.refType != null && spropObj.refType != "") { + //判断基础类型,非数字类型 + if (spropObj.type == "string") { + spropObj.type = spropObj.refType; + } + } + //addprop + //这里判断去重 + if (!that.checkPropertiesExists(swud.properties, spropObj)) { + swud.properties.push(spropObj); + //如果当前属性readOnly=true,则实体类value排除此属性的值 + if (!spropObj.readOnly) { + defiTypeValue[property] = propValue; + } + } + } + swud.value = defiTypeValue; + } + } + ////console("开始递归---------------deepTreeTableRefParameter") + deepTreeTableRefParameter(swud, that, swud, swud, oas2); + ////console(swud) + //that.currentInstance.difArrs.push(swud); + swud.init = true; + break; + } + } + } +} + + +/** + * 解析所有的Model,但是不解析属性 + * @param {SwaggerJson对象实体} menu + */ +SwaggerBootstrapUi.prototype.analysisDefinitionRefModel = function (menu) { + var that = this; + if (this.currentInstance.oas2()) { + this.analysisDefinitionRefModelOAS2(menu); + } else { + this.analysisDefinitionRefModelOAS3(menu); + } +} +/** + * 解析OAS2的类结构 + * @param {*} menu + */ +SwaggerBootstrapUi.prototype.analysisDefinitionRefModelOAS2 = function (menu) { + var that = this; + //解析definition + if (menu != null && typeof (menu) != "undefined" && menu != undefined && menu.hasOwnProperty("definitions")) { + var definitions = menu["definitions"]; + //改用async的for循环 + for (var name in definitions) { + //所有的类classModel + var swud = swud = new SwaggerBootstrapUiDefinition(); + swud.name = name; + swud.ignoreFilterName = name; + that.currentInstance.difArrs.push(swud); + //所有类classModel的treeTable参数 + var swudTree = new SwaggerBootstrapUiTreeTableRefParameter(); + swudTree.name = name; + swudTree.id = md5(name); + //存放值 + that.currentInstance.swaggerTreeTableModels[name] = swudTree; + } + } +} + +/** + * 解析OAS3的类结构 + * @param {*} menu + */ +SwaggerBootstrapUi.prototype.analysisDefinitionRefModelOAS3 = function (menu) { + var that = this; + //解析definition + if (menu != null && typeof (menu) != "undefined" && menu != undefined && menu.hasOwnProperty("components")) { + var components = menu["components"]; + if (KUtils.checkUndefined(components) && components.hasOwnProperty("schemas")) { + var definitions = components["schemas"]; + if (KUtils.checkUndefined(definitions)) { + //改用async的for循环 + for (var name in definitions) { + //所有的类classModel + var swud = swud = new SwaggerBootstrapUiDefinition(); + swud.name = name; + swud.ignoreFilterName = name; + that.currentInstance.difArrs.push(swud); + //所有类classModel的treeTable参数 + var swudTree = new SwaggerBootstrapUiTreeTableRefParameter(); + swudTree.name = name; + swudTree.id = md5(name); + //存放值 + that.currentInstance.swaggerTreeTableModels[name] = swudTree; + } + } + } + } +} +/** + * 异步解析Model的名称-SwaggerModel功能需要 + * @param {当前swagger实例对象id} instanceId + * @param {model对象} treeTableModel + */ +SwaggerBootstrapUi.prototype.analysisDefinitionRefTableModel = function (instanceId, treeTableModel) { + //console.log("analysisDefinitionRefTableModel-异步解析Model的名称-SwaggerModel功能需要"); + //console.log(treeTableModel); + var that = this; + var originalTreeTableModel = treeTableModel; + if (!treeTableModel.init) { + var instance = null; + this.instances.forEach(ins => { + if (ins.id == instanceId) { + instance = ins; + } + }) + //console.log("当前实例") + //console.log(instance) + for(name in instance.swaggerTreeTableModels){ + if(name==treeTableModel.name){ + originalTreeTableModel=instance.swaggerTreeTableModels[name]; + if(!originalTreeTableModel.init){ + //console.log("开始加载属性") + //开始加载属性 + originalTreeTableModel.init = true; + //var definitions=instance.swaggerData["definitions"]; + //console.log(instance) + var definitions = instance.getOASDefinitions(); + var oas2 = instance.oas2(); + //console.log("analysisDefinitionRefTableModel:----------------"+oas2); + //console.log(definitions) + if (KUtils.checkUndefined(definitions)) { + for (var key in definitions) { + if (key == originalTreeTableModel.name) { + var def = definitions[key]; + //console.log("def"); + //根据def的properties解析 + if (KUtils.checkUndefined(def)) { + if (def.hasOwnProperty("properties")) { + var props = def["properties"]; + //获取required属性 + var requiredArrs = def.hasOwnProperty("required") ? def["required"] : new Array(); + //console.log(props); + for(var pkey in props){ + var p=props[pkey]; + p.refType=that.getSwaggerModelRefType(p,oas2); + //console.log("------------------analyslsldiflsjfdlsfaaaaaaaaaaaaaaaaaaa") + //console.log(p); + var refp = new SwaggerBootstrapUiParameter(); + refp.pid = originalTreeTableModel.id; + refp.readOnly = p.readOnly; + refp.parentTypes.push(treeTableModel.name) + refp.parentTypes.push(key) + //refp.level = minfo.level + 1; + refp.name = pkey; + refp.type = p.type; + //判断format + var _format = KUtils.propValue("format", p, ""); + if (KUtils.strNotBlank(_format)) { + refp.type=refp.type + "(" + _format + ")"; + } + //判断非array + if (p.type != "array") { + if (p.refType != null && p.refType != undefined && p.refType != "") { + //修复针对schema类型的参数,显示类型为schema类型 + refp.type = p.refType; + } + } + //refp.in = minfo.in; + if (KUtils.checkUndefined(p.require)) { + refp.require = p.required; + } else { + if (requiredArrs.includes(pkey)) { + refp.require = true; + } + } + refp.example = p.example; + var description = KUtils.propValue("description", p, ""); + //判断是否包含枚举 + if (p.hasOwnProperty("enum")) { + if (description != "") { + description += ","; + } + description = description + "可用值:" + p.enum.join(","); + } + refp.description = KUtils.replaceMultipLineStr(description); + that.validateJSR303(refp, p); + //models添加所有属性 + originalTreeTableModel.params.push(refp); + //判断类型是否基础类型 + if (KUtils.checkUndefined(p.refType) && !KUtils.checkIsBasicType(p.refType)) { + ////console("schema类型--------------" + p.refType) + refp.schemaValue = p.refType; + refp.schema = true; + //属性名称不同,或者ref类型不同 + var deepDef = that.getOriginalDefinitionByName(p.refType, definitions); + //console.log("find-deepdef") + //console.log(deepDef) + if (KUtils.checkUndefined(deepDef)) { + if (!refp.parentTypes.includes(p.refType)) { + deepSwaggerModelsTreeTableRefParameter(refp, definitions, deepDef, originalTreeTableModel, that, oas2); + } + } + + /* if (!checkDeepTypeAppear(refp.parentTypes, p.refType)) { + deepTreeTableRefParameter(refp, that, deepDef, apiInfo); + } */ + } else { + if (p.type == "array") { + if (p.refType != null && p.refType != undefined && p.refType != "") { + //修复针对schema类型的参数,显示类型为schema类型 + refp.schemaValue = p.refType; + //属性名称不同,或者ref类型不同 + var deepDef = that.getOriginalDefinitionByName(p.refType, definitions); + //console.log("find-deepdef") + //console.log(deepDef) + if (KUtils.checkUndefined(deepDef)) { + if (!refp.parentTypes.includes(p.refType)) { + deepSwaggerModelsTreeTableRefParameter(refp, definitions, deepDef, originalTreeTableModel, that, oas2); + } + } + } + } + } + } + } else if (def.hasOwnProperty("additionalProperties")) { + //map类型 + //var addpties = def["additionalProperties"]; + //console.log("addtionalProperties") + //console.log(def["additionalProperties"]) + var refType = that.getSwaggerModelRefType(def, oas2); + //console.log(refType) + var refp = new SwaggerBootstrapUiParameter(); + refp.pid = originalTreeTableModel.id; + refp.readOnly = true; + refp.parentTypes.push(treeTableModel.name) + //refp.level = minfo.level + 1; + refp.name = "additionalProperty1"; + refp.type = KUtils.propValue("title", def, ""); + if (KUtils.checkUndefined(refType)) { + refp.type = refType; + } + refp.parentTypes.push(treeTableModel.name) + //models添加所有属性 + originalTreeTableModel.params.push(refp); + var deepDef = that.getOriginalDefinitionByName(refType, definitions); + if (KUtils.checkUndefined(deepDef)) { + refp.schemaValue = refp.type; + refp.schema = true; + if (!refp.parentTypes.includes(refType)) { + deepSwaggerModelsTreeTableRefParameter(refp, definitions, deepDef, originalTreeTableModel, that, oas2); + } + } + } + else if(def.hasOwnProperty("enum")){ + var refp = new SwaggerBootstrapUiParameter(); + refp.pid = originalTreeTableModel.id; + refp.readOnly = def.readOnly; + refp.parentTypes.push(treeTableModel.name) + refp.parentTypes.push(key) + refp.name = pkey; + refp.type =def.type; + refp.example = def.example; + description = "可用值:" + def["enum"].join(","); + refp.description = KUtils.replaceMultipLineStr(description); + //models添加所有属性 + originalTreeTableModel.params.push(refp); + + } + } + } + } + } + instance.refTreeTableModels[name] = originalTreeTableModel; + } + } + } + } + return originalTreeTableModel; +} + +/** + * + * @param {Model名称} name + * @param {definitions定义} definitions + */ +SwaggerBootstrapUi.prototype.getOriginalDefinitionByName = function (name, definitions) { + var def = {name: name}; + for (var key in definitions) { + if (key == name) { + def["properties"] = definitions[key]; + break; + } + } + return def; +} + +/** + * 判断当前类型是否是Array数组 + * @param {*} propobj + * @param {*} oas2 + */ +SwaggerBootstrapUi.prototype.getSwaggerModelRefArray = function (propobj, oas2) { + var arrayFlag = false; + if (propobj.hasOwnProperty("type")) { + var type = propobj["type"]; + if (type == "array") { + arrayFlag = true; + } + } + return arrayFlag; +} +/** + * 获取当前属性的refType类型 + * @param {*} property + * @param {*} oas2 是否是2类型 + */ +SwaggerBootstrapUi.prototype.getSwaggerModelRefType = function (propobj, oas2) { + var refType = null; + if (propobj.hasOwnProperty("type")) { + var type = propobj["type"]; + //判断是否有example + if (KUtils.checkIsBasicType(type)) { + //此处如果是object情况,需要判断additionalProperties属性的情况 + if (type == "object") { + if (propobj.hasOwnProperty("additionalProperties")) { + var addpties = propobj["additionalProperties"]; + //判断是否additionalProperties中还包含additionalProperties属性 + var addtionalName = this.deepAdditionalProperties(addpties, oas2); + //console.log("递归类型---"+addtionalName) + //判断是否有ref属性,如果有,存在引用类,否则默认是{}object的情况 + if (KUtils.strNotBlank(addtionalName)) { + refType = addtionalName; + } else if (addpties.hasOwnProperty("$ref")) { + var adref = addpties["$ref"]; + var regex = new RegExp(KUtils.oasmodel(oas2), "ig"); + if (regex.test(adref)) { + refType = RegExp.$1; + } + } else if (addpties.hasOwnProperty("items")) { + //数组 + var addPropItems = addpties["items"]; + + var adref = addPropItems["$ref"]; + var regex = new RegExp(KUtils.oasmodel(oas2), "ig"); + if (regex.test(adref)) { + refType = RegExp.$1; + } + } + } + } + } else { + if (type == "array") { + var items = propobj["items"]; + if (KUtils.checkUndefined(items)) { + var ref = items["$ref"]; + //此处有可能items是array + if (items.hasOwnProperty("type")) { + if (items["type"] == "array") { + ref = items["items"]["$ref"]; + } + } + var regex = new RegExp(KUtils.oasmodel(oas2), "ig"); + if (regex.test(ref)) { + refType = RegExp.$1; + } else { + //schema基础类型显示 + refType = items["type"]; + } + } + } + } + } else { + if (propobj.hasOwnProperty("$ref")) { + var ref = propobj["$ref"]; + var regex = new RegExp(KUtils.oasmodel(oas2), "ig"); + if (regex.test(ref)) { + refType = RegExp.$1; + } + } + } + return refType; + +} +/** + * + * @param {*} parentRefp + * @param {*} definitions + * @param {*} deepDef + * @param {*} originalTreeTableModel + */ +function deepSwaggerModelsTreeTableRefParameter(parentRefp, definitions, deepDef, originalTreeTableModel, that, oas2) { + if (KUtils.checkUndefined(definitions)) { + for (var key in definitions) { + if (key == deepDef.name) { + var def = definitions[key]; + //根据def的properties解析 + if (KUtils.checkUndefined(def)) { + if (def.hasOwnProperty("properties")) { + var props = def["properties"]; + //获取required属性 + var requiredArrs = def.hasOwnProperty("required") ? def["required"] : new Array(); + for (var pkey in props) { + var p = props[pkey] + p.refType = that.getSwaggerModelRefType(p, oas2); + var refp = new SwaggerBootstrapUiParameter(); + refp.pid = parentRefp.id; + refp.readOnly = p.readOnly; + parentRefp.parentTypes.forEach(function (pt) { + refp.parentTypes.push(pt); + }) + refp.parentTypes.push(key) + refp.level = parentRefp.level + 1; + refp.name = pkey; + refp.type = p.type; + //判断非array + if (p.type != "array") { + if (p.refType != null && p.refType != undefined && p.refType != "") { + //修复针对schema类型的参数,显示类型为schema类型 + refp.type = p.refType; + } + } + //refp.in = minfo.in; + if (KUtils.checkUndefined(p.require)) { + refp.require = p.required; + } else { + if (requiredArrs.includes(pkey)) { + refp.require = true; + } + } + refp.example = p.example; + var description = KUtils.propValue("description", p, ""); + //判断是否包含枚举 + if (p.hasOwnProperty("enum")) { + if (description != "") { + description += ","; + } + description = description + "可用值:" + p.enum.join(","); + } + refp.description = KUtils.replaceMultipLineStr(description); + //KUtils.validateJSR303(refp, p); + //models添加所有属性 + if (parentRefp.children == null) { + parentRefp.children = new Array(); + } + parentRefp.children.push(refp); + //originalTreeTableModel.params.push(refp); + //判断类型是否基础类型 + if (KUtils.checkUndefined(p.refType) && !KUtils.checkIsBasicType(p.refType)) { + ////console("schema类型--------------" + p.refType) + refp.schemaValue = p.refType; + refp.schema = true; + //属性名称不同,或者ref类型不同 + var childdeepDef = that.getOriginalDefinitionByName(p.refType, definitions); + if (!refp.parentTypes.includes(p.refType)) { + deepSwaggerModelsTreeTableRefParameter(refp, definitions, childdeepDef, originalTreeTableModel, that, oas2); + } + /* if (!checkDeepTypeAppear(refp.parentTypes, p.refType)) { + deepTreeTableRefParameter(refp, that, deepDef, apiInfo); + } */ + } else { + if (p.type == "array") { + if (p.refType != null && p.refType != undefined && p.refType != "") { + //修复针对schema类型的参数,显示类型为schema类型 + refp.schemaValue = p.refType; + //属性名称不同,或者ref类型不同 + var childdeepDef = that.getOriginalDefinitionByName(p.refType, definitions); + if (!refp.parentTypes.includes(p.refType)) { + deepSwaggerModelsTreeTableRefParameter(refp, definitions, childdeepDef, originalTreeTableModel, that, oas2); + } + } + } + } + } + } else if (def.hasOwnProperty("additionalProperties")) { + //map类型 + //var addpties = def["additionalProperties"]; + var refType = that.getSwaggerModelRefType(def, oas2); + var refp = new SwaggerBootstrapUiParameter(); + refp.pid = originalTreeTableModel.id; + refp.readOnly = true; + //refp.parentTypes.push(treeTableModel.name) + refp.parentTypes.push(originalTreeTableModel.name) + //refp.level = minfo.level + 1; + refp.name = "additionalProperty1"; + refp.type = KUtils.propValue("title", def, ""); + if (KUtils.checkUndefined(refType)) { + refp.type = refType; + } + //refp.parentTypes.push(treeTableModel.name) + //models添加所有属性 + if (parentRefp.children == null) { + parentRefp.children = new Array(); + } + parentRefp.children.push(refp); + var deepDef = that.getOriginalDefinitionByName(refType, definitions); + if (KUtils.checkUndefined(deepDef)) { + refp.schemaValue = refp.type; + refp.schema = true; + if (!refp.parentTypes.includes(refType)) { + deepSwaggerModelsTreeTableRefParameter(refp, definitions, deepDef, originalTreeTableModel, that, oas2); + } + } + + } + } + } + } + } +} + +/*** + * 解析实例属性 + */ +SwaggerBootstrapUi.prototype.analysisDefinition = function (menu) { + var that = this; + this.currentInstance.swaggerData = menu; + //解析definition + //放弃解析所有的Model结构 + that.analysisDefinitionRefModel(menu); + //解析tags标签 + if (menu != null && typeof (menu) != "undefined" && menu != undefined && menu.hasOwnProperty("tags")) { + var tags = menu["tags"]; + //判断是否开启增强配置 + /* if (that.settings.enableSwaggerBootstrapUi) { + var sbu = menu["swaggerBootstrapUi"] + if (KUtils.checkUndefined(sbu)) { + if (KUtils.checkUndefined(sbu.tagSortLists)) { + tags = sbu["tagSortLists"]; + } + } + } */ + var tmpTags=[]; + tags.forEach(function (tag) { + //此处替换tag.name中的/字符,以避免在ui中因为使用vue-router的问题导致空白页面出现 + var tagdes=KUtils.getValue(tag,"description","",true); + var tagauth=null; + var tagorder=null; + if(that.currentInstance.oas2()){ + tagauth=KUtils.getValue(tag,"x-author","",true); + tagorder=KUtils.getValue(tag,"x-order","",true); + }else{ + //v3 + if(KUtils.checkUndefined(tag["extensions"])){ + var tagexte=tag["extensions"]; + tagauth=KUtils.getValue(tagexte,"x-author","",true); + tagorder=KUtils.getValue(tagexte,"x-order","",true); + } + } + + var swuTag = new SwaggerBootstrapUiTag(KUtils.toString(tag.name,"").replace(/\//g,'-'), tagdes); + if (KUtils.strNotBlank(tagauth)) { + swuTag.author = tagauth; + } + if(KUtils.strNotBlank(tagorder)){ + swuTag.order=parseInt(tagorder); + } + tmpTags.push(swuTag); + }) + if(KUtils.arrNotEmpty(tmpTags)){ + //排序 + tmpTags.sort(function (a, b) { + return a.order - b.order; + }) + }else{ + //当前接口tags不存在,给一个默认tag-default + //https://gitee.com/xiaoym/knife4j/issues/I27M98 + var defaultTag= new SwaggerBootstrapUiTag("default", "default"); + tmpTags.push(defaultTag); + } + that.currentInstance.tags=tmpTags; + } + //解析paths属性 + if (menu != null && typeof (menu) != "undefined" && menu != undefined && menu.hasOwnProperty("paths")) { + var paths = menu["paths"]; + //是否需要继续追加basePath的标志位 + //true:代表框架已经append,Knife4j无需二次追加 + //false: 代表框架未处理,Knife4j需要二次追加 + var appendBaePathFlag=KUtils.appendBasePath(paths,that.currentInstance.basePath); + //that.log("开始解析Paths.................") + //that.log(new Date().toTimeString()); + var pathStartTime = new Date().getTime(); + var _supportMethods = ["get", "post", "put", "delete", "patch", "options", "trace", "head", "connect"]; + async.forEachOf(paths, function (pathObject, path, callback) { + //var pathObject=paths[path]; + var apiInfo = null; + _supportMethods.forEach(function (method) { + if (pathObject.hasOwnProperty(method)) { + apiInfo = pathObject[method] + if (apiInfo != null) { + var ins = that.createApiInfoInstance(path, method, apiInfo,appendBaePathFlag); + that.currentInstance.paths.push(ins); + ins.hashCollections.forEach(function (hashurl) { + that.currentInstance.pathsDictionary[hashurl] = ins; + }) + that.methodCountAndDown(method.toUpperCase()); + } + } + }) + + }) + //that.log("解析Paths结束,耗时:" + (new Date().getTime() - pathStartTime)); + //that.log(new Date().toTimeString()); + //判断是否开启过滤 + if (that.settings.enableFilterMultipartApis) { + //开启过滤 + that.currentInstance.paths.forEach(function (methodApi) { + //判断是否包含 + var p = that.currentInstance.pathFilters[methodApi.url]; + if (p == null || p == undefined) { + var d = new SwaggerBootstrapUiApiFilter(); + d.methods.push(methodApi); + that.currentInstance.pathFilters[methodApi.url] = d; + } else { + p.methods.push(methodApi); + that.currentInstance.pathFilters[methodApi.url] = p; + } + }) + var newPathArr = new Array(); + that.log(that.currentInstance.pathFilters) + for (var url in that.currentInstance.pathFilters) { + var saf = that.currentInstance.pathFilters[url]; + //that.log(url) + //that.log(saf) + //that.log(saf.api(that.settings.enableFilterMultipartApiMethodType)) + //that.log("") + newPathArr = newPathArr.concat(saf.api(that.settings.enableFilterMultipartApiMethodType)); + } + that.log("重新赋值。。。。。") + //that.log(that.currentInstance.paths) + ///that.log(newPathArr) + //重新赋值 + that.currentInstance.paths = newPathArr; + //that.log(that.currentInstance.paths) + } + } + //console.log(that.currentInstance) + that.readSecurityContextSchemes(menu); + //当前实例不存在OAuth2验证的情况下需要clear + that.currentInstance.clearOAuth2(); + //console.log("分组------------") + //console.log(that.currentInstance.cacheInstance) + //tag分组 + that.currentInstance.tags.forEach(function (tag) { + //}) + //$.each(that.currentInstance.tags, function (i, tag) { + //如果是第一次加载,则所有api都是新接口,无需判断老新 + if (!that.currentInstance.firstLoad) { + //判断是否新 + var tagNewApis = false; + //是否改变 + var tagChangeApis = false; + //查找childrens + that.currentInstance.paths.forEach(methodApi => { + //判断tags是否相同 + methodApi.tags.forEach(tagName => { + if (tagName == tag.name) { + //是否存在 + if (!that.currentInstance.cacheInstance.cacheApis.includes(methodApi.id)) { + //} + //if ($.inArray(methodApi.id, that.currentInstance.cacheInstance.cacheApis) < 0) { + tagNewApis = true; + methodApi.hasNew = true; + } + //console.log(methodApi) + //判断作者 + if (!KUtils.strNotBlank(methodApi.author)) { + if (KUtils.strNotBlank(tag.author)) { + methodApi.author = tag.author; + } + } + tag.childrens.push(methodApi); + } + }) + }) + if (tagNewApis) { + tag.hasNew = true; + } else { + //不是新接口,判断接口是否变更 + that.currentInstance.paths.forEach(function (methodApi) { + //}) + //$.each(that.currentInstance.paths, function (k, methodApi) { + //判断tags是否相同 + methodApi.tags.forEach(function (tagName) { + // $.each(methodApi.tags, function (x, tagName) { + if (tagName == tag.name) { + if (methodApi.hasChanged) { + //已经存在变更 + tagChangeApis = true; + } + } + }) + }) + tag.hasChanged = tagChangeApis; + } + } else { + //查找childrens + that.currentInstance.paths.forEach(function (methodApi) { + //$.each(that.currentInstance.paths, function (k, methodApi) { + //判断tags是否相同 + methodApi.tags.forEach(function (tagName) { + //$.each(methodApi.tags, function (x, tagName) { + if (tagName == tag.name) { + //判断作者 + if (!KUtils.strNotBlank(methodApi.author)) { + if (KUtils.strNotBlank(tag.author)) { + methodApi.author = tag.author; + } + } + tag.childrens.push(methodApi); + } + }) + }) + } + + /* if (that.settings.enableSwaggerBootstrapUi) { + //排序childrens + tag.childrens.sort(function (a, b) { + return a.order - b.order; + }) + } */ + //排序childrens + tag.childrens.sort(function (a, b) { + return a.order - b.order; + }) + }); + + if (that.currentInstance.firstLoad) { + /*var c=new SwaggerBootstrapUiCacheApis(); + c.id=that.currentInstance.groupId; + c.name=that.currentInstance.name; + c.cacheApis=that.currentInstance.groupApis;*/ + //that.cacheApis.push(c); + //that.currentInstance.cacheInstance.versionFlag=false; + that.cacheApis.push(that.currentInstance.cacheInstance); + } else { + //更新?页面点击后方可更新 + //that.currentInstance.cacheInstance.versionFlag=false; + //更新当前cacheApi + if (that.cacheApis.length > 0) { + that.cacheApis.forEach(function (ca) { + //}) + //$.each(that.cacheApis, function (j, ca) { + if (ca.id == that.currentInstance.cacheInstance.id) { + ca.updateApis = that.currentInstance.cacheInstance.updateApis; + } + }) + } + } + + //当前加入的cacheApi加入localStorage对象中 + that.storeCacheApis(); + //解析models + //遍历paths属性中的请求以及响应Model参数,存在即加入,否则不加入 + + that.log("开始解析refTreetableparameters属性.................") + that.log(new Date().toTimeString()); + var pathStartTime = new Date().getTime(); + //models的逻辑从这里移除,放到单组件中进行异步加载,解决效率问题 + + //自定义文档 + if (that.settings.enableSwaggerBootstrapUi) { + var sbu = menu["swaggerBootstrapUi"] + if (KUtils.checkUndefined(sbu)) { + if (KUtils.checkUndefined(sbu.markdownFiles)) { + sbu.markdownFiles.forEach(function (md) { + let key = md5(md.title) + that.currentInstance.markdownFiles.push({ + ...md, + id: key + }) + }) + } + } + //that.currentInstance.markdownFiles = sbu.markdownFiles; + } + that.log("解析refTreetableparameters结束,耗时:" + (new Date().getTime() - pathStartTime)); + that.log(new Date().toTimeString()); + +} + +/** + * 读取security参数,例如oauth2 + * @param {*} menu + */ +SwaggerBootstrapUi.prototype.readSecurityContextSchemes=function(menu){ + if(this.currentInstance.oas2()){ + if (menu != null && typeof (menu) != "undefined" && menu != undefined && menu.hasOwnProperty("securityDefinitions")) { + var securityDefinitions = menu["securityDefinitions"]; + this.readSecurityContextSchemesCommon(securityDefinitions); + } + }else{ + if(KUtils.checkUndefined(menu)&&menu.hasOwnProperty("components")){ + var components=menu["components"]; + if(KUtils.checkUndefined(components)&&components.hasOwnProperty("securitySchemes")){ + var securityDefinitions = components["securitySchemes"]; + this.readSecurityContextSchemesCommon(securityDefinitions); + } + } + } +} + + +/** + * oas2 + * @param {*} menu + */ +SwaggerBootstrapUi.prototype.readSecurityContextSchemesCommon=function(securityDefinitions){ + var that=this; + //解析securityDefinitions属性 + if (KUtils.checkUndefined(securityDefinitions)) { + //判断是否有缓存cache值 + //var cacheSecurityData=$("#sbu-header").data("cacheSecurity"); + //var cacheSecurityData=that.getSecurityInfos(); + var cacheSecurityData = that.getGlobalSecurityInfos(); + var securityArr = new Array(); + for (var j in securityDefinitions) { + var sdobj = securityDefinitions[j]; + if(sdobj.type=="oauth2"){ + //oauth2认证 + var oauth=new SwaggerBootstrapUiOAuth2( + KUtils.getValue(sdobj,"flow","",true), + KUtils.getValue(sdobj,"tokenUrl","",true), + KUtils.getValue(sdobj,"authorizationUrl","",true), + that.currentInstance.id + ); + oauth.sync(); + that.currentInstance.oauths=oauth; + }else{ + var sdf = new SwaggerBootstrapUiSecurityDefinition(); + sdf.key = j; + sdf.type = sdobj.type; + sdf.name = sdobj.name; + sdf.in = sdobj.in; + //如果name为空,则默认取key值 + //https://gitee.com/xiaoym/knife4j/issues/I27CNZ + if(KUtils.strBlank(sdobj.name)){ + sdf.name=j; + sdf.in="header"; + } + var flag = false; + if (cacheSecurityData != null && cacheSecurityData != undefined) { + //存在缓存值,更新当前值,无需再次授权 + cacheSecurityData.forEach(function (sa) { + //}) + //$.each(cacheSecurityData, function (i, sa) { + if (sa.key == sdf.key && sa.name == sdf.name) { + flag = true; + sdf.value = sa.value; + } + }) + } + /* if (!flag){ + //如果cache不存在,存储 + that.storeGlobalParam(sdf,"securityArrs"); + }*/ + //at 2019-12-7 18:22:01 + //得到主键id端 + var md5StrBefore = sdf.key + sdf.type + sdf.in + sdf.name; + sdf.id = md5(md5StrBefore); + securityArr.push(sdf); + } + //that.currentInstance.securityArrs.push(sdf); + } + if (securityArr.length > 0) { + that.currentInstance.securityArrs = securityArr; + that.log("解析securityDefinitions属性--------------------------------------------------------------->") + } else { + //清空缓存 + that.clearSecuritys(); + } + } else { + //清空缓存security + that.clearSecuritys(); + } +} +/** + * OAuth2认证的支持 + * @param {*} grantType oauth2的授权类型 + * @param {*} tokenUrl 请求touken地址 + * @param {*} authUrl 授权地址 + */ +function SwaggerBootstrapUiOAuth2(grantType,tokenUrl,authUrl,instanceId){ + this.grantType=grantType; + this.name="Authorization"; + this.username=null; + this.password=null; + this.redirectUri=null; + //是否已经授权 + this.granted=false; + this.tokenUrl=tokenUrl; + this.authorizeUrl=authUrl; + this.clientId=""; + this.clientSecret=""; + //授权后返回值 + this.accessToken=null; + this.tokenType=null; + this.state="OAuth"+instanceId; +} +/** + * 授权过后从本地LocalStorage同步 + */ +SwaggerBootstrapUiOAuth2.prototype.syncOAuth=function(){ + var that=this; + if(window.localStorage){ + var key=that.state; + var value=window.localStorage.getItem(key); + if(KUtils.strNotBlank(value)){ + var storageObject=KUtils.json5parse(value); + this.accessToken=KUtils.getValue(storageObject,"tokenType","Bearer",true)+" "+storageObject.accessToken; + this.tokenType=storageObject.tokenType; + this.granted=true; + } + } +} +/** + * 保存自己 + */ +SwaggerBootstrapUiOAuth2.prototype.sync=function(){ + //console.log("saveOAuthMySELF") + this.syncOAuth(); + if(window.localStorage){ + var key="SELF"+this.state; + var cacheValue=window.localStorage.getItem(key); + if(KUtils.strNotBlank(cacheValue)){ + //缓存中存在 + var cacheObject=KUtils.json5parse(cacheValue); + //判断授权形式是否相同 + if(this.grantType==cacheObject.grantType){ + //相等 + //是否已经授权 + this.granted=cacheObject.granted; + if(KUtils.strBlank(this.clientId)){ + this.clientId=cacheObject.clientId; + } + if(KUtils.strBlank(this.clientSecret)){ + this.clientSecret=cacheObject.clientSecret; + } + if(KUtils.strBlank(this.redirectUri)){ + this.redirectUri=cacheObject.redirectUri; + } + if(KUtils.strBlank(this.username)){ + this.username=cacheObject.username; + } + if(KUtils.strBlank(this.password)){ + this.password=cacheObject.password; + } + //授权后返回值 + if(KUtils.strBlank(this.accessToken)){ + this.accessToken=cacheObject.accessToken; + } + if(KUtils.strBlank(this.tokenType)){ + this.tokenType=cacheObject.tokenType; + } + } + window.localStorage.setItem(key,KUtils.json5stringify(this)); + }else{ + window.localStorage.setItem(key,KUtils.json5stringify(this)); + } + } + +} +/** + * 注销退出 + */ +SwaggerBootstrapUiOAuth2.prototype.clear=function(){ + this.username=null; + this.password=null; + this.accessToken=null; + this.redirectUri=null; + this.granted=false; + this.clientId=""; + this.clientSecret=""; + //授权后返回值 + this.accessToken=null; + this.tokenType=null; + var key="SELF"+this.state; + window.localStorage.setItem(key,KUtils.json5stringify(this)); +} +/*** + * 清空security + */ +SwaggerBootstrapUi.prototype.clearSecuritys = function () { + this.localStore.setItem(Constants.globalSecurityParamPrefix, []); +} +/** + * 处理Models + * add at 2019-12-11 21:01:46 + */ +SwaggerBootstrapUi.prototype.processModels = function () { + var that = this; + if (KUtils.checkUndefined(this.currentInstance.refTreeTableModels)) { + for (var name in that.currentInstance.refTreeTableModels) { + that.currentInstance.modelNames.push(name); + var param = that.currentInstance.refTreeTableModels[name]; + var model = new SwaggerBootstrapUiModel(param.id, name); + if (KUtils.arrNotEmpty(param.params)) { + param.params.forEach(function (ps) { + var newparam = { + ...ps, + pid: "-1" + } + model.data.push(newparam); + if (ps.schema) { + //查找当前ps的属性值 + deepTreeTableSchemaModel(model, that.currentInstance.refTreeTableModels, ps, newparam); + } + + }) + } + that.currentInstance.models.push(model); + } + } +} + +/** + * 递归查找 + * @param {*} model + * @param {*} treeTableModel + * @param {*} id + * @param {*} rootParam + */ +function deepTreeTableSchemaModel(model, treeTableModel, param, rootParam) { + ////console(model.name) + if (KUtils.checkUndefined(param.schemaValue)) { + var schema = treeTableModel[param.schemaValue] + if (KUtils.checkUndefined(schema)) { + rootParam.parentTypes.push(param.schemaValue); + if (KUtils.arrNotEmpty(schema.params)) { + schema.params.forEach(function (nmd) { + //childrenparam需要深拷贝一个对象 + var childrenParam = { + childrenTypes: nmd.childrenTypes, + def: nmd.def, + description: nmd.description, + enum: nmd.enum, + example: nmd.example, + id: nmd.id, + ignoreFilterName: nmd.ignoreFilterName, + in: nmd.in, + level: nmd.level, + name: nmd.name, + parentTypes: nmd.parentTypes, + pid: nmd.pid, + readOnly: nmd.readOnly, + require: nmd.require, + schema: nmd.schema, + schemaValue: nmd.schemaValue, + show: nmd.show, + txtValue: nmd.txtValue, + type: nmd.type, + validateInstance: nmd.validateInstance, + validateStatus: nmd.validateStatus, + value: nmd.value + } + childrenParam.pid = param.id; + childrenParam.parentParam = param; + model.data.push(childrenParam); + if (childrenParam.schema) { + //存在schema,判断是否出现过 + if (rootParam.parentTypes.indexOf(childrenParam.schemaValue) == -1) { + deepTreeTableSchemaModel(model, treeTableModel, childrenParam, rootParam); + } + } + }) + } + } + } +} + + +function findModelChildren(md, modelData) { + if (modelData != null && modelData != undefined && modelData.length > 0) { + modelData.forEach(function (nmd) { + var newnmd = { + childrenTypes: nmd.childrenTypes, + def: nmd.def, + description: nmd.description, + enum: nmd.enum, + example: nmd.example, + id: nmd.id, + ignoreFilterName: nmd.ignoreFilterName, + in: nmd.in, + level: nmd.level, + name: nmd.name, + parentTypes: nmd.parentTypes, + pid: nmd.pid, + readOnly: nmd.readOnly, + require: nmd.require, + schema: nmd.schema, + schemaValue: nmd.schemaValue, + show: nmd.show, + txtValue: nmd.txtValue, + type: nmd.type, + validateInstance: nmd.validateInstance, + validateStatus: nmd.validateStatus, + value: nmd.value + } + if (newnmd.pid == md.id) { + newnmd.children = []; + newnmd.childrenIds = []; + findModelChildren(newnmd, modelData); + //查找后如果没有,则将children置空 + if (newnmd.children.length == 0) { + newnmd.children = null; + } + //判断是否存在 + if (md.childrenIds.indexOf(newnmd.id) == -1) { + //不存在 + md.childrenIds.push(newnmd.id); + md.children.push(newnmd); + } + } + }) + } +} + +/*** + * 创建简介页面 + */ +SwaggerBootstrapUi.prototype.createDescriptionElement = function () { + /*var that = this; + var layui=that.layui; + var element=layui.element; + //内容覆盖 + //that.getDoc().html(""); + setTimeout(function () { + var html = template('SwaggerBootstrapUiIntroScript', that.currentInstance); + $("#mainTabContent").html("").html(html); + element.tabChange('admin-pagetabs',"main"); + that.tabRollPage("auto"); + },10) */ +} + +/*** + * 根据分组id查找实例 + */ +SwaggerBootstrapUi.prototype.selectInstanceByGroupId = function (id) { + var that = this; + var instance = null; + //console(that.instances) + that.instances.forEach(function (group) { + //}) + //$.each(that.instances, function (i, id) { + if (group.id == id) { + instance = group; + return; + } + }) + return instance; +} + +/** + * 从外部VUE对象中获取i18n的实例 + */ +SwaggerBootstrapUi.prototype.getI18n = function () { + //return this.$Vue.getCurrentI18nInstance(); + return this.i18nInstance; +} + +/*** + * 创建左侧菜单按钮 + * @param menu + */ +SwaggerBootstrapUi.prototype.createDetailMenu = function (addFlag) { + var that = this; + //创建菜单数据 + var menuArr = []; + that.log(that.currentInstance) + var groupName = that.currentInstance.name; + var groupId = that.currentInstance.id; + //console.log("----------------createDetailMenu") + //console.log(this.i18nInstance); + //主页 + menuArr.push({ + groupName: groupName, + groupId: groupId, + key: 'kmain', + /* name: '主页', */ + name: this.getI18n().menu.home, + i18n:'home', + component: 'Main', + icon: 'icon-home', + path: 'home', + }) + //是否有全局参数 + if(KUtils.arrNotEmpty(that.currentInstance.securityArrs)||KUtils.checkUndefined(that.currentInstance.oauths)){ + /* if (that.currentInstance.securityArrs != null && that.currentInstance.securityArrs.length > 0) { */ + menuArr.push({ + groupName: groupName, + groupId: groupId, + key: 'Authorize' + md5(groupName), + name: 'Authorize', + tabName: 'Authorize(' + groupName + ')', + component: 'Authorize', + icon: 'icon-authenticationsystem', + path: 'Authorize/' + groupName, + }) + } + //Swagger通用Models add by xiaoyumin 2018-11-6 13:26:45 + //是否显示SwaggerModels + if(that.settings.enableSwaggerModels){ + //重命名model + var swaggerModelName=KUtils.getValue(that.settings,"swaggerModelName","Swagger Models",true); + menuArr.push({ + groupName: groupName, + groupId: groupId, + key: 'swaggerModel' + md5(groupName), + //name: 'Swagger Models', + name:swaggerModelName, + component: 'SwaggerModels', + //tabName: 'Swagger Models(' + groupName + ')', + tabName: swaggerModelName+'('+groupName+')', + icon: 'icon-modeling', + path: 'SwaggerModels/' + groupName, + }) + } + //是否显示文档管理 + if(that.settings.enableDocumentManage){ + //文档管理 + menuArr.push({ + groupName: groupName, + groupId: groupId, + key: 'documentManager' + md5(groupName), + i18n:'manager', + /* name: '文档管理', */ + name:this.getI18n().menu.manager, + icon: 'icon-zdlxb', + path: 'documentManager', + children: [{ + groupName: groupName, + groupId: groupId, + key: 'globalParameters' + md5(groupName), + /* name: '全局参数设置', + tabName: '全局参数设置(' + groupName + ')', */ + name: this.getI18n().menu.globalsettings, + i18n:'globalsettings', + tabName: this.getI18n().menu.globalsettings+'(' + groupName + ')', + component: 'GlobalParameters', + path: 'GlobalParameters-' + groupName + }, + { + groupName: groupName, + groupId: groupId, + key: 'OfficelineDocument' + md5(groupName), + /* name: '离线文档', + tabName: '离线文档(' + groupName + ')', */ + name: this.getI18n().menu.officeline, + i18n:'officeline', + tabName: this.getI18n().menu.officeline+'(' + groupName + ')', + component: 'OfficelineDocument', + path: 'OfficelineDocument-' + groupName + }, + { + groupName: groupName, + groupId: groupId, + key: 'Settings' + md5(groupName), + /* name: '个性化设置', */ + name: this.getI18n().menu.selfSettings, + i18n:'selfSettings', + component: 'Settings', + path: 'Settings' + }, + { + groupName: groupName, + groupId: groupId, + key: 'api' + md5(groupName), + /* name: '个性化设置', */ + name: this.getI18n().menu.genApi, + i18n:'genApi', + component: 'GenApi', + path: 'api' + } + ] + }) + + } + //自定义文档 + //since2.0.6后直接判断,不用管增强配置 + if(KUtils.arrNotEmpty(that.currentInstance.markdownFiles)){ + that.currentInstance.markdownFiles.forEach(mdTag=>{ + var mdid=mdTag.id.substr(0,10); + var mdfolder={ + groupName: groupName, + groupId: groupId, + key: mdTag.id, + name:mdTag.name, + i18n:'other', + icon: 'icon-APIwendang', + path: groupName+'-'+mdid+'-omd', + children: [] + } + if(KUtils.arrNotEmpty(mdTag.children)){ + mdTag.children.forEach(mdfile=>{ + mdfolder.children.push({ + groupName: groupName, + groupId: groupId, + key: mdfile.id, + component: 'OtherMarkdown', + name: mdfile.title, + path: mdfile.id + }) + }) + } + //console.log(mdfolder) + menuArr.push(mdfolder); + }) + } + /* if (that.settings.enableSwaggerBootstrapUi) { + if (that.currentInstance.markdownFiles != null && that.currentInstance.markdownFiles.length > 0) { + var mdlength = that.currentInstance.markdownFiles.length; + var otherMarkdowns = { + groupName: groupName, + groupId: groupId, + key: 'otherMarkdowns', + name:this.getI18n().menu.other, + icon: 'icon-APIwendang', + path: 'otherMarkdowns', + children: [] + } + that.currentInstance.markdownFiles.forEach(function (md) { + var unmdkey = md5(md.title); + otherMarkdowns.children.push({ + groupName: groupName, + groupId: groupId, + key: unmdkey, + component: 'OtherMarkdown', + name: md.title, + path: unmdkey + }) + }) + menuArr.push(otherMarkdowns); + } + } */ + //接口文档 + that.currentInstance.tags.forEach(function (tag) { + //}) + //$.each(that.currentInstance.tags, function (i, tag) { + var len = tag.childrens.length; + //console.log(tag); + var _lititle = ""; + if (len == 0) { + if (that.settings.showTagStatus) { + _lititle = tag.name + "(" + tag.description + ")"; + } else { + _lititle = tag.name; + } + //如果当前tag分组下不存在接口,当前tag的path不允许点击,否则会出现白板 + //https://gitee.com/xiaoym/knife4j/issues/I2CVTF + //modified by xiaoymin 2021年5月3日 19:40:41 + menuArr.push({ + groupName: groupName, + groupId: groupId, + key: md5(_lititle), + name: tag.name, + description: tag.description, + icon: 'icon-APIwendang', + //path: groupName + "/" + tag.name + //不存在接口,直接指向home主页 + path:"" + }) + } else { + if (that.settings.showTagStatus) { + _lititle = tag.name + "(" + tag.description + ")"; + } else { + _lititle = tag.name; + } + var tagMenu = { + groupName: groupName, + groupId: groupId, + key: md5(_lititle), + name: tag.description ? tag.description : tag.name, + title: tag.name, + icon: 'icon-APIwendang', + path: groupName + "/" + tag.name, + hasNew: tag.hasNew || tag.hasChanged, + num:null, + children: [] + } + tag.childrens.forEach(function (children) { + //}) + //console.log(children) + //$.each(tag.childrens, function (i, children) { + var tabSubMenu = { + groupName: groupName, + groupId: groupId, + key: md5(groupName + children.summary + children.operationId), + name: children.summary, + description: children.description, + path: children.operationId, + component: 'ApiInfo', + hasNew: children.hasNew || children.hasChanged, + deprecated: children.deprecated, + //用于搜索 + url: children.url, + method: children.methodType.toUpperCase(), + menuClass: 'knife4j-menu-left-style' + } + tagMenu.children.push(tabSubMenu); + }) + //给接口数量赋值 + tagMenu.num = tagMenu.children.length; + menuArr.push(tagMenu); + + } + }) + ////console(menuArr) + var mdata = KUtils.formatter(menuArr); + //添加全局参数 + if (addFlag) { + that.globalMenuDatas = that.globalMenuDatas.concat(mdata); + } + ////console(JSON.stringify(mdata)) + //双向绑定 + //console.log(mdata) + + this.menuData=mdata; + this.store.dispatch("globals/setMenuData", mdata); + //setGitVersion + this.store.dispatch("globals/setGitVersion",this.settings.enableVersion); + /* that.$Vue.MenuData = mdata; + that.$Vue.swaggerCurrentInstance = that.currentInstance; + that.$Vue.$store.dispatch("globals/setMenuData", mdata); */ + //根据i18n更新菜单的数据 + //设置菜单选中 + //that.selectDefaultMenu(mdata); + that.log("菜单初始化完成...") +} + + + +/*** + * 判断属性是否已经存在 + * @param properties + * @param prop + */ +SwaggerBootstrapUi.prototype.checkPropertiesExists = function (properties, prop) { + var flag = false; + if (properties != null && properties != undefined && properties.length > 0 && prop != null && prop != undefined) { + properties.forEach(function (p) { + if (p.name == prop.name && p.in == prop.in && p.type == prop.type) { + flag = true; + } + }) + } + return flag; +} +/*** + * 缓存对象 + */ +SwaggerBootstrapUi.prototype.storeCacheApis = function () { + var that = this; + that.log("缓存对象...storeCacheApis-->") + /* if (window.localStorage) { + var store = window.localStorage; + that.log(that.cacheApis); + var str = JSON.stringify(that.cacheApis); + store.setItem("SwaggerBootstrapUiCacheApis", str); + } */ + that.localStore.setItem(Constants.globalGitApiVersionCaches, that.cacheApis); +} + +//二次解析 +SwaggerBootstrapUi.prototype.initApiInfoAsync = function (swpinfo) { + if (swpinfo.oas2) { + this.initApiInfoAsyncOAS2(swpinfo); + } else { + this.initApiInfoAsyncOAS3(swpinfo); + } +} + +/** + * 解析oas2的接口 + * @param {*} swpinfo + */ +SwaggerBootstrapUi.prototype.initApiInfoAsyncOAS2 = function (swpinfo) { + var that = this; + var apiInfo = swpinfo.originalApiInfo; + if (!swpinfo.init) { + //如果当前对象未初始化,进行初始化 + if (apiInfo.hasOwnProperty("parameters")) { + var pameters = apiInfo["parameters"]; + pameters.forEach(function (m) { + //}) + //$.each(pameters, function (i, m) { + var originalName = KUtils.propValue("name", m, ""); + var inType = KUtils.propValue("in", m, ""); + //忽略参数 + //if (swpinfo.ignoreParameters == null || (swpinfo.ignoreParameters != null && !swpinfo.ignoreParameters.hasOwnProperty(originalName))) { + //暂时放弃增加includeParameters的新特性支持 + //if (KUtils.filterIncludeParameters(inType, originalName, swpinfo.includeParameters)) { + if (swpinfo.includeParameters != null) { + //直接判断include的参数即可 + if (KUtils.filterIncludeParameters(inType, originalName, swpinfo.includeParameters)) { + that.assembleParameter(m, swpinfo); + } + } else { + if (KUtils.filterIgnoreParameters(inType, originalName, swpinfo.ignoreParameters)) { + that.assembleParameter(m, swpinfo); + } + } + + //} + }) + } + var definitionType = null; + var arr = false; + //解析responsecode + if (typeof (apiInfo.responses) != 'undefined' && apiInfo.responses != null) { + var resp = apiInfo.responses; + var rpcount = 0; + for (var status in resp) { + var swaggerResp = new SwaggerBootstrapUiResponseCode(); + var rescrobj = resp[status]; + swaggerResp.code = status; + swaggerResp.oas2 = swpinfo.oas2; + swaggerResp.description = rescrobj["description"]; + var rptype = null; + if (rescrobj.hasOwnProperty("schema") && KUtils.checkUndefined(rescrobj["schema"])) { + var schema = rescrobj["schema"]; + //单引用类型 + //判断是否是数组类型 + var regex = new RegExp("#/definitions/(.*)$", "ig"); + if (schema.hasOwnProperty("$ref")) { + if (regex.test(schema["$ref"])) { + var ptype = RegExp.$1; + swpinfo.responseParameterRefName = ptype; + swaggerResp.responseParameterRefName = ptype; + definitionType = ptype; + rptype = ptype; + swaggerResp.schema = ptype; + } + } else if (schema.hasOwnProperty("type")) { + var t = schema["type"]; + if (t == "array") { + arr = true; + if (schema.hasOwnProperty("items")) { + var items = schema["items"]; + var itref = items["$ref"]; + //此处需判断items是否数组 + if (items.hasOwnProperty("type")) { + if (items["type"] == "array") { + itref = items["items"]["$ref"]; + } + } + if (regex.test(itref)) { + var ptype = RegExp.$1; + swpinfo.responseParameterRefName = ptype; + swaggerResp.responseParameterRefName = ptype; + definitionType = ptype; + rptype = ptype; + swaggerResp.schema = ptype; + } + } + } else { + //判断是否存在properties属性 + if (schema.hasOwnProperty("properties")) { + swaggerResp.schema = t; + //自定义类型、放入difarrs对象中 + var swud = new SwaggerBootstrapUiDefinition(); + swud.name = swpinfo.id; + swud.description = "自定义Schema"; + definitionType = swud.name; + rptype = swud.name; + swaggerResp.responseParameterRefName = swud.name; + + var properties = schema["properties"]; + var defiTypeValue = {}; + for (var property in properties) { + var spropObj = new SwaggerBootstrapUiProperty(); + spropObj.name = property; + var propobj = properties[property]; + spropObj.originProperty = propobj; + spropObj.type = KUtils.propValue("type", propobj, "string"); + spropObj.description = KUtils.propValue("description", propobj, ""); + //spropObj.example = KUtils.propValue("example", propobj, ""); + spropObj.example = KUtils.getExample("example", propobj, ""); + spropObj.format = KUtils.propValue("format", propobj, ""); + spropObj.required = KUtils.propValue("required", propobj, false); + if (swud.required.length > 0) { + //有required属性,需要再判断一次 + //if ($.inArray(spropObj.name, swud.required) > -1) { + if (swud.required.includes(spropObj.name)) { + //存在 + spropObj.required = true; + } + } + //默认string类型 + var propValue = ""; + //判断是否有类型 + if (propobj.hasOwnProperty("type")) { + var type = propobj["type"]; + //判断是否有example + if (propobj.hasOwnProperty("example")) { + if (type == "string") { + //propValue = String(KUtils.propValue("example", propobj, "")); + propValue = KUtils.getExample("example", propobj, ""); + } else { + propValue = propobj["example"]; + } + } else if (KUtils.checkIsBasicType(type)) { + propValue = KUtils.getBasicTypeValue(type); + } + + } + spropObj.value = propValue; + //判断是否有format,如果是integer,判断是64位还是32位 + if (spropObj.format != null && spropObj.format != undefined && spropObj.format != "") { + //spropObj.type=spropObj.format; + spropObj.type += "(" + spropObj.format + ")"; + } + swud.properties.push(spropObj); + defiTypeValue[property] = propValue; + } + swud.value = defiTypeValue; + swud.init = true; + that.currentInstance.difArrs.push(swud); + } else { + //判断是否是基础类型 + if (KUtils.checkIsBasicType(t)) { + var _tmpSchemaName=t; + //基础类型 + swpinfo.responseText = t; + swpinfo.responseBasicType = true; + + //响应状态码的响应内容 + swaggerResp.responseText = t; + swaggerResp.responseBasicType = true; + //判断是否包含format + var responsecodeformat=KUtils.propValue("format",schema,""); + if(KUtils.strNotBlank(responsecodeformat)){ + _tmpSchemaName=_tmpSchemaName+"("+responsecodeformat+")"; + } + swaggerResp.schemaTitle = _tmpSchemaName; + } + } + } + } + } + if (rptype != null) { + //查询 + /* for (var i = 0; i < that.currentInstance.difArrs.length; i++) { + var ref = that.currentInstance.difArrs[i]; + if (ref.name == rptype) { + if(!ref.init){ + //如果该类没有加载,则进行加载 + that.analysisDefinitionAsync(that.currentInstance.swaggerData,ref); + } + if (arr) { + var na = new Array(); + na.push(ref.value); + swaggerResp.responseValue = JSON.stringify(na, null, "\t"); + swaggerResp.responseJson = na; + } else { + swaggerResp.responseValue = JSON.stringify(ref.value, null, "\t"); + swaggerResp.responseJson = ref.value; + } + } + } */ + //响应参数 + var def = that.getDefinitionByName(rptype, swpinfo.oas2); + if (def != null) { + if (arr) { + var na = new Array(); + na.push(def.value); + //swaggerResp.responseValue = JSON.stringify(na, null, "\t"); + swaggerResp.responseValue = KUtils.json5stringifyFormat(na, null, "\t"); + swaggerResp.responseJson = na; + } else { + //swaggerResp.responseValue = JSON.stringify(def.value, null, "\t"); + swaggerResp.responseValue = KUtils.json5stringifyFormat(def.value, null, "\t"); + swaggerResp.responseJson = def.value; + } + if (def.hasOwnProperty("properties")) { + var props = def["properties"]; + props.forEach(function (p) { + //}) + //$.each(props, function (i, p) { + var resParam = new SwaggerBootstrapUiParameter(); + resParam.name = p.name; + if (!KUtils.checkParamArrsExists(swaggerResp.responseParameters, resParam)) { + swaggerResp.responseParameters.push(resParam); + resParam.description = KUtils.replaceMultipLineStr(p.description); + if (p.type == null || p.type == "") { + if (p.refType != null) { + if (!KUtils.checkIsBasicType(p.refType)) { + resParam.schemaValue = p.refType; + resParam.schema = true; + //存在引用类型,修改默认type + resParam.type = p.refType; + var deepDef = that.getDefinitionByName(p.refType, swpinfo.oas2); + deepResponseRefParameter(swaggerResp, that, deepDef, resParam); + resParam.parentTypes.push(p.refType); + deepTreeTableResponseRefParameter(swaggerResp, that, deepDef, resParam); + } + } + } else { + resParam.type = p.type; + if (!KUtils.checkIsBasicType(p.type)) { + if (p.refType != null) { + if (!KUtils.checkIsBasicType(p.refType)) { + resParam.schemaValue = p.refType; + resParam.schema = true; + //存在引用类型,修改默认type + if (p.type != "array") { + resParam.type = p.refType; + } + var deepDef = that.getDefinitionByName(p.refType, swpinfo.oas2); + deepResponseRefParameter(swaggerResp, that, deepDef, resParam); + resParam.parentTypes.push(p.refType); + deepTreeTableResponseRefParameter(swaggerResp, that, deepDef, resParam); + } + } else { + resParam.schemaValue = p.type; + resParam.schema = true; + //存在引用类型,修改默认type + resParam.type = p.type; + var deepDef = that.getDefinitionByName(p.type, swpinfo.oas2); + deepResponseRefParameter(swaggerResp, that, deepDef, resParam); + resParam.parentTypes.push(p.type); + deepTreeTableResponseRefParameter(swaggerResp, that, deepDef, resParam); + } + } + } + } + }) + + } + } + } + + if (swaggerResp.schema != null && swaggerResp.schema != undefined) { + rpcount = rpcount + 1; + } + //判断是否有响应headers + if (rescrobj.hasOwnProperty("headers")) { + var _headers = rescrobj["headers"]; + swaggerResp.responseHeaderParameters = new Array(); + for (var _headerN in _headers) { + var _hv = { + ..._headers[_headerN], + name: _headerN, + id: md5(_headerN), + pid: "-1" + } + /* + var _hv = $.extend({}, _headers[_headerN], { + name: _headerN, + id: md5(_headerN), + pid: "-1" + }); */ + swaggerResp.responseHeaderParameters.push(_hv); + } + if (status == "200") { + swpinfo.responseHeaderParameters = swaggerResp.responseHeaderParameters; + } + } + swpinfo.responseCodes.push(swaggerResp); + } + swpinfo.multipartResponseSchemaCount = rpcount; + if (rpcount > 1) { + swpinfo.multipartResponseSchema = true; + } + } + + if (definitionType != null && !swpinfo.multipartResponseSchema) { + //查询 + for (var i = 0; i < that.currentInstance.difArrs.length; i++) { + var ref = that.currentInstance.difArrs[i]; + if (ref.name == definitionType) { + if (!ref.init) { + //如果该类没有加载,则进行加载 + that.analysisDefinitionAsync(that.currentInstance.swaggerData, ref); + } + if (arr) { + var na = new Array(); + na.push(ref.value); + //swpinfo.responseValue = JSON.stringify(na, null, "\t"); + swpinfo.responseValue = KUtils.json5stringifyFormat(na, null, "\t"); + swpinfo.responseJson = na; + } else { + //swpinfo.responseValue = JSON.stringify(ref.value, null, "\t"); + swpinfo.responseValue = KUtils.json5stringifyFormat(ref.value, null, "\t"); + swpinfo.responseJson = ref.value; + } + } + } + //响应参数 + var def = that.getDefinitionByName(definitionType, swpinfo.oas2); + if (def != null) { + if (def.hasOwnProperty("properties")) { + var props = def["properties"]; + props.forEach(function (p) { + //}) + //$.each(props, function (i, p) { + var resParam = new SwaggerBootstrapUiParameter(); + resParam.name = p.name; + if (!KUtils.checkParamArrsExists(swpinfo.responseParameters, resParam)) { + swpinfo.responseParameters.push(resParam); + resParam.description = KUtils.replaceMultipLineStr(p.description); + if (p.type == null || p.type == "") { + if (p.refType != null) { + if (!KUtils.checkIsBasicType(p.refType)) { + resParam.schemaValue = p.refType; + resParam.schema = true; + //存在引用类型,修改默认type + resParam.type = p.refType; + var deepDef = that.getDefinitionByName(p.refType, swpinfo.oas2); + deepResponseRefParameter(swpinfo, that, deepDef, resParam); + resParam.parentTypes.push(p.refType); + deepTreeTableResponseRefParameter(swpinfo, that, deepDef, resParam); + } + } + } else { + resParam.type = p.type; + if (!KUtils.checkIsBasicType(p.type)) { + if (p.refType != null) { + if (!KUtils.checkIsBasicType(p.refType)) { + resParam.schemaValue = p.refType; + //存在引用类型,修改默认type + if (p.type != "array") { + resParam.type = p.refType; + } + var deepDef = that.getDefinitionByName(p.refType, swpinfo.oas2); + deepResponseRefParameter(swpinfo, that, deepDef, resParam); + resParam.parentTypes.push(p.refType); + deepTreeTableResponseRefParameter(swpinfo, that, deepDef, resParam); + } + } else { + resParam.schemaValue = p.type; + //存在引用类型,修改默认type + resParam.type = p.type; + var deepDef = that.getDefinitionByName(p.type, swpinfo.oas2); + deepResponseRefParameter(swpinfo, that, deepDef, resParam); + resParam.parentTypes.push(p.type); + deepTreeTableResponseRefParameter(swpinfo, that, deepDef, resParam); + } + } + } + } + }) + + } + } + + } + //获取请求json + //统计body次数 + if (swpinfo.parameters != null) { + var count = 0; + var tmpJsonValue = null; + var tmpRootXmlName = ""; + swpinfo.parameters.forEach(function (p) { + //}) + //$.each(swpinfo.parameters, function (i, p) { + if (p.in == "body") { + count = count + 1; + if (p.txtValue != null && p.txtValue != "") { + tmpJsonValue = p.txtValue; + tmpRootXmlName = p.schemaValue; + } + } + }) + if (count == 1) { + swpinfo.requestValue = tmpJsonValue; + //判断consume是否是XML + //https://gitee.com/xiaoym/knife4j/issues/I1BCKB + if (KUtils.arrNotEmpty(swpinfo.consumes)) { + var notEmptyConsumes = swpinfo.consumes.filter(consume => KUtils.strNotBlank(consume)); + if (KUtils.arrNotEmpty(notEmptyConsumes)) { + var xmlRequest = notEmptyConsumes.some(consume => consume.toLowerCase().indexOf("xml") > -1); + if (xmlRequest) { + //是Xml请求 + if (KUtils.strNotBlank(tmpJsonValue)) { + var tmpJsonObject = KUtils.json5parse(tmpJsonValue); + var builder = new xml2js.Builder({ + rootName: tmpRootXmlName + }); + var obj = builder.buildObject(tmpJsonObject); + swpinfo.requestValue = builder.buildObject(tmpJsonObject); + swpinfo.xmlRequest = true; + } + } + + } + } + } + //此处判断接口的请求参数类型 + //判断consumes请求类型 + if (apiInfo.consumes != undefined && apiInfo.consumes != null && apiInfo.consumes.length > 0) { + var ctp = apiInfo.consumes[0]; + //if (ctp == "multipart/form-data") { + //console.log("consumes:"+ctp) + if (ctp.indexOf("multipart/form-data") >= 0) { + swpinfo.contentType = ctp; + swpinfo.contentValue = "form-data"; + } else if (ctp.indexOf("text/plain") >= 0) { + swpinfo.contentType = ctp; + swpinfo.contentValue = "raw"; + swpinfo.contentShowValue = "Text(text/plain)"; + swpinfo.contentMode = "text"; + } else if (ctp.indexOf("application/xml") >= 0) { + swpinfo.contentType = ctp; + swpinfo.contentValue = "raw"; + swpinfo.contentShowValue = "XML(application/xml)"; + swpinfo.contentMode = "xml"; + } else { + //根据参数遍历,否则默认是表单x-www-form-urlencoded类型 + var defaultType = "application/x-www-form-urlencoded;charset=UTF-8"; + var defaultValue = "x-www-form-urlencoded"; + //解决springfox的默认bug,存在form参数,接口consumes却是json请求类型 + if (KUtils.arrNotEmpty(swpinfo.parameters)) { + //参数不为空,从参数判断 + for (var i = 0; i < swpinfo.parameters.length; i++) { + var pt = swpinfo.parameters[i]; + if (pt.in == "body") { + if (pt.schemaValue == "MultipartFile"||pt.type=="file") { + defaultType = "multipart/form-data"; + defaultValue = "form-data"; + break; + } else { + defaultValue = "raw"; + defaultType = "application/json"; + if (ctp.indexOf("application/json") >= 0) { + defaultType = ctp; + } + swpinfo.contentMode = "json"; + break; + } + } else { + //https://gitee.com/xiaoym/knife4j/issues/I29KMH + if (pt.schemaValue == "MultipartFile"||pt.type=="file") { + defaultType = "multipart/form-data"; + defaultValue = "form-data"; + break; + } + } + } + swpinfo.contentType = defaultType; + swpinfo.contentValue = defaultValue; + } else { + //如果开发者有指明consumes,则默认取开发者的 + if (ctp.indexOf("application/json") >= 0) { + swpinfo.contentType = ctp; + swpinfo.contentValue = "raw"; + swpinfo.contentShowValue = "JSON(application/json)"; + swpinfo.contentMode = "json"; + } else { + swpinfo.contentType = ctp; + swpinfo.contentValue = defaultValue; + } + } + } + } else { + //根据参数遍历,否则默认是表单x-www-form-urlencoded类型 + var defaultType = "application/x-www-form-urlencoded;charset=UTF-8"; + var defaultValue = "x-www-form-urlencoded"; + for (var i = 0; i < swpinfo.parameters.length; i++) { + var pt = swpinfo.parameters[i]; + if (pt.in == "body") { + if (pt.schemaValue == "MultipartFile"||pt.type=="file") { + defaultType = "multipart/form-data"; + defaultValue = "form-data"; + break; + } else { + defaultValue = "raw"; + defaultType = "application/json"; + swpinfo.contentMode = "json"; + break; + } + } else { + if (pt.schemaValue == "MultipartFile"||pt.type=="file") { + defaultType = "multipart/form-data"; + defaultValue = "form-data"; + break; + } + } + } + swpinfo.contentType = defaultType; + swpinfo.contentValue = defaultValue; + } + }else{ + console.log("123") + swpinfo.contentType = "application/x-www-form-urlencoded"; + swpinfo.contentValue = "x-www-form-urlencoded"; + } + swpinfo.init=true; + //console.log("异步初始化ApiInfo完成") + //console.log(swpinfo); + } +} + +/** + * 解析OAS3的接口 + * @param {*} swpinfo + */ +SwaggerBootstrapUi.prototype.initApiInfoAsyncOAS3=function(swpinfo){ + var that=this; + var apiInfo=swpinfo.originalApiInfo; + if(!swpinfo.init){ + let oa3Data=that.currentInstance.swaggerData; + let refParameterObject=oa3Data["components"]["parameters"]; + //如果当前对象未初始化,进行初始化 + if (apiInfo.hasOwnProperty("parameters")) { + var pameters = apiInfo["parameters"]; + pameters.forEach(function (m) { + //}) + //$.each(pameters, function (i, m) { + var originalName = KUtils.propValue("name", m, ""); + var inType = KUtils.propValue("in", m, ""); + //判断是否包含$ref + //https://gitee.com/xiaoym/knife4j/issues/I2A89C + let refValue=KUtils.propValue("$ref", m, ""); + //console.log("ref:"+refValue) + //忽略参数 + //if (swpinfo.ignoreParameters == null || (swpinfo.ignoreParameters != null && !swpinfo.ignoreParameters.hasOwnProperty(originalName))) { + //暂时放弃增加includeParameters的新特性支持 + //if (KUtils.filterIncludeParameters(inType, originalName, swpinfo.includeParameters)) { + if(KUtils.strNotBlank(refValue)){ + //当前参数是ref类型 + let refParameterName=KUtils.getRefParameterName(refValue); + if(KUtils.strNotBlank(refParameterName)){ + if(KUtils.checkUndefined(refParameterObject)){ + //console.log("参数:"+refParameterName); + let refParameterValue=refParameterObject[refParameterName]; + //console.log(refParameterValue) + if(KUtils.checkUndefined(refParameterValue)){ + that.assembleParameterOAS3(refParameterValue,swpinfo,[]); + } + } + } + }else{ + if(swpinfo.includeParameters!=null){ + //直接判断include的参数即可 + if (KUtils.filterIncludeParameters(inType, originalName, swpinfo.includeParameters)) { + that.assembleParameterOAS3(m,swpinfo,[]); + } + }else{ + if (KUtils.filterIgnoreParameters(inType, originalName, swpinfo.ignoreParameters)) { + that.assembleParameterOAS3(m,swpinfo,[]); + } + } + } + //} + }) + } + //判断是否包含requestBody + if (apiInfo.hasOwnProperty("requestBody")) { + var bodyParameter = apiInfo["requestBody"]; + if (KUtils.checkUndefined(bodyParameter)) { + if (bodyParameter.hasOwnProperty("content") && KUtils.checkUndefined(bodyParameter["content"])) { + var bodyContent = bodyParameter["content"]; + for (var consume in bodyContent) { + var consumeBody = bodyContent[consume]; + if (KUtils.checkUndefined(consumeBody) && consumeBody.hasOwnProperty("schema")) { + //判断是否包含schema + var schema = consumeBody["schema"]; + if (KUtils.arrNotEmpty(swpinfo.consumes)) { + if (!swpinfo.consumes.includes(consume)) { + swpinfo.consumes.push(consume); + } + } else { + var _defaultConsumeArr = []; + _defaultConsumeArr.push(consume); + swpinfo.consumes = _defaultConsumeArr; + } + //此处判断properties,如果有properties,说明有属性,非ref + if (schema.hasOwnProperty("properties") && KUtils.checkUndefined(schema["properties"])) { + //有值,此处可能是application/x-www-form-urlencoded的请求类型 + var requestProperties = schema["properties"]; + var requireArray = []; + if (schema.hasOwnProperty("required") && KUtils.checkUndefined(schema["required"])) { + requireArray = schema["required"]; + } + for (var prop in requestProperties) { + var parameterInfo = requestProperties[prop]; + parameterInfo["name"] = prop; + parameterInfo["in"] = "query"; + that.assembleParameterOAS3(parameterInfo, swpinfo, requireArray); + } + } else { + //此处有可能是array类型 + var arrFlag = that.getSwaggerModelRefArray(schema, swpinfo.oas2); + var type = that.getSwaggerModelRefType(schema, swpinfo.oas2); + if (KUtils.checkUndefined(type)) { + //在此处构造openAPI2.0的结构,复用原来的解析方法 + var originalSchema = null; + var originalParameterName = KUtils.camelCase(type); + if (arrFlag) { + originalSchema = { + "type": "array", + "items": { + "originalRef": type, + "$ref": "#/components/schemas/" + type + } + } + originalParameterName = originalParameterName + "s"; + } else { + originalSchema = { + "originalRef": type, + "$ref": "#/components/schemas/" + type + } + } + var originalOpenApiParameter = { + "in": "body", + "description": type, + "name": originalParameterName, + "required": true, + "schema": originalSchema + }; + that.assembleParameterOAS3(originalOpenApiParameter, swpinfo, []); + + //此时,创建请求参数 + /* var minfo = new SwaggerBootstrapUiParameter(); + minfo.name = type; + minfo.type = type; + minfo.in = "body"; + minfo.require = true; + minfo.description = KUtils.replaceMultipLineStr(KUtils.propValue("description", schema, "")); + var _format = KUtils.propValue("format", schema, ""); + if (KUtils.strNotBlank(_format)) { + //存在format + var _rtype = minfo.type + "(" + _format + ")"; + minfo.type = _rtype; + } + if(arrFlag){ + minfo.type="array"; + } + //存在schema属性,请求对象是实体类 + minfo.schema = true; + minfo.schemaValue = type; + var def = that.getDefinitionByName(type,swpinfo.oas2); + if (def != null) { + minfo.def = def; + minfo.value = def.value; + if (def.description != undefined && def.description != null && def.description != "") { + minfo.description = KUtils.replaceMultipLineStr(def.description); + } + } else { + //此处判断Array的类型,如果 + if (type == "string") { + minfo.value = ""; + } + if (type == "integer") { + //判断format + if (schema["format"] != undefined && schema["format"] != null && schema["format"] == "int32") { + minfo.value = 0; + } else { + minfo.value = 1054661322597744642; + } + } + if (type == "number") { + if (schema["format"] != undefined && schema["format"] != null && schema["format"] == "double") { + minfo.value = 0.5; + } else { + minfo.value = 0; + } + } + } + if (!KUtils.checkParamArrsExists(swpinfo.parameters, minfo)) { + swpinfo.parameters.push(minfo); + //判断当前属性是否是schema + if (minfo.schema) { + minfo.parentTypes.push(minfo.schemaValue); + } + } */ + } + } + } + } + //判断是否xml请求,openapiv3中没有consumes,此处也只能强加一个判断 + if (KUtils.arrNotEmpty(swpinfo.consumes)) { + var xmlConsume = swpinfo.consumes.filter(consume => consume.indexOf("xml") > -1); + if (KUtils.arrNotEmpty(xmlConsume)) { + swpinfo.consumes = ["application/xml"]; + } + } + } + } + + } + + var definitionType = null; + var arr = false; + //解析responsecode + if (typeof (apiInfo.responses) != 'undefined' && apiInfo.responses != null) { + var resp = apiInfo.responses; + var rpcount = 0; + //console.log(resp) + for (var status in resp) { + var swaggerResp = new SwaggerBootstrapUiResponseCode(); + var rescrobj = resp[status]; + swaggerResp.oas2 = swpinfo.oas2; + swaggerResp.code = status; + swaggerResp.description = rescrobj["description"]; + var rptype = null; + //console.log(rescrobj) + //3.0判断content + if(rescrobj.hasOwnProperty("content")&&KUtils.checkUndefined(rescrobj["content"])){ + var content=rescrobj["content"]; + for(var ckey in content){ + var respContentProduces=content[ckey]; + if(respContentProduces.hasOwnProperty("schema")&&KUtils.checkUndefined(respContentProduces["schema"])){ + var schema = respContentProduces["schema"]; + //单引用类型 + //判断是否是数组类型 + //var regex = new RegExp("#/definitions/(.*)$", "ig"); + var regex = new RegExp(KUtils.oasmodel(swpinfo.oas2), "ig"); + if (schema.hasOwnProperty("$ref")) { + if (regex.test(schema["$ref"])) { + var ptype = RegExp.$1; + swpinfo.responseParameterRefName = ptype; + swaggerResp.responseParameterRefName = ptype; + definitionType = ptype; + rptype = ptype; + swaggerResp.schema = ptype; + } + } else if (schema.hasOwnProperty("type")) { + var t = schema["type"]; + if (t == "array") { + arr = true; + if (schema.hasOwnProperty("items")) { + var items = schema["items"]; + var itref = items["$ref"]; + //此处需判断items是否数组 + if (items.hasOwnProperty("type")) { + if (items["type"] == "array") { + itref = items["items"]["$ref"]; + } + } + if (regex.test(itref)) { + var ptype = RegExp.$1; + swpinfo.responseParameterRefName = ptype; + swaggerResp.responseParameterRefName = ptype; + definitionType = ptype; + rptype = ptype; + swaggerResp.schema = ptype; + } + } + } else { + //判断是否存在properties属性 + if (schema.hasOwnProperty("properties")) { + swaggerResp.schema = t; + //自定义类型、放入difarrs对象中 + var swud = new SwaggerBootstrapUiDefinition(); + swud.name = swpinfo.id; + swud.description = "自定义Schema"; + definitionType = swud.name; + rptype = swud.name; + swaggerResp.responseParameterRefName = swud.name; + + var properties = schema["properties"]; + var defiTypeValue = {}; + for (var property in properties) { + var spropObj = new SwaggerBootstrapUiProperty(); + spropObj.name = property; + var propobj = properties[property]; + spropObj.originProperty = propobj; + spropObj.type = KUtils.propValue("type", propobj, "string"); + spropObj.description = KUtils.propValue("description", propobj, ""); + //spropObj.example = KUtils.propValue("example", propobj, ""); + spropObj.example = KUtils.getExample("example", propobj, ""); + spropObj.format = KUtils.propValue("format", propobj, ""); + spropObj.required = KUtils.propValue("required", propobj, false); + if (swud.required.length > 0) { + //有required属性,需要再判断一次 + //if ($.inArray(spropObj.name, swud.required) > -1) { + if (swud.required.includes(spropObj.name)) { + //存在 + spropObj.required = true; + } + } + //默认string类型 + var propValue = ""; + //判断是否有类型 + if (propobj.hasOwnProperty("type")) { + var type = propobj["type"]; + //判断是否有example + if (propobj.hasOwnProperty("example")) { + if (type == "string") { + //propValue = String(KUtils.propValue("example", propobj, "")); + propValue = KUtils.getExample("example", propobj, ""); + } else { + propValue = propobj["example"]; + } + } else if (KUtils.checkIsBasicType(type)) { + propValue = KUtils.getBasicTypeValue(type); + } + + } + spropObj.value = propValue; + //判断是否有format,如果是integer,判断是64位还是32位 + if (spropObj.format != null && spropObj.format != undefined && spropObj.format != "") { + //spropObj.type=spropObj.format; + spropObj.type += "(" + spropObj.format + ")"; + } + swud.properties.push(spropObj); + defiTypeValue[property] = propValue; + } + swud.value = defiTypeValue; + swud.init = true; + that.currentInstance.difArrs.push(swud); + } else { + //判断是否是基础类型 + if (KUtils.checkIsBasicType(t)) { + //基础类型 + swpinfo.responseText = t; + swpinfo.responseBasicType = true; + + //响应状态码的响应内容 + swaggerResp.responseText = t; + swaggerResp.responseBasicType = true; + } + } + } + } + } + break; + } + } + if (rescrobj.hasOwnProperty("schema") && KUtils.checkUndefined(rescrobj["schema"])) { + var schema = rescrobj["schema"]; + + } + if (rptype != null) { + //查询 + //响应参数 + var def = that.getDefinitionByName(rptype, swpinfo.oas2); + if (def != null) { + if (arr) { + var na = new Array(); + na.push(def.value); + //swaggerResp.responseValue = JSON.stringify(na, null, "\t"); + swaggerResp.responseValue = KUtils.json5stringifyFormat(na, null, "\t"); + swaggerResp.responseJson = na; + } else { + //swaggerResp.responseValue = JSON.stringify(def.value, null, "\t"); + swaggerResp.responseValue = KUtils.json5stringifyFormat(def.value, null, "\t"); + swaggerResp.responseJson = def.value; + } + if (def.hasOwnProperty("properties")) { + var props = def["properties"]; + props.forEach(function (p) { + //}) + //$.each(props, function (i, p) { + var resParam = new SwaggerBootstrapUiParameter(); + resParam.name = p.name; + if (!KUtils.checkParamArrsExists(swaggerResp.responseParameters, resParam)) { + swaggerResp.responseParameters.push(resParam); + resParam.description = KUtils.replaceMultipLineStr(p.description); + if (p.type == null || p.type == "") { + if (p.refType != null) { + if (!KUtils.checkIsBasicType(p.refType)) { + resParam.schemaValue = p.refType; + resParam.schema = true; + //存在引用类型,修改默认type + resParam.type = p.refType; + var deepDef = that.getDefinitionByName(p.refType, swpinfo.oas2); + deepResponseRefParameter(swaggerResp, that, deepDef, resParam); + resParam.parentTypes.push(p.refType); + deepTreeTableResponseRefParameter(swaggerResp, that, deepDef, resParam); + } + } + } else { + resParam.type = p.type; + if (!KUtils.checkIsBasicType(p.type)) { + if (p.refType != null) { + if (!KUtils.checkIsBasicType(p.refType)) { + resParam.schemaValue = p.refType; + resParam.schema = true; + //存在引用类型,修改默认type + if (p.type != "array") { + resParam.type = p.refType; + } + var deepDef = that.getDefinitionByName(p.refType, swpinfo.oas2); + deepResponseRefParameter(swaggerResp, that, deepDef, resParam); + resParam.parentTypes.push(p.refType); + deepTreeTableResponseRefParameter(swaggerResp, that, deepDef, resParam); + } + } else { + resParam.schemaValue = p.type; + resParam.schema = true; + //存在引用类型,修改默认type + resParam.type = p.type; + var deepDef = that.getDefinitionByName(p.type, swpinfo.oas2); + deepResponseRefParameter(swaggerResp, that, deepDef, resParam); + resParam.parentTypes.push(p.type); + deepTreeTableResponseRefParameter(swaggerResp, that, deepDef, resParam); + } + } + } + } + }) + + } + } + } + + if (swaggerResp.schema != null && swaggerResp.schema != undefined) { + rpcount = rpcount + 1; + } + //判断是否有响应headers + if (rescrobj.hasOwnProperty("headers")) { + var _headers = rescrobj["headers"]; + swaggerResp.responseHeaderParameters = new Array(); + for (var _headerN in _headers) { + var _hv = { + ..._headers[_headerN], + name: _headerN, + id: md5(_headerN), + pid: "-1" + } + /* + var _hv = $.extend({}, _headers[_headerN], { + name: _headerN, + id: md5(_headerN), + pid: "-1" + }); */ + swaggerResp.responseHeaderParameters.push(_hv); + } + if (status == "200") { + swpinfo.responseHeaderParameters = swaggerResp.responseHeaderParameters; + } + } + swpinfo.responseCodes.push(swaggerResp); + } + swpinfo.multipartResponseSchemaCount = rpcount; + if (rpcount > 1) { + swpinfo.multipartResponseSchema = true; + } + } + + if (definitionType != null && !swpinfo.multipartResponseSchema) { + //查询 + for (var i = 0; i < that.currentInstance.difArrs.length; i++) { + var ref = that.currentInstance.difArrs[i]; + if (ref.name == definitionType) { + if (!ref.init) { + //如果该类没有加载,则进行加载 + that.analysisDefinitionAsync(that.currentInstance.swaggerData, ref); + } + if (arr) { + var na = new Array(); + na.push(ref.value); + //swpinfo.responseValue = JSON.stringify(na, null, "\t"); + swpinfo.responseValue = KUtils.json5stringifyFormat(na, null, "\t"); + swpinfo.responseJson = na; + } else { + //swpinfo.responseValue = JSON.stringify(ref.value, null, "\t"); + swpinfo.responseValue = KUtils.json5stringifyFormat(ref.value, null, "\t"); + swpinfo.responseJson = ref.value; + } + } + } + //响应参数 + var def = that.getDefinitionByName(definitionType, swpinfo.oas2); + if (def != null) { + if (def.hasOwnProperty("properties")) { + var props = def["properties"]; + props.forEach(function (p) { + //}) + //$.each(props, function (i, p) { + var resParam = new SwaggerBootstrapUiParameter(); + resParam.name = p.name; + if (!KUtils.checkParamArrsExists(swpinfo.responseParameters, resParam)) { + swpinfo.responseParameters.push(resParam); + resParam.description = KUtils.replaceMultipLineStr(p.description); + if (p.type == null || p.type == "") { + if (p.refType != null) { + if (!KUtils.checkIsBasicType(p.refType)) { + resParam.schemaValue = p.refType; + resParam.schema = true; + //存在引用类型,修改默认type + resParam.type = p.refType; + var deepDef = that.getDefinitionByName(p.refType, swpinfo.oas2); + deepResponseRefParameter(swpinfo, that, deepDef, resParam); + resParam.parentTypes.push(p.refType); + deepTreeTableResponseRefParameter(swpinfo, that, deepDef, resParam); + } + } + } else { + resParam.type = p.type; + if (!KUtils.checkIsBasicType(p.type)) { + if (p.refType != null) { + if (!KUtils.checkIsBasicType(p.refType)) { + resParam.schemaValue = p.refType; + //存在引用类型,修改默认type + if (p.type != "array") { + resParam.type = p.refType; + } + var deepDef = that.getDefinitionByName(p.refType, swpinfo.oas2); + deepResponseRefParameter(swpinfo, that, deepDef, resParam); + resParam.parentTypes.push(p.refType); + deepTreeTableResponseRefParameter(swpinfo, that, deepDef, resParam); + } + } else { + resParam.schemaValue = p.type; + //存在引用类型,修改默认type + resParam.type = p.type; + var deepDef = that.getDefinitionByName(p.type, swpinfo.oas2); + deepResponseRefParameter(swpinfo, that, deepDef, resParam); + resParam.parentTypes.push(p.type); + deepTreeTableResponseRefParameter(swpinfo, that, deepDef, resParam); + } + } + } + } + }) + + } + } + + } + //获取请求json + //统计body次数 + if (swpinfo.parameters != null) { + var count = 0; + var tmpJsonValue = null; + var tmpRootXmlName = ""; + swpinfo.parameters.forEach(function (p) { + //}) + //$.each(swpinfo.parameters, function (i, p) { + if (p.in == "body") { + count = count + 1; + if (p.txtValue != null && p.txtValue != "") { + tmpJsonValue = p.txtValue; + tmpRootXmlName = p.schemaValue; + } + } + }) + if (count == 1) { + swpinfo.requestValue = tmpJsonValue; + //判断consume是否是XML + //https://gitee.com/xiaoym/knife4j/issues/I1BCKB + if (KUtils.arrNotEmpty(swpinfo.consumes)) { + var notEmptyConsumes = swpinfo.consumes.filter(consume => KUtils.strNotBlank(consume)); + if (KUtils.arrNotEmpty(notEmptyConsumes)) { + var xmlRequest = notEmptyConsumes.some(consume => consume.toLowerCase().indexOf("xml") > -1); + if (xmlRequest) { + //是Xml请求 + if (KUtils.strNotBlank(tmpJsonValue)) { + var tmpJsonObject = KUtils.json5parse(tmpJsonValue); + var builder = new xml2js.Builder({ + rootName: tmpRootXmlName + }); + var obj = builder.buildObject(tmpJsonObject); + swpinfo.requestValue = builder.buildObject(tmpJsonObject); + swpinfo.xmlRequest = true; + } + } + + } + } + } + //此处判断接口的请求参数类型 + //判断consumes请求类型 + if (swpinfo.consumes != undefined && swpinfo.consumes != null && swpinfo.consumes.length > 0) { + var ctp = swpinfo.consumes[0]; + //if (ctp == "multipart/form-data") { + //console.log("consumes:"+ctp) + if (ctp.indexOf("multipart/form-data") >= 0) { + swpinfo.contentType = ctp; + swpinfo.contentValue = "form-data"; + } else if (ctp.indexOf("text/plain") >= 0) { + swpinfo.contentType = ctp; + swpinfo.contentValue = "raw"; + swpinfo.contentShowValue = "Text(text/plain)"; + swpinfo.contentMode = "text"; + } else if (ctp.indexOf("application/xml") >= 0) { + swpinfo.contentType = ctp; + swpinfo.contentValue = "raw"; + swpinfo.contentShowValue = "XML(application/xml)"; + swpinfo.contentMode = "xml"; + } else { + //根据参数遍历,否则默认是表单x-www-form-urlencoded类型 + var defaultType = "application/x-www-form-urlencoded;charset=UTF-8"; + var defaultValue = "x-www-form-urlencoded"; + //解决springfox的默认bug,存在form参数,接口consumes却是json请求类型 + if (KUtils.arrNotEmpty(swpinfo.parameters)) { + //参数不为空,从参数判断 + for (var i = 0; i < swpinfo.parameters.length; i++) { + var pt = swpinfo.parameters[i]; + if (pt.in == "body") { + if (pt.schemaValue == "MultipartFile"||pt.type=="file") { + defaultType = "multipart/form-data"; + defaultValue = "form-data"; + break; + } else { + defaultValue = "raw"; + defaultType = "application/json"; + if (ctp.indexOf("application/json") >= 0) { + defaultType = ctp; + } + swpinfo.contentMode = "json"; + break; + } + } else { + if (pt.schemaValue == "MultipartFile"||pt.type=="file") { + defaultType = "multipart/form-data"; + defaultValue = "form-data"; + break; + } + } + } + swpinfo.contentType = defaultType; + swpinfo.contentValue = defaultValue; + } else { + //如果开发者有指明consumes,则默认取开发者的 + if (ctp.indexOf("application/json") >= 0) { + swpinfo.contentType = ctp; + swpinfo.contentValue = "raw"; + swpinfo.contentShowValue = "JSON(application/json)"; + swpinfo.contentMode = "json"; + } else { + swpinfo.contentType = ctp; + swpinfo.contentValue = defaultValue; + } + } + } + } else { + //根据参数遍历,否则默认是表单x-www-form-urlencoded类型 + var defaultType = "application/x-www-form-urlencoded;charset=UTF-8"; + var defaultValue = "x-www-form-urlencoded"; + for (var i = 0; i < swpinfo.parameters.length; i++) { + var pt = swpinfo.parameters[i]; + if (pt.in == "body") { + if (pt.schemaValue == "MultipartFile"||pt.type=="file") { + defaultType = "multipart/form-data"; + defaultValue = "form-data"; + break; + } else { + defaultValue = "raw"; + defaultType = "application/json"; + swpinfo.contentMode = "json"; + break; + } + } else { + if (pt.schemaValue == "MultipartFile"||pt.type=="file") { + defaultType = "multipart/form-data"; + defaultValue = "form-data"; + break; + } + } + } + swpinfo.contentType = defaultType; + swpinfo.contentValue = defaultValue; + } + } + swpinfo.init = true; + //console.log("异步初始化ApiInfo完成") + //console.log(swpinfo); + } +} +/** + * 创建对象实例,返回SwaggerBootstrapUiApiInfo实例 + * @param {*} path path对象 + * @param {*} mtype 接口类型 + * @param {*} apiInfo 对象 + * @param {*} appendBaePathFlag 是否追加basePath + */ +SwaggerBootstrapUi.prototype.createApiInfoInstance = function (path, mtype, apiInfo,appendBaePathFlag) { + var that = this; + + var swpinfo = new SwaggerBootstrapUiApiInfo(); + //console.log(that.currentInstance) + //给接口增加一个版本属性 + if (that.currentInstance.oas2()) { + swpinfo.oas2 = true; + } else { + swpinfo.oas2 = false; + } + //原始对象赋值,作为二次异步解析 + swpinfo.originalApiInfo = apiInfo; + //添加basePath + var basePath = that.currentInstance.basePath; + //此处标注host是因为host中可能存在basePath的情况 + //例如,Host:http://192.168.0.1:8080/abc ? + //var newfullPath = that.currentInstance.host; + var newfullPath = ""; + var basePathFlag = false; + //basePath="/addd/"; + if (basePath != "" && basePath != "/") { + /* if(!that.baseSpringFox){ + //springfox2.10.5版本不在追加basePath + //https://gitee.com/xiaoym/knife4j/issues/I230K8 + newfullPath += basePath; + } */ + //如果非空,非根目录 + basePathFlag = true; + } + //在微服务的情况下springfox不会追加basePath + //单体架构下springfox会追加basePath + //根据appendBasePathFlag标志位判断是否需要追加basePath + if(!appendBaePathFlag){ + newfullPath += basePath; + } + //此处追加springdoc-openapi的逻辑 + //springdoc-openapi版本中对于接口不会再paths节点追加basePath,所以Knife4j自动化处理 + if(that.springdoc){ + var pathname=window.location.pathname; + var reg=new RegExp("(.*?)/doc\.html.*$","ig"); + var tempPath=""; + if(reg.test(pathname)){ + tempPath=RegExp.$1; + } + newfullPath += tempPath; + } + newfullPath += path; + //截取字符串 + //var newurl = newfullPath.substring(newfullPath.indexOf("/")); + //that.log("新的url:"+newurl) + //newurl = newurl.replace("//", "/"); + var newurl=newfullPath; + //判断应用实例的baseurl + /* if (that.currentInstance.baseUrl != "" && that.currentInstance.baseUrl != "/") { + newurl = that.currentInstance.baseUrl + newurl; + } */ + //添加servicePath + if(KUtils.strNotBlank(that.currentInstance.servicePath)){ + var tempUrl=that.currentInstance.servicePath; + if(!newfullPath.startsWith("/")){ + tempUrl=tempUrl+"/"; + } + tempUrl=tempUrl+newfullPath; + newurl=tempUrl; + } + //var startApiTime = new Date().getTime(); + swpinfo.showUrl = newurl; + //swpinfo.id="ApiInfo"+Math.round(Math.random()*1000000); + swpinfo.instanceId = that.currentInstance.id; + swpinfo.host = that.currentInstance.host; + + swpinfo.url = newurl; + swpinfo.originalUrl = newurl; + + //new --> https://github.com/xiaoymin/swagger-bootstrap-ui/pull/108 + /*var urlForRealUsage=newurl.replace(/^([^{]+).*$/g, '$1'); + swpinfo.url=urlForRealUsage; + swpinfo.originalUrl=urlForRealUsage;*/ + swpinfo.basePathFlag = basePathFlag; + swpinfo.methodType = mtype.toUpperCase(); + //add by xiaoymin 2020-3-11 20:34:39 + // 判断当前接口是否支持调试 + if (KUtils.checkUndefined(that.configuration.supportedSubmitMethods)) { + if (!that.configuration.supportedSubmitMethods.includes(mtype.toLowerCase())) { + swpinfo.configurationDebugSupport = false; + } + } + //接口id使用MD5策略,缓存整个调试参数到localStorage对象中,供二次调用 + var md5Str = newurl + mtype.toUpperCase(); + swpinfo.id = md5(md5Str); + swpinfo.versionId = KUtils.md5Id(apiInfo); + if (apiInfo != null) { + this.readApiSecurity(swpinfo,apiInfo); + this.readOpenApiSpeci(path,swpinfo,apiInfo,that.currentInstance.swaggerData,that.currentInstance.openApiBaseInfo); + if (apiInfo.hasOwnProperty("deprecated")) { + swpinfo.deprecated = apiInfo["deprecated"]; + } + //此处判断tags是否为空 + //https://gitee.com/xiaoym/knife4j/issues/I27M98 + if(KUtils.arrEmpty(apiInfo.tags)){ + apiInfo.tags = ['default']; + } + /* if (!apiInfo.tags) { + apiInfo.tags = ['default']; + } */ + //swpinfo.consumes = apiInfo.consumes; + swpinfo.consumes = KUtils.getValue(apiInfo, "consumes", [].concat("application/x-www-form-urlencoded"), true); + swpinfo.description = KUtils.getValue(apiInfo, "description", "", true); + //描述支持markdown + if (KUtils.strNotBlank(swpinfo.description)) { + swpinfo.description = marked(swpinfo.description); + } + swpinfo.operationId = apiInfo.operationId; + swpinfo.summary = KUtils.toString(apiInfo.summary,"").replace(/\//g,"-"); + //针对summary做一次非空判断 + if(KUtils.strBlank(swpinfo.summary)){ + swpinfo.summary=apiInfo.operationId; + } + swpinfo.tags = apiInfo.tags; + //读取扩展属性 + this.readApiInfoInstanceExt(swpinfo, apiInfo); + //operationId + swpinfo.operationId = KUtils.getValue(apiInfo, "operationId", "", true); + var _groupName = that.currentInstance.name; + //设置hashurl + swpinfo.tags.forEach(function (tag) { + var _hashUrl = "#/" + _groupName + "/" + tag + "/" + swpinfo.operationId; + swpinfo.hashCollections.push(_hashUrl); + }) + if (KUtils.checkUndefined(apiInfo.produces)) { + swpinfo.produces = apiInfo.produces; + } else { + swpinfo.produces = [].concat("*/*"); + } + //swpinfo.produces = KUtils.getValue(apiInfo,"produces","[\"*/*\"]",true); + //二次解析截取start + + //二次解析截取end + //that.currentInstance.paths.push(swpinfo); + for (var i = 0; i < apiInfo.tags.length; i++) { + var tagName = apiInfo.tags[i]; + that.mergeApiInfoSelfTags(tagName); + } + } + //二次截取判断start + + //二次截取判断end + //第一次加载 + if (that.currentInstance.firstLoad) { + that.currentInstance.cacheInstance.cacheApis.push(swpinfo.id); + //that.currentInstance.groupApis.push(swpinfo.id); + //构建当前版本对象 + var _uptObject = new SwaggerBootstrapUiCacheUptApi(swpinfo.versionId); + _uptObject.url = swpinfo.url; + that.currentInstance.cacheInstance.updateApis[swpinfo.id] = _uptObject; + //that.log(that.currentInstance) + } else { + //判断当前是否接口信息有变更,兼容赏上个版本的缓存 + var _cacheUa = that.currentInstance.cacheInstance.updateApis; + if (_cacheUa.hasOwnProperty(swpinfo.id)) { + var _uptInfo = _cacheUa[swpinfo.id]; + if (_uptInfo != null && _uptInfo != undefined) { + if (_uptInfo.versionId != swpinfo.versionId) { + //已经存在变更 + swpinfo.hasChanged = true; + } + } + } else { + //构建当前版本对象 + var _uptObject = new SwaggerBootstrapUiCacheUptApi(swpinfo.versionId); + _uptObject.url = swpinfo.url; + that.currentInstance.cacheInstance.updateApis[swpinfo.id] = _uptObject; + that.log(that.currentInstance.cacheInstance) + } + } + return swpinfo; +} + +/** + * 解析Security参数,用于判断该接口是否需要Security的标志 + * @param {*} swpinfo + * @param {*} apiInfo + */ +SwaggerBootstrapUi.prototype.readApiSecurity=function(swpinfo,apiInfo){ + if(swpinfo.oas2){ + this.readApiSecurityOAS2(swpinfo,apiInfo); + }else{ + this.readApiSecurityOAS3(swpinfo,apiInfo); + } +} +/** + * OAS2.0结构 + * @param {*} swpinfo + * @param {*} apiInfo + */ +SwaggerBootstrapUi.prototype.readApiSecurityOAS2=function(swpinfo,apiInfo){ + //判断是否包含security节点 + if(KUtils.checkUndefined(apiInfo)&&apiInfo.hasOwnProperty("security")){ + var securityArr=apiInfo["security"]; + if(KUtils.arrNotEmpty(securityArr)){ + var securityKeys=new Array(); + securityArr.forEach(sa=>{ + var saKeys=Object.keys(sa||{}); + if(KUtils.arrNotEmpty(saKeys)){ + securityKeys=securityKeys.concat(saKeys); + } + }) + if(KUtils.arrNotEmpty(securityKeys)){ + swpinfo.securityFlag=true; + swpinfo.securityKeys=securityKeys; + } + //console.log(swpinfo); + } + } +} + +SwaggerBootstrapUi.prototype.readApiSecurityOAS3=function(swpinfo,apiInfo){ + //判断是否包含security节点 + if(KUtils.checkUndefined(apiInfo)&&apiInfo.hasOwnProperty("security")){ + var securityArr=apiInfo["security"]; + if(KUtils.arrNotEmpty(securityArr)){ + var securityKeys=new Array(); + securityArr.forEach(sa=>{ + var saKeys=Object.keys(sa||{}); + if(KUtils.arrNotEmpty(saKeys)){ + securityKeys=securityKeys.concat(saKeys); + } + }) + if(KUtils.arrNotEmpty(securityKeys)){ + swpinfo.securityFlag=true; + swpinfo.securityKeys=securityKeys; + } + //console.log(swpinfo); + } + } +} +/** + * 读取原始OpenAPI数据 + * @param {*} swpinfo + * @param {*} apiInfo + * @param {*} swaggerData + */ +SwaggerBootstrapUi.prototype.readOpenApiSpeci=function(path,swpinfo,apiInfo,swaggerData,openApiBaseInfo){ + try{ + var copyOpenApi=cloneDeep(openApiBaseInfo||{}); + var methodTypeApi=swpinfo.methodType.toLowerCase(); + var methodObject={}; + methodObject[methodTypeApi]=apiInfo; + var paths={}; + paths[path]=methodObject; + copyOpenApi['paths']=paths; + var def={}; + if(swpinfo.oas2){ + def=this.readOpenApiSpeciOAS2(apiInfo,swaggerData); + copyOpenApi['definitions']=def; + }else{ + def=this.readOpenApiSpeciOAS3(apiInfo,swaggerData); + copyOpenApi['components']=def; + } + swpinfo.openApiRaw=copyOpenApi; + //查询definitions节点 + }catch(e){ + if(window.console){ + window.console.error(e); + } + } + +} +/** + * OAS2结构 + * @param {*} apiInfo + * @param {*} swaggerData + */ +SwaggerBootstrapUi.prototype.readOpenApiSpeciOAS2=function(apiInfo,swaggerData){ + var definitionCopy={}; + var apiStr=KUtils.json5stringify(apiInfo); + var reg=new RegExp("\"#/definitions/(.*?)\"","ig"); + let result; + var definitions=swaggerData["definitions"]; + var modelArrays=new Array(); + while((result=reg.exec(apiStr))!=null){ + var model=result[1]; + if(KUtils.checkUndefined(model)){ + if(!modelArrays.includes(model)){ + modelArrays.push(model); + } + } + } + if(modelArrays.length>0){ + //不为空,找model的子属性是否包含model + modelArrays.forEach(model=>{ + readOpenAPIModel(model,modelArrays,definitions,true); + }) + modelArrays.forEach(model=>{ + definitionCopy[model]=definitions[model]; + }) + } + return definitionCopy; +} + +function readOpenAPIModel(model,modelArrays,definitions,oas2){ + if(KUtils.checkUndefined(model)&&KUtils.strNotBlank(model)){ + var def=definitions[model]; + if(KUtils.checkUndefined(def)){ + var defStr=KUtils.json5stringify(def); + //找子属性的model + var reg; + if(oas2){ + reg=new RegExp("\"#/definitions/(.*?)\"","ig"); + }else{ + reg=new RegExp("\"#/components/schemas/(.*?)\"","ig"); + } + let result; + while((result=reg.exec(defStr))!=null){ + var cmodel=result[1]; + if(KUtils.checkUndefined(cmodel)){ + if(!modelArrays.includes(cmodel)){ + modelArrays.push(cmodel); + readOpenAPIModel(cmodel,modelArrays,definitions,oas2); + } + } + } + } + } +} +/** + * OAS3 + * @param {*} apiInfo + * @param {*} swaggerData + */ +SwaggerBootstrapUi.prototype.readOpenApiSpeciOAS3=function(apiInfo,swaggerData){ + var definitionCopy={}; + var apiStr=KUtils.json5stringify(apiInfo); + var reg=new RegExp("\"#/components/schemas/(.*?)\"","ig"); + let result; + var definitions=swaggerData["components"]; + var modelArrays=new Array(); + while((result=reg.exec(apiStr))!=null){ + var model=result[1]; + if(KUtils.checkUndefined(model)){ + if(!modelArrays.includes(model)){ + modelArrays.push(model); + } + } + } + if(modelArrays.length>0){ + //不为空,找model的子属性是否包含model + modelArrays.forEach(model=>{ + readOpenAPIModel(model,modelArrays,definitions,false); + }) + modelArrays.forEach(model=>{ + definitionCopy[model]=definitions[model]; + }) + } + return definitionCopy; +} +/** + * 读取API接口的扩展属性 + * @param {*} swpinfo + * @param {*} apiInfo + */ +SwaggerBootstrapUi.prototype.readApiInfoInstanceExt = function (swpinfo, apiInfo) { + if (swpinfo.oas2) { + this.readApiInfoInstanceExtOAS2(swpinfo, apiInfo); + } else { + this.readApiInfoInstanceExtOAS3(swpinfo, apiInfo); + } +} +/** + * OAS2.0 + * @param {} swpinfo + * @param {*} apiInfo + */ +SwaggerBootstrapUi.prototype.readApiInfoInstanceExtOAS2 = function (swpinfo, apiInfo) { + //读取扩展属性x-ignoreParameters + if (apiInfo.hasOwnProperty("x-ignoreParameters")) { + var ignoArr = apiInfo["x-ignoreParameters"]; + //忽略参数对象 + swpinfo.ignoreParameters = ignoArr[0]; + } + //读取扩展属性x-includeParameters + if (apiInfo.hasOwnProperty("x-includeParameters")) { + var includeArr = apiInfo["x-includeParameters"]; + //包含参数 + swpinfo.includeParameters = includeArr[0]; + } + //读取扩展属性x-order值 + if (apiInfo.hasOwnProperty("x-order")) { + swpinfo.order = parseInt(apiInfo["x-order"]); + } + //读取扩展属性x-author + if (apiInfo.hasOwnProperty("x-author")) { + var xauthor = apiInfo["x-author"]; + if (KUtils.strNotBlank(xauthor)) { + swpinfo.author = xauthor; + } + } +} + +/** + * OAS3.0 + * @param {*} swpinfo + * @param {*} apiInfo + */ +SwaggerBootstrapUi.prototype.readApiInfoInstanceExtOAS3 = function (swpinfo, apiInfo) { + //获取扩展属性 + if (apiInfo.hasOwnProperty("extensions") && KUtils.checkUndefined(apiInfo["extensions"])) { + var extensions = apiInfo["extensions"]; + //读取扩展属性x-ignoreParameters + if (extensions.hasOwnProperty("x-ignoreParameters")) { + var ignoArr = extensions["x-ignoreParameters"]; + //忽略参数对象 + swpinfo.ignoreParameters = ignoArr[0]; + } + //读取扩展属性x-includeParameters + if (extensions.hasOwnProperty("x-includeParameters")) { + var includeArr = extensions["x-includeParameters"]; + //包含参数 + swpinfo.includeParameters = includeArr[0]; + } + //读取扩展属性x-order值 + if (extensions.hasOwnProperty("x-order")) { + swpinfo.order = parseInt(extensions["x-order"]); + } + //读取扩展属性x-author + if (extensions.hasOwnProperty("x-author")) { + var xauthor = extensions["x-author"]; + if (KUtils.strNotBlank(xauthor)) { + swpinfo.author = xauthor; + } + } + } +} + +/** + * 处理Open API v2的请求参数,获取SwaggerBootstrapUiParameter的对象 + * @param m 原始parameter参数 + * @param swpinfo knife4j 创建的API对象 + */ +SwaggerBootstrapUi.prototype.assembleParameter = function (m, swpinfo) { + var that = this; + var originalName = KUtils.propValue("name", m, ""); + var inType = KUtils.propValue("in", m, ""); + var minfo = new SwaggerBootstrapUiParameter(); + minfo.name = originalName; + minfo.ignoreFilterName = originalName; + minfo.type = KUtils.propValue("type", m, ""); + minfo.in = inType; + minfo.require = KUtils.propValue("required", m, false); + minfo.description = KUtils.replaceMultipLineStr(KUtils.propValue("description", m, "")); + //add at 2019-12-10 09:20:08 判断请求参数类型是否包含format + //https://github.com/xiaoymin/swagger-bootstrap-ui/issues/161 + var _format = KUtils.propValue("format", m, ""); + if (KUtils.strNotBlank(_format)) { + //存在format + var _rtype = minfo.type + "(" + _format + ")"; + minfo.type = _rtype; + } + //判断是否有枚举类型 + if (m.hasOwnProperty("enum")) { + //that.log("包括枚举类型...") + //that.log(m.enum); + minfo.enum = m.enum; + //that.log(minfo); + //枚举类型,描述显示可用值 + var avaiableArrStr = m.enum.join(","); + if (m.description != null && m.description != undefined && m.description != "") { + minfo.description = m.description + ",可用值:" + avaiableArrStr; + } else { + minfo.description = "枚举类型,可用值:" + avaiableArrStr; + } + + } + //判断你是否有默认值(后台) + if (m.hasOwnProperty("default")) { + minfo.txtValue = m["default"]; + minfo.example=m["default"]; + } + //swagger 2.9.2版本默认值响应X-EXAMPLE的值为2.9.2 + if (m.hasOwnProperty("x-example")) { + minfo.txtValue = m["x-example"]; + if (KUtils.checkUndefined(minfo.txtValue)) { + minfo.example = minfo.txtValue; + } + } + if (m.hasOwnProperty("schema")) { + //存在schema属性,请求对象是实体类 + minfo.schema = true; + var schemaObject = m["schema"]; + var schemaType = schemaObject["type"]; + if (schemaType == "array") { + minfo.type = schemaType; + var schItem = schemaObject["items"]; + var ref = schItem["$ref"]; + var className = KUtils.getClassName(ref, swpinfo.oas2); + minfo.schemaValue = className; + var def = that.getDefinitionByName(className, swpinfo.oas2); + if (def != null) { + minfo.def = def; + minfo.value = def.value; + if (def.description != undefined && def.description != null && def.description != "") { + minfo.description = KUtils.replaceMultipLineStr(def.description); + } + } else { + var sty = schItem["type"]; + minfo.schemaValue = schItem["type"] + //此处判断Array的类型,如果 + if (sty == "string") { + minfo.value = ""; + } + if (sty == "integer") { + //判断format + if (schItem["format"] != undefined && schItem["format"] != null && schItem["format"] == "int32") { + minfo.value = 0; + } else { + minfo.value = 1054661322597744642; + } + } + if (sty == "number") { + if (schItem["format"] != undefined && schItem["format"] != null && schItem["format"] == "double") { + minfo.value = 0.5; + } else { + minfo.value = 0; + } + } + } + } else { + if (schemaObject.hasOwnProperty("$ref")) { + var ref = m["schema"]["$ref"]; + var className = KUtils.getClassName(ref, swpinfo.oas2); + if (minfo.type != "array") { + minfo.type = className; + } + minfo.schemaValue = className; + var def = that.getDefinitionByName(className, swpinfo.oas2); + if (def != null) { + minfo.def = def; + minfo.value = def.value; + if (def.description != undefined && def.description != null && def.description != "") { + minfo.description = KUtils.replaceMultipLineStr(def.description); + } + } + } else { + //判断是否包含addtionalProperties属性 + if (schemaObject.hasOwnProperty("additionalProperties")) { + //判断是否是数组 + var addProp = schemaObject["additionalProperties"]; + if (addProp.hasOwnProperty("$ref")) { + //object + var className = KUtils.getClassName(addProp["$ref"], swpinfo.oas2); + if (className != null) { + var def = that.getDefinitionByName(className, swpinfo.oas2); + if (def != null) { + minfo.def = def; + minfo.value = { + "additionalProperties1": def.value + }; + if (def.description != undefined && def.description != null && def.description != "") { + minfo.description = KUtils.replaceMultipLineStr(def.description); + } + } + } + } else if (addProp.hasOwnProperty("items")) { + //数组 + var addItems = addProp["items"]; + var className = KUtils.getClassName(addItems["$ref"], swpinfo.oas2); + if (className != null) { + var def = that.getDefinitionByName(className, swpinfo.oas2); + if (def != null) { + var addArrValue = new Array(); + addArrValue.push(def.value) + minfo.def = def; + minfo.value = { + "additionalProperties1": addArrValue + }; + if (def.description != undefined && def.description != null && def.description != "") { + minfo.description = KUtils.replaceMultipLineStr(def.description); + } + } + } + + } + + + } else { + if (schemaObject.hasOwnProperty("type")) { + minfo.type = schemaObject["type"]; + } + minfo.value = ""; + } + } + } + } + if (m.hasOwnProperty("items")) { + var items = m["items"]; + if (items.hasOwnProperty("$ref")) { + var ref = items["$ref"]; + var className = KUtils.getClassName(ref, swpinfo.oas2); + //minfo.type=className; + minfo.schemaValue = className; + var def = that.getDefinitionByName(className, swpinfo.oas2); + if (def != null) { + minfo.def = def; + minfo.value = def.value; + if (def.description != undefined && def.description != null && def.description != "") { + minfo.description = KUtils.replaceMultipLineStr(def.description); + } + } + } else { + if (items.hasOwnProperty("type")) { + //minfo.type=items["type"]; + minfo.schemaValue = items["type"]; + } + minfo.value = ""; + } + } + + if (minfo.in == 'body') { + if (isUndefined(minfo.txtValue) || isNull(minfo.txtValue)) { + // ******************************************************************** + // 改造参数过滤规则,新的规则支持数组嵌套过滤,参考文档:https://www.lodashjs.com/docs/latest#_unsetobject-path + // 入参方式 参数类型 忽略规则写法 参数example 过滤后的example + // form object ignoreParameters={"key"} {key:'', value:''} {key:'', value:''} + // form object ignoreParameters={"nodes[0].key"} {key:'', value:'',nodes:[{key:'', value:''}]} {key:'', value:'',nodes:[{value:''}]} + // form array ignoreParameters={"[0].key"} [{key:'', value:''}] [{value:''}] + // body object ignoreParameters={"item.key"} {key:'', value:''} {key:'', value:''} + // body object ignoreParameters={"item.nodes[0].key"} {key:'', value:'',nodes:[{key:'', value:''}]} {key:'', value:'',nodes:[{value:''}]} + // body array ignoreParameters={"item.[0].key"} [{key:'', value:''}] [{value:''}] + // ******************************************************************** + //处理ignore + const newValue = (() => { + if (isObject(minfo.value)) { + let cloneValue = null; + //var tmpJson=JSON.parse(JSON.stringify(minfo.value)); // 深拷贝对象或数组 + var tmpJson = KUtils.json5parse(KUtils.json5stringify(minfo.value)); // 深拷贝对象或数组 + //判断include是否不为空 + if (swpinfo.includeParameters != null) { + cloneValue = new IncludeAssemble(tmpJson, swpinfo.includeParameters).result(); + } else { + cloneValue = tmpJson; + if (swpinfo.ignoreParameters && isObject(minfo.value)) { + Object.keys(swpinfo.ignoreParameters || {}).forEach(key => { + const ignorePath = key.startsWith(`${originalName}.`) ? + key.replace(`${originalName}.`, '') // 处理 body 带参,需要加前缀问题 + : + key; + //console.log(ignorePath) + // if (has(cloneValue, ignorePath)) { + // // 使用 lodash.unset 方法移除 newValue 对象中的属性 + // unset(cloneValue, ignorePath); + // } + //正则判断 + Object.keys(cloneValue || {}).forEach(x =>{ + //由于对象.属性的原因,导致ignorePath被替换后,ignorePath可能不是一个正则,出现误判的情况 + if(has(cloneValue, ignorePath)){ + unset(cloneValue, x); + }else{ + let ignoreRegex=ignorePath; + if(!ignorePath.endsWith("$")){ + //防止出现正则误判的情况 + ignoreRegex+="$"; + } + let regExp=new RegExp(ignoreRegex,"g"); + if(regExp.test(x)){ + unset(cloneValue, x); + } + + } + }) + /* if ('/'+ignorePath+'/g'.test(cloneValue)) { + unset(cloneValue, ignorePath); + } */ + }); + } + } + return cloneValue; + } + return null; + })(); + if (isUndefined(newValue) || isNull(newValue)) { + if (minfo.type === 'array') { + minfo.txtValue = JSON.stringify([]); + } + } else { + //如果type是发array类型,判断撒地方是否是integer + //minfo.txtValue = JSON.stringify(minfo.type === 'array' ? [newValue] : newValue, null, "\t"); + minfo.txtValue = KUtils.json5stringify(minfo.type === 'array' ? [newValue] : newValue, null, "\t"); + } + } + } + //https://gitee.com/xiaoym/knife4j/issues/I1VLHH + if(minfo.in=='query'||minfo.in=='formData'){ + if(minfo.schema){ + //如果出現query类型的schema,解析txtValue + if(KUtils.checkUndefined(minfo.value)&&KUtils.strBlank(minfo.txtValue)){ + minfo.txtValue = KUtils.json5stringify(minfo.type === 'array' ? [minfo.value] : minfo.value, null, "\t"); + } + } + } + //JSR-303 注解支持. + that.validateJSR303(minfo, m); + if (!KUtils.checkParamArrsExists(swpinfo.parameters, minfo)) { + const ignoreParameterKeys = Object.keys(swpinfo.ignoreParameters || {}); + // 处理请求参数表格依然展示忽略参数 + if (!ignoreParameterKeys.includes(originalName)) { + swpinfo.parameters.push(minfo); + } + //判断当前属性是否是schema + if (minfo.schema) { + ////console("存在schema------------开始递归") + ////console(minfo) + + //deepRefParameter(minfo, that, minfo.def, swpinfo); + minfo.parentTypes.push(minfo.schemaValue); + //第一层的对象要一直传递 + //deepTreeTableRefParameter(minfo, that, minfo.def, swpinfo); + } + } +} +/** + * 处理Open API v3的请求参数,获取SwaggerBootstrapUiParameter的对象 + * @param {*} m + * @param {*} swpinfo + * @param {*} requireArray 必须数组 + */ +SwaggerBootstrapUi.prototype.assembleParameterOAS3 = function (m, swpinfo, requireArray) { + var that = this; + var originalName = KUtils.propValue("name", m, ""); + var inType = KUtils.propValue("in", m, ""); + var minfo = new SwaggerBootstrapUiParameter(); + minfo.name = originalName; + minfo.ignoreFilterName = originalName; + minfo.type = KUtils.propValue("type", m, ""); + minfo.in = inType; + minfo.require = KUtils.propValue("required", m, false); + if (KUtils.arrNotEmpty(requireArray)) { + minfo.require = requireArray.includes(minfo.name); + } + minfo.description = KUtils.replaceMultipLineStr(KUtils.propValue("description", m, "")); + //add at 2019-12-10 09:20:08 判断请求参数类型是否包含format + //https://github.com/xiaoymin/swagger-bootstrap-ui/issues/161 + //判断是否有枚举类型 + if (m.hasOwnProperty("enum")) { + //that.log("包括枚举类型...") + //that.log(m.enum); + minfo.enum = m.enum; + //that.log(minfo); + //枚举类型,描述显示可用值 + var avaiableArrStr = m.enum.join(","); + if (m.description != null && m.description != undefined && m.description != "") { + minfo.description = m.description + ",可用值:" + avaiableArrStr; + } else { + minfo.description = "枚举类型,可用值:" + avaiableArrStr; + } + + } + //判断你是否有默认值(后台) + if (m.hasOwnProperty("default")) { + minfo.txtValue = m["default"]; + } + //swagger 2.9.2版本默认值响应X-EXAMPLE的值为2.9.2 + if (m.hasOwnProperty("x-example")) { + minfo.txtValue = m["x-example"]; + if (KUtils.checkUndefined(minfo.txtValue)) { + minfo.example = minfo.txtValue; + } + } + //对当前参数判断format,如果是binary,修改为file类型,文件上传(OpenAPIV3会出现这种情况) + //https://gitee.com/xiaoym/knife4j/issues/I34NOS + var v3format=KUtils.propValue("format",m,""); + if(v3format=='binary'){ + //文件上传 + minfo.type="file"; + } + + var jsrvalidateObject={}; + if (m.hasOwnProperty("schema")) { + //存在schema属性,请求对象是实体类 + minfo.schema = true; + var schemaObject = m["schema"]; + var schemaType = schemaObject["type"]; + minfo.type = schemaType; + if (schemaType == "array") { + minfo.type = schemaType; + var schItem = schemaObject["items"]; + var ref = schItem["$ref"]; + var className = KUtils.getClassName(ref, swpinfo.oas2); + minfo.schemaValue = className; + var def = that.getDefinitionByName(className, swpinfo.oas2); + if (def != null) { + minfo.def = def; + minfo.value = def.value; + if (def.description != undefined && def.description != null && def.description != "") { + minfo.description = KUtils.replaceMultipLineStr(def.description); + } + } else { + var sty = schItem["type"]; + minfo.schemaValue = schItem["type"] + //此处判断Array的类型,如果 + if (sty == "string") { + minfo.value = ""; + } + if (sty == "integer") { + //判断format + if (schItem["format"] != undefined && schItem["format"] != null && schItem["format"] == "int32") { + minfo.value = 0; + } else { + minfo.value = 1054661322597744642; + } + } + if (sty == "number") { + if (schItem["format"] != undefined && schItem["format"] != null && schItem["format"] == "double") { + minfo.value = 0.5; + } else { + minfo.value = 0; + } + } + //2.判断是否包含枚举 + var _enumArray = KUtils.propValue("enum", schemaObject, []); + if (KUtils.arrNotEmpty(_enumArray)) { + //枚举不为空 + minfo.enum = _enumArray; + //枚举类型,描述显示可用值 + var avaiableArrStr = _enumArray.join(","); + if (m.description != null && m.description != undefined && m.description != "") { + minfo.description = m.description + ",可用值:" + avaiableArrStr; + } else { + minfo.description = "枚举类型,可用值:" + avaiableArrStr; + } + } + } + } else if (KUtils.checkIsBasicType(schemaType)) { + //是否基础类型 + //1.判断整型的format + var _format = KUtils.propValue("format", schemaObject, ""); + if (KUtils.strNotBlank(_format)) { + //存在format + var _rtype = schemaType + "(" + _format + ")"; + minfo.type = _rtype; + if (_format == "binary") { + //文件上传 + minfo.type = "file"; + } + } + //2.判断是否包含枚举 + var _enumArray = KUtils.propValue("enum", schemaObject, []); + if (KUtils.arrNotEmpty(_enumArray)) { + //枚举不为空 + minfo.enum = _enumArray; + //枚举类型,描述显示可用值 + var avaiableArrStr = _enumArray.join(","); + if (m.description != null && m.description != undefined && m.description != "") { + minfo.description = m.description + ",可用值:" + avaiableArrStr; + } else { + minfo.description = "枚举类型,可用值:" + avaiableArrStr; + } + } + } else { + if (schemaObject.hasOwnProperty("$ref")) { + var ref = m["schema"]["$ref"]; + var className = KUtils.getClassName(ref, swpinfo.oas2); + if (minfo.type != "array") { + minfo.type = className; + } + minfo.schemaValue = className; + var def = that.getDefinitionByName(className, swpinfo.oas2); + if (def != null) { + minfo.def = def; + minfo.value = def.value; + if (def.description != undefined && def.description != null && def.description != "") { + minfo.description = KUtils.replaceMultipLineStr(def.description); + } + } + } else { + //判断是否包含addtionalProperties属性 + if (schemaObject.hasOwnProperty("additionalProperties")) { + //判断是否是数组 + var addProp = schemaObject["additionalProperties"]; + if (addProp.hasOwnProperty("$ref")) { + //object + var className = KUtils.getClassName(addProp["$ref"], swpinfo.oas2); + if (className != null) { + var def = that.getDefinitionByName(className, swpinfo.oas2); + if (def != null) { + minfo.def = def; + minfo.value = { + "additionalProperties1": def.value + }; + if (def.description != undefined && def.description != null && def.description != "") { + minfo.description = KUtils.replaceMultipLineStr(def.description); + } + } + } + } else if (addProp.hasOwnProperty("items")) { + //数组 + var addItems = addProp["items"]; + var className = KUtils.getClassName(addItems["$ref"], swpinfo.oas2); + if (className != null) { + var def = that.getDefinitionByName(className, swpinfo.oas2); + if (def != null) { + var addArrValue = new Array(); + addArrValue.push(def.value) + minfo.def = def; + minfo.value = { + "additionalProperties1": addArrValue + }; + if (def.description != undefined && def.description != null && def.description != "") { + minfo.description = KUtils.replaceMultipLineStr(def.description); + } + } + } + + } + + + } else { + if (schemaObject.hasOwnProperty("type")) { + minfo.type = schemaObject["type"]; + } + minfo.value = ""; + } + } + } + //如果是表单类型,该schema直接包含jsr303 + jsrvalidateObject=schemaObject; + //JSR-303 注解支持. + }else{ + jsrvalidateObject=m; + } + //JSR-303 注解支持. + that.validateJSR303(minfo, jsrvalidateObject); + if (m.hasOwnProperty("items")) { + var items = m["items"]; + if (items.hasOwnProperty("$ref")) { + var ref = items["$ref"]; + var className = KUtils.getClassName(ref, swpinfo.oas2); + //minfo.type=className; + minfo.schemaValue = className; + var def = that.getDefinitionByName(className, swpinfo.oas2); + if (def != null) { + minfo.schema=true; + minfo.def = def; + minfo.value = def.value; + if (def.description != undefined && def.description != null && def.description != "") { + minfo.description = KUtils.replaceMultipLineStr(def.description); + } + } + } else { + if (items.hasOwnProperty("type")) { + //minfo.type=items["type"]; + minfo.schemaValue = items["type"]; + } + minfo.value = ""; + } + } + + if (minfo.in == 'body') { + if (isUndefined(minfo.txtValue) || isNull(minfo.txtValue)) { + // ******************************************************************** + // 改造参数过滤规则,新的规则支持数组嵌套过滤,参考文档:https://www.lodashjs.com/docs/latest#_unsetobject-path + // 入参方式 参数类型 忽略规则写法 参数example 过滤后的example + // form object ignoreParameters={"key"} {key:'', value:''} {key:'', value:''} + // form object ignoreParameters={"nodes[0].key"} {key:'', value:'',nodes:[{key:'', value:''}]} {key:'', value:'',nodes:[{value:''}]} + // form array ignoreParameters={"[0].key"} [{key:'', value:''}] [{value:''}] + // body object ignoreParameters={"item.key"} {key:'', value:''} {key:'', value:''} + // body object ignoreParameters={"item.nodes[0].key"} {key:'', value:'',nodes:[{key:'', value:''}]} {key:'', value:'',nodes:[{value:''}]} + // body array ignoreParameters={"item.[0].key"} [{key:'', value:''}] [{value:''}] + // ******************************************************************** + //处理ignore + const newValue = (() => { + if (isObject(minfo.value)) { + let cloneValue = null; + //var tmpJson=JSON.parse(JSON.stringify(minfo.value)); // 深拷贝对象或数组 + var tmpJson = KUtils.json5parse(KUtils.json5stringify(minfo.value)); // 深拷贝对象或数组 + //判断include是否不为空 + if (swpinfo.includeParameters != null) { + cloneValue = new IncludeAssemble(tmpJson, swpinfo.includeParameters).result(); + console.log(cloneValue); + } else { + cloneValue = tmpJson; + if (swpinfo.ignoreParameters && isObject(minfo.value)) { + Object.keys(swpinfo.ignoreParameters || {}).forEach(key => { + const ignorePath = key.startsWith(`${originalName}.`) ? + key.replace(`${originalName}.`, '') // 处理 body 带参,需要加前缀问题 + : + key; + // if (has(cloneValue, ignorePath)) { + // // 使用 lodash.unset 方法移除 newValue 对象中的属性 + // unset(cloneValue, ignorePath); + // } + //正则判断 + Object.keys(cloneValue || {}).forEach(x =>{ + //由于对象.属性的原因,导致ignorePath被替换后,ignorePath可能不是一个正则,出现误判的情况 + if(has(cloneValue, ignorePath)){ + unset(cloneValue, x); + }else{ + let ignoreRegex=ignorePath; + if(!ignorePath.endsWith("$")){ + //防止出现正则误判的情况 + ignoreRegex+="$"; + } + let regExp=new RegExp(ignoreRegex,"g"); + if(regExp.test(x)){ + unset(cloneValue, x); + } + + } + }) + }); + } + } + return cloneValue; + } + return null; + })(); + if (isUndefined(newValue) || isNull(newValue)) { + if (minfo.type === 'array') { + minfo.txtValue = JSON.stringify([]); + } + } else { + //如果type是发array类型,判断撒地方是否是integer + //minfo.txtValue = JSON.stringify(minfo.type === 'array' ? [newValue] : newValue, null, "\t"); + minfo.txtValue = KUtils.json5stringify(minfo.type === 'array' ? [newValue] : newValue, null, "\t"); + } + } + } + //console.log(m) + //https://gitee.com/xiaoym/knife4j/issues/I24PCZ + if(minfo.in=='query'||minfo.in=='formData'){ + //console.log(minfo) + if(minfo.schema){ + //如果出現query类型的schema,解析txtValue + if(KUtils.checkUndefined(minfo.value)&&KUtils.strBlank(minfo.txtValue)){ + minfo.txtValue = KUtils.json5stringify(minfo.type === 'array' ? [minfo.value] : minfo.value, null, "\t"); + } + } + } + if (!KUtils.checkParamArrsExists(swpinfo.parameters, minfo)) { + const ignoreParameterKeys = Object.keys(swpinfo.ignoreParameters || {}); + // 处理请求参数表格依然展示忽略参数 + if (!ignoreParameterKeys.includes(originalName)) { + swpinfo.parameters.push(minfo); + } + //判断当前属性是否是schema + if (minfo.schema) { + ////console("存在schema------------开始递归") + ////console(minfo) + + //deepRefParameter(minfo, that, minfo.def, swpinfo); + minfo.parentTypes.push(minfo.schemaValue); + //第一层的对象要一直传递 + //deepTreeTableRefParameter(minfo, that, minfo.def, swpinfo); + } + } +} + +/** + * 过滤组件 + * @param json + * @param includeArry + * @constructor + */ +function IncludeAssemble(json, includeArry) { + this.json = json; + //包含的关系需要把参数的body名称去掉 + var filterArr = new Array(); + var tmpKeys = Object.keys(includeArry || {}); + tmpKeys.forEach(key => { + filterArr.push(key.substring(key.indexOf(".") + 1)) + }) + this.includeArrays = filterArr; +} + +IncludeAssemble.prototype = { + isObjInArray(o) { + if (!this.isArray(o)) { + return false; + } + if (o.length === 0) { + return false; + } + return this.isObject(o[0]); + }, + isObject(o) { + return Object.prototype.toString.call(o) === '[object Object]'; + }, + isArray(o) { + return Object.prototype.toString.call(o) === '[object Array]'; + }, + merge(source, target) { + if (this.isObject(source)) { + for (let key in target) { + source[key] = this.isObject(source[key]) || this.isObjInArray(source[key]) ? + this.merge(source[key], target[key]) : source[key] = target[key]; + } + } else { + if (this.isObjInArray(target)) { + source.forEach((o1, index) => { + this.merge(o1, target[index]); + }) + } else { + source.push.apply(source, target); + } + } + return source; + }, + getByPath(srcObj, path) { + if (this.isObjInArray(srcObj)) { + const r = []; + srcObj.forEach(el => { + r.push(this.getByPath(el, path)); + }); + return r; + } else { + const pathArr = path.split("."); + //const r=JSON.parse(JSON.stringify(srcObj)); + const r = KUtils.json5parse(KUtils.json5stringify(srcObj)); + let tempObj = r; + const len = pathArr.length; + for (let i = 0; i < len; i++) { + let pathComp = pathArr[i]; + for (let k in tempObj) { + if (k !== pathComp) { + delete tempObj[k]; + } + } + if (!tempObj[pathComp]) { + break; + } + if (this.isObjInArray(tempObj[pathComp])) { + let t = this.getByPath(tempObj[pathComp], pathArr.slice(i + 1).join('.')); + //tempObj[pathComp]=JSON.parse(JSON.stringify(t)); + tempObj[pathComp] = KUtils.json5parse(KUtils.json5stringify(t)); + break; + } + tempObj = tempObj[pathComp]; + } + return r + } + }, + result() { + if (this.includeArrays == null || this.includeArrays.length == 0) { + return this.json; + } else { + let arr = []; + this.includeArrays.forEach(p => { + arr.push(this.getByPath(this.json, p)); + }); + return arr.reduce((prev, cur) => { + if (prev) { + this.merge(prev, cur); + return prev; + } + return cur + }); + } + } +} +/*** + * 根据api接口自定义tags添加 + * @param name + */ +SwaggerBootstrapUi.prototype.mergeApiInfoSelfTags = function (name) { + var that = this; + var flag = false; + that.currentInstance.tags.forEach(function (tag) { + //}) + //$.each(that.currentInstance.tags,function (i, tag) { + if (tag.name == name) { + flag = true; + } + }) + if (!flag) { + var ntag = new SwaggerBootstrapUiTag(name, name); + that.currentInstance.tags.push(ntag); + } +} +/*** + * JSR-303支持 + * @param parameter + */ +SwaggerBootstrapUi.prototype.validateJSR303 = function (parameter, origin) { + var max = origin["maximum"], + min = origin["minimum"], + emin = origin["exclusiveMinimum"], + emax = origin["exclusiveMaximum"]; + var pattern = origin["pattern"]; + var maxLength = origin["maxLength"], + minLength = origin["minLength"]; + if (max || min || emin || emax) { + parameter.validateStatus = true; + parameter.validateInstance = { + minimum: min, + maximum: max, + exclusiveMaximum: emax, + exclusiveMinimum: emin + }; + } else if (pattern) { + parameter.validateStatus = true; + parameter.validateInstance = { + "pattern": origin["pattern"] + }; + } else if (maxLength || minLength) { + parameter.validateStatus = true; + parameter.validateInstance = { + maxLength: maxLength, + minLength: minLength + }; + } +} + +/** + * 根据类名查找definition + * @param {*} name + * @param {*} oas + */ +SwaggerBootstrapUi.prototype.getDefinitionByName = function (name, oas) { + var that = this; + var def = null; + //默认使用v2版本 + var oasFlag = true; + if (KUtils.checkUndefined(oas)) { + oasFlag = oas; + } + that.currentInstance.difArrs.forEach(function (d) { + if (d.name == name) { + if (!d.init) { + d.init = true; + that.analysisDefinitionAsync(that.currentInstance.swaggerData, d, oasFlag); + } + def = d; + return; + } + }) + //改为异步加载后,异步初始化class + return def; +} + +/** + * 递归解析definition + * @param {*} definitionName 名称 + * @param {*} definitions + * @param {*} flag + * @param {*} globalArr + * @param {*} xname + * @param {*} oas 是否v2版本 + */ +SwaggerBootstrapUi.prototype.findRefDefinition = function (definitionName, definitions, flag, globalArr, xname, oas) { + var that = this; + var defaultValue = ""; + if (KUtils.checkUndefined(that.currentInstance.definitionValues[definitionName])) { + defaultValue = that.currentInstance.definitionValues[definitionName]; + } else { + for (var definition in definitions) { + if (definitionName == definition) { + //不解析本身 + //that.log("解析definitionName:"+definitionName); + //that.log("是否递归:"+flag); + var value = definitions[definition]; + //是否有properties + if (value.hasOwnProperty("properties")) { + var properties = value["properties"]; + var defiTypeValue = {}; + for (var property in properties) { + var propobj = properties[property]; + if (!propobj.hasOwnProperty("readOnly") || !propobj["readOnly"]) { + //默认string类型 + var propValue = ""; + //判断是否有类型 + if (propobj.hasOwnProperty("type")) { + var type = propobj["type"]; + //判断是否有example + if (propobj.hasOwnProperty("example")) { + //propValue = propobj["example"]; + propValue = KUtils.getExample("example",propobj,""); + } else if (KUtils.checkIsBasicType(type)) { + propValue = KUtils.getBasicTypeValue(type); + //此处如果是object情况,需要判断additionalProperties属性的情况 + if (type == "object") { + if (propobj.hasOwnProperty("additionalProperties")) { + var addpties = propobj["additionalProperties"]; + var addtionalName = this.deepAdditionalProperties(addpties, oas); + //console.log("递归类型---"+addtionalName) + //判断是否有ref属性,如果有,存在引用类,否则默认是{}object的情况 + if (KUtils.strNotBlank(addtionalName)) { + //console.log("-------------------------addtionalName--------"+addtionalName) + //添加类本身 + if (globalArr.indexOf(addtionalName) == -1) { + globalArr.push(addtionalName); + addTempValue = that.findRefDefinition(addtionalName, definitions, false, globalArr, xname, oas); + propValue = { + "additionalProperties1": addTempValue + } + } + } + //判断是否有ref属性,如果有,存在引用类,否则默认是{}object的情况 + else if (addpties.hasOwnProperty("$ref")) { + var adref = addpties["$ref"]; + var regex = new RegExp(KUtils.oasmodel(oas), "ig"); + if (regex.test(adref)) { + var addrefType = RegExp.$1; + var addTempValue = null; + if (!flag) { + if (globalArr.indexOf(addrefType) == -1) { + //console.log("addrefType:"+addrefType) + //全局类型增加父类型,否则会出现递归死循环 + globalArr.push(addrefType); + addTempValue = that.findRefDefinition(addrefType, definitions, flag, globalArr, xname, oas); + propValue = { + "additionalProperties1": addTempValue + } + } + + } + } + } + } + } + } else { + if (type == "array") { + propValue = new Array(); + var items = propobj["items"]; + var ref = items["$ref"]; + if (items.hasOwnProperty("type")) { + if (items["type"] == "array") { + ref = items["items"]["$ref"]; + } + } + var regex = new RegExp(KUtils.oasmodel(oas), "ig"); + if (regex.test(ref)) { + var refType = RegExp.$1; + if (!flag) { + //判断是否存在集合中 + if (globalArr.indexOf(refType) != -1) { + //存在 + propValue.push({}); + } else { + globalArr.push(definitionName); + propValue.push(that.findRefDefinition(refType, definitions, flag, globalArr, xname, oas)); + } + } + + } + } + } + + } else { + //存在ref + if (propobj.hasOwnProperty("$ref")) { + var ref = propobj["$ref"]; + var regex = new RegExp(KUtils.oasmodel(oas), "ig"); + if (regex.test(ref)) { + var refType = RegExp.$1; + //这里需要递归判断是否是本身,如果是,则退出递归查找 + if (!flag) { + //if($.inArray(refType,globalArr) != -1){ + if (globalArr.indexOf(refType) != -1) { + //存在 + propValue = {}; + } else { + globalArr.push(definitionName); + propValue = that.findRefDefinition(refType, definitions, flag, globalArr, xname, oas); + } + } + } + } else { + propValue = {}; + } + + } + defiTypeValue[property] = propValue; + } + } + defaultValue = defiTypeValue; + } else { + defaultValue = {}; + } + } + } + //赋值 + that.currentInstance.definitionValues[definitionName] = defaultValue; + } + return defaultValue; +} + +/*** + * 计数 + * @param method + */ +SwaggerBootstrapUi.prototype.methodCountAndDown = function (method) { + var that = this; + var flag = false; + that.currentInstance.pathArrs.forEach(function (a) { + //}) + //$.each(that.currentInstance.pathArrs,function (i, a) { + if (a.method == method) { + flag = true; + //计数加1 + a.count = a.count + 1; + } + }) + if (!flag) { + var me = new SwaggerBootstrapUiPathCountDownLatch(); + me.method = method; + me.count = 1; + that.currentInstance.pathArrs.push(me); + } +} +/*** + * 获取全局缓存auth信息 + */ +SwaggerBootstrapUi.prototype.getGlobalSecurityInfos = function () { + var that = this; + var params = []; + if (window.localStorage) { + var store = window.localStorage; + var globalparams = store["SwaggerBootstrapUiSecuritys"]; + if (globalparams != undefined && globalparams != null && globalparams != "") { + //var gpJson = JSON.parse(globalparams); + var gpJson = KUtils.json5parse(globalparams); + gpJson.forEach(function (j) { + //}) + //$.each(gpJson, function (i, j) { + params = params.concat(j.value); + }) + } + } else { + //params=$("#sbu-header").data("cacheSecurity"); + } + return params; +} +/*** + * 计数器 + * @constructor + */ +var SwaggerBootstrapUiPathCountDownLatch = function () { + this.method = ""; + this.count = 0; +} + +function deepResponseRefParameter(swpinfo, that, def, resParam) { + if (def != null) { + if (def.hasOwnProperty("properties")) { + var refParam = new SwaggerBootstrapUiRefParameter(); + refParam.name = def.name; + if (!KUtils.checkParamArrsExists(swpinfo.responseRefParameters, refParam)) { + swpinfo.responseRefParameters.push(refParam); + if (def.hasOwnProperty("properties")) { + var props = def["properties"]; + props.forEach(function (p) { + //}) + //$.each(props,function (i, p) { + var refp = new SwaggerBootstrapUiParameter(); + refp.pid = resParam.id; + refp.name = p.name; + refp.type = p.type; + refp.description = KUtils.replaceMultipLineStr(p.description); + //add之前需要判断是否已添加,递归情况有可能重复 + refParam.params.push(refp); + //判断类型是否基础类型 + if (!KUtils.checkIsBasicType(p.refType)) { + refp.schemaValue = p.refType; + refp.schema = true; + if (resParam.name != refp.name || resParam.schemaValue != p.refType) { + var deepDef = that.getDefinitionByName(p.refType, swpinfo.oas2); + deepResponseRefParameter(swpinfo, that, deepDef, refp); + } + } + }) + } + } + } + } +} + +function deepTreeTableResponseRefParameter(swpinfo, that, def, resParam) { + if (def != null) { + if (def.hasOwnProperty("properties")) { + var refParam = new SwaggerBootstrapUiTreeTableRefParameter(); + refParam.name = def.name; + refParam.id = resParam.id; + if (!checkParamTreeTableArrsExists(swpinfo.responseTreetableRefParameters, refParam)) { + //firstParameter.childrenTypes.push(def.name); + swpinfo.responseTreetableRefParameters.push(refParam); + if (def.hasOwnProperty("properties")) { + var props = def["properties"]; + props.forEach(function (p) { + //}) + //$.each(props,function (i, p) { + var refp = new SwaggerBootstrapUiParameter(); + resParam.parentTypes.forEach(function (pt) { + refp.parentTypes.push(pt); + }) + /* $.each(resParam.parentTypes,function (i, pt) { + refp.parentTypes.push(pt); + }) */ + if (p.hasOwnProperty("readOnly")) { + refp.readOnly = p.readOnly; + } + refp.parentTypes.push(def.name); + refp.pid = resParam.id; + refp.name = p.name; + refp.type = p.type; + refp.description = KUtils.replaceMultipLineStr(p.description); + refp.example = p.example; + //add之前需要判断是否已添加,递归情况有可能重复 + refParam.params.push(refp); + //判断类型是否基础类型 + if (!KUtils.checkIsBasicType(p.refType)) { + refp.schemaValue = p.refType; + refp.schema = true; + if (resParam.name != refp.name || resParam.schemaValue != p.refType) { + var deepDef = that.getDefinitionByName(p.refType, swpinfo.oas2); + if (!checkDeepTypeAppear(refp.parentTypes, p.refType)) { + deepTreeTableResponseRefParameter(swpinfo, that, deepDef, refp); + } + } + } else { + if (p.type == "array") { + if (p.refType != null && p.refType != undefined && p.refType != "") { + refp.schemaValue = p.refType; + } + } + } + }) + } + } + + } + } +} + +/*** + * treeTable组件 + * @param minfo + * @param that + * @param def + * @param apiInfo + * @param oas2 是否v2版本 + */ +function deepTreeTableRefParameter(minfo, that, def, apiInfo, oas2) { + if (def != null) { + //查询 + if (KUtils.checkUndefined(that.currentInstance.refTreeTableModels[def.name])) { + //存在 + ////console("refTreeTableModels-----------递归存在,modelName:" + def.name) + var refParam = that.currentInstance.refTreeTableModels[def.name]; + ////console(refParam) + apiInfo.refTreetableparameters.push(refParam); + apiInfo.refTreetableModelsparameters.push(refParam); + } else { + var refParam = new SwaggerBootstrapUiTreeTableRefParameter(); + refParam.name = def.name; + refParam.id = minfo.id; + //SwaggerModels + var refModelParam = new SwaggerBootstrapUiTreeTableRefParameter(); + refModelParam.name = def.name; + refModelParam.id = minfo.id; + //如果当前属性中的schema类出现过1次则不在继续,防止递归死循环 + if (!checkParamTreeTableArrsExists(apiInfo.refTreetableparameters, refParam)) { + //firstParameter.childrenTypes.push(def.name); + apiInfo.refTreetableparameters.push(refParam); + apiInfo.refTreetableModelsparameters.push(refModelParam); + if (def.hasOwnProperty("properties")) { + var props = def["properties"]; + props.forEach(function (p) { + var _ignoreFilterName = minfo.ignoreFilterName + "." + p.name; + if (apiInfo.ignoreParameters == null || (apiInfo.ignoreParameters != null && !apiInfo.ignoreParameters.hasOwnProperty(_ignoreFilterName))) { + var refp = new SwaggerBootstrapUiParameter(); + refp.pid = minfo.id; + minfo.parentTypes.forEach(function (pt) { + refp.parentTypes.push(pt); + }) + refp.readOnly = p.readOnly; + //refp.parentTypes=minfo.parentTypes; + refp.parentTypes.push(def.name) + //level+1 + refp.level = minfo.level + 1; + refp.name = p.name; + refp.ignoreFilterName = _ignoreFilterName; + refp.type = p.type; + //判断非array + if (p.type != "array") { + if (p.refType != null && p.refType != undefined && p.refType != "") { + //修复针对schema类型的参数,显示类型为schema类型 + refp.type = p.refType; + } + } + refp.in = minfo.in; + refp.require = p.required; + refp.example = p.example; + refp.description = KUtils.replaceMultipLineStr(p.description); + //console.log("deep-----------propfmasdlkfsafdd") + //console.log(p) + that.validateJSR303(refp, p.originProperty); + //console.log("after") + //console.log(refp) + //models添加所有属性 + refModelParam.params.push(refp); + if (!p.readOnly) { + refParam.params.push(refp); + } + //判断类型是否基础类型 + if (KUtils.checkUndefined(p.refType) && !KUtils.checkIsBasicType(p.refType)) { + ////console("schema类型--------------" + p.refType) + refp.schemaValue = p.refType; + refp.schema = true; + //属性名称不同,或者ref类型不同 + if (minfo.name != refp.name || minfo.schemaValue != p.refType) { + var deepDef = that.getDefinitionByName(p.refType, oas2); + if (!checkDeepTypeAppear(refp.parentTypes, p.refType)) { + deepTreeTableRefParameter(refp, that, deepDef, apiInfo, oas2); + } + } + } else { + if (p.type == "array") { + if (p.refType != null && p.refType != undefined && p.refType != "") { + //修复针对schema类型的参数,显示类型为schema类型 + refp.schemaValue = p.refType; + } + } + } + } + }) + + } + } + //存放值 + that.currentInstance.refTreeTableModels[def.name] = refParam; + } + } +} + +/*** + * 递归查询 + * @param minfo + * @param that + * @param def + */ +function deepRefParameter(minfo, that, def, apiInfo) { + if (def != null) { + var refParam = new SwaggerBootstrapUiRefParameter(); + refParam.name = def.name; + if (!KUtils.checkParamArrsExists(apiInfo.refparameters, refParam)) { + apiInfo.refparameters.push(refParam); + if (def.hasOwnProperty("properties")) { + var props = def["properties"]; + props.forEach(function (p) { + + //}) + //$.each(props,function (i, p) { + //如果当前属性为readOnly,则不加入 + if (!p.readOnly) { + var _filterName = minfo.ignoreFilterName + "." + p.name; + //判断是否忽略 + if (apiInfo.ignoreParameters == null || (apiInfo.ignoreParameters != null && !apiInfo.ignoreParameters.hasOwnProperty(_filterName))) { + var refp = new SwaggerBootstrapUiParameter(); + refp.pid = minfo.id; + refp.name = p.name; + refp.ignoreFilterName = _filterName; + + refp.type = p.type; + //判断非array + if (p.type != "array") { + if (p.refType != null && p.refType != undefined && p.refType != "") { + //修复针对schema类型的参数,显示类型为schema类型 + refp.type = p.refType; + } + } + refp.in = minfo.in; + refp.require = p.required; + refp.description = KUtils.replaceMultipLineStr(p.description); + that.validateJSR303(refp, p.originProperty); + refParam.params.push(refp); + //判断类型是否基础类型 + if (!KUtils.checkIsBasicType(p.refType)) { + refp.schemaValue = p.refType; + refp.schema = true; + //属性名称不同,或者ref类型不同 + if (minfo.name != refp.name || minfo.schemaValue != p.refType) { + var deepDef = that.getDefinitionByName(p.refType); + deepRefParameter(refp, that, deepDef, apiInfo); + } + } + } + } + + }) + } + } + } +} + +/*** + * 递归父类是否出现 + * @param types + * @param type + * @returns {boolean} + */ +function checkDeepTypeAppear(types, type) { + var flag = false; + types.forEach(function (t) { + if (t == type) { + flag = true; + } + }) + return flag; +} + +function checkParamTreeTableArrsExists(arr, param) { + var flag = false; + if (arr != null && arr.length > 0) { + arr.forEach(function (a) { + if (a.name == param.name && a.id == param.id) { + flag = true; + } + }) + } + return flag; +} + +function deepSchemaModel(model, arrs, id) { + ////console(model.name) + arrs.forEach(function (arr) { + //}) + //$.each(arrs,function (i, arr) { + if (arr.id == id) { + //找到 + model.data = model.data.concat(arr.params); + //遍历params + if (arr.params != null && arr.params.length > 0) { + arr.params.forEach(function (ps) { + //}) + //$.each(arr.params, function (j, ps) { + if (ps.schema) { + deepSchemaModel(model, arrs, ps.id); + } + }) + } + } + }) +} + +/*** + * SwaggerBootstrapUi Model树对象 + * @param id + * @param name + * @constructor + */ +var SwaggerBootstrapUiModel = function (id, name) { + this.id = id; + this.name = name; + //存放Model对象的属性结构 + //SwaggerBootstrapUiTreeTableRefParameter集合 + this.data = new Array(); + this.random = parseInt(Math.random() * (6 - 1 + 1) + 1, 10); + this.modelClass = function () { + var cname = "panel-default"; + switch (this.random) { + case 1: + cname = "panel-success"; + break; + case 2: + cname = "panel-success"; + break; + case 3: + cname = "panel-info"; + break; + case 4: + cname = "panel-warning"; + break; + case 5: + cname = "panel-danger"; + break; + case 6: + cname = "panel-default"; + break; + } + return cname; + } + +} + +/*** + * 响应码 + * @constructor + */ +var SwaggerBootstrapUiResponseCode = function () { + this.oas2 = false, + this.code = null; + this.description = null; + this.schema = null; + this.schemaTitle=null; + //treetable组件使用对象 + this.refTreetableparameters = new Array(); + this.responseCodes = new Array(); + this.responseValue = null; + this.responseJson = null; + this.responseText = null; + this.responseBasicType = false; + //响应Header字段说明 + this.responseHeaderParameters = null; + //响应字段说明 + this.responseParameters = new Array(); + this.responseParameterRefName = ""; + this.responseRefParameters = new Array(); + //treetable组件使用对象 + this.responseTreetableRefParameters = new Array(); + this.responseDescriptionFind = function (paths, key, that) { + if (!this.responseDescriptions) { + this.responseDescriptions = getKeyDescriptions(this.responseParameters, that); + } + var path = paths.join('>') + '>' + key; + path = path.replace(/0>/g, ''); + //console.log(this.responseDescriptions) + if (this.responseDescriptions && this.responseDescriptions[path]) { + return this.responseDescriptions[path]; + } + return ''; + } +} + +var getKeyDescriptions = function (target, that, parentTypes) { + var keyList = {}; + if (typeof (target) == 'object') { + if (Array.isArray(target)) { + for (var index in target) { + var objc = target[index]; + //遍历属性 + if (parentTypes == null || parentTypes == undefined) { + //first init + parentTypes = new Array(); + } + if (typeof (objc) == 'object') { + var key = objc.name; + var keyListTemp; + keyList[key] = objc.description; + if (objc.schemaValue || objc.refType) { + //此处判断父级schema不能是自己 + //parentTypes次数>1此,出现递归 + if (parentTypes.indexOf(objc.schemaValue || objc.refType) == -1) { + //if ($.inArray(objc.schemaValue || objc.refType, parentTypes) == -1) { + parentTypes.push(objc.schemaValue || objc.refType); + var def = that.getDefinitionByName(objc.schemaValue || objc.refType); + if (def) { + if (def.properties) { + //递归存在相互引用的情况,导致无限递归 + keyListTemp = getKeyDescriptions(def.properties, that, parentTypes); + } + } + } + } else if (objc.params) { + keyListTemp = getKeyDescriptions(objc.params, that); + } + if (keyListTemp) { + for (var j in keyListTemp) { + keyList[key + ">" + j] = keyListTemp[j]; + } + } + } + } + } + } + return keyList; +} +/** + * 过滤多余POST功能 + */ +var SwaggerBootstrapUiApiFilter = function () { + this.api = function (methodType) { + var apis = new Array(); + //判断当前methods类型,如果methods只有1条则返回 + //if (this.methods.length == 7) { + //如果服务端限定只存在GET|POST两种,过滤功能任然有效 + //https://gitee.com/xiaoym/knife4j/issues/I28RJ5 + if (this.methods.length >1) { + //如果是7个则 开启过滤 + var mpt = null; + //如果接口梳理是7个 + for (var c = 0; c < this.methods.length; c++) { + if (this.methods[c].methodType == methodType) { + mpt = this.methods[c]; + } + } + if (mpt == null) { + mpt = this.methods[0]; + } + apis.push(mpt); + } else { + apis = apis.concat(this.methods); + } + return apis; + + }; + this.methods = new Array(); +} + +/*** + * 缓存更新对象 + * @constructor + */ +var SwaggerBootstrapUiCacheUptApi = function (id) { + //当前版本id + this.url = ""; + this.versionId = id; + this.lastTime = new Date(); +} + +/*** + * + * [{ + * id:"md5(groupName)", + * groupApis:["id1","id2"] + * }] + * @constructor + */ +function SwaggerBootstrapUiCacheApis(options) { + //分组id + this.id = options.id || ''; + //分组名称 + this.name = options.name || ''; + //缓存api-id 对象的集合 + this.cacheApis = []; + //缓存整个对象的id? + //存储 id:{"uptversion":"102010221299393993","lastTime":"2019/11/12 12:30:33"} + this.updateApis = {}; +} + +/*** + * 返回对象解析属性 + * @constructor + */ +var SwaggerBootstrapUiDefinition = function () { + //是否初始化过,作为异步加载的条件 + this.init = false; + //类型名称 + this.name = ""; + this.ignoreFilterName = null; + this.schemaValue = null; + //this.id = "definition" + Math.round(Math.random() * 1000000); + this.id = "definition" + KUtils.randomMd5(); + this.pid = "-1"; + this.level = 1; + this.childrenTypes = new Array(); + this.parentTypes = new Array(); + //介绍 + this.description = ""; + //类型 + this.type = ""; + //属性 --SwaggerBootstrapUiProperty 集合 + this.properties = new Array(); + this.value = null; + //add by xiaoymin 2018-8-1 13:35:32 + this.required = new Array(); + this.title = ""; + //treetable组件使用对象 + this.refTreetableparameters = new Array(); + //swaggerModels功能 + this.refTreetableModelsparameters = new Array(); +} +/** + * 权限验证 + * @constructor + */ +var SwaggerBootstrapUiSecurityDefinition = function () { + this.key = ""; + this.type = ""; + this.in = ""; + this.name = ""; + this.value = ""; + //add at 2019-12-7 18:20:35 + this.id = ""; + +} + +/*** + * definition对象属性 + * @constructor + */ +var SwaggerBootstrapUiProperty = function () { + //默认基本类型,非引用 + this.basic = true; + this.name = ""; + this.type = ""; + this.refType = null; + this.description = ""; + this.example = ""; + this.format = ""; + //是否必须 + this.required = false; + //默认值 + this.value = null; + //引用类 + this.property = null; + //原始参数 + this.originProperty = null; + //是否枚举 + this.enum = null; + //是否readOnly + this.readOnly = false; + + //JSR-303 annotations supports since 1.8.7 + //默认状态为false + this.validateStatus = false; + this.validateInstance = null; +} +/*** + * swagger的tag标签 + * @param name + * @param description + * @constructor + */ +var SwaggerBootstrapUiTag = function (name, description) { + this.name = name; + this.description = description; + //增加order + this.order=2147483647; + //add by xiaoymin 2020-4-5 11:03:07 分组作者 + this.author = null; + this.childrens = new Array(); + //是否有新接口 + this.hasNew = false; + //是否有接口变更 + this.hasChanged = false; +} +/*** + * Swagger接口基础信息 + * @constructor + */ +var SwaggerBootstrapUiApiInfo = function () { + //是否已经初始化过,作为异步初始化存在 + this.init = false; + //是否是oas2的接口 + this.oas2=true; + //2020年10月22日,增加OpenAPI原始数据,方便POSTMAN导入测试 + this.openApiRaw=""; + //原始对象 + this.originalApiInfo = null; + this.url = null; + this.originalUrl = null; + this.configurationDebugSupport = true; + this.showUrl = ""; + this.basePathFlag = false; + //接口作者 + this.author = null; + this.methodType = null; + this.description = null; + this.summary = null; + this.consumes = null; + this.operationId = null; + this.produces = null; + this.tags = null; + //默认请求contentType + this.contentType = "application/json"; + this.contentShowValue = "JSON(application/json)"; + //请求如果是raw类型,给定mode类型 + this.contentMode = "Text"; + //显示参数 + //存储请求类型,form|row|urlencode + this.contentValue = "raw"; + this.parameters = new Array(); + //参数数量 + this.parameterSize = 0; + //请求json示例 + this.requestValue = null; + //是否xml请求 + this.xmlRequest = false; + //针对parameter属性有引用类型的参数,继续以table 的形式展现 + //存放SwaggerBootstrapUiRefParameter 集合 + this.refparameters = new Array(); + //treetable组件使用对象 + this.refTreetableparameters = new Array(); + //swaggerModels功能 + this.refTreetableModelsparameters = new Array(); + //请求参数treetalbe + // add at 2019-12-15 13:29:19 + this.reqParameters = new Array(); + + this.responseCodes = new Array(); + this.responseHttpObject = null; + /*** + * 返回状态码为200的 + */ + this.getHttpSuccessCodeObject = function () { + if (this.responseHttpObject == null) { + if (this.responseCodes != null && this.responseCodes.length > 0) { + var _tmp = null; + for (var i = 0; i < this.responseCodes.length; i++) { + if (this.responseCodes[i].code == "200") { + _tmp = this.responseCodes[i]; + break; + } + } + this.responseHttpObject = _tmp; + } + } + return this.responseHttpObject; + } + + this.responseValue = null; + this.responseJson = null; + this.responseText = null; + this.responseBasicType = false; + //响应Header字段说明 + this.responseHeaderParameters = null; + //响应字段说明 + this.responseParameters = new Array(); + this.responseParameterRefName = ""; + this.responseRefParameters = new Array(); + //treetable组件使用对象 + this.responseTreetableRefParameters = new Array(); + //新增菜单id + this.id = ""; + //版本id + this.versionId = ""; + //排序 + this.order = 2147483647; + //add by xiaoymin 2018-12-14 17:04:42 + //是否新接口 + this.hasNew = false; + //是否有接口变更 + this.hasChanged = false; + //是否过时 + this.deprecated = false; + //是否存在响应状态码中 存在多个schema的情况 + this.multipartResponseSchema = false; + this.multipartResponseSchemaCount = 0; + //hashUrl + this.hashCollections = []; + //ignoreParameters add 2019-7-30 16:10:08 + this.ignoreParameters = null; + //includeParameters add 2020-4-5 14:12:23 + this.includeParameters = null; + //当前接口用户实例id add 2019-12-5 10:49:40 + this.instanceId = null; + // 用于请求后构建curl + this.host = null; + //add 2020年11月15日 16:51:49 xiaoymin + //服务端指定了部分接口校验,因此并非全局所有接口都需要Authorize + this.securityFlag=false; + this.securityKeys=null; +} + +var SwaggerBootstrapUiRefParameter = function () { + this.name = null; + //存放SwaggerBootstrapUiParameter集合 + this.params = new Array(); +} + +var SwaggerBootstrapUiTreeTableRefParameter = function () { + //是否已经加载 + this.init = false; + this.id = ""; + this.name = null; + //存放SwaggerBootstrapUiParameter集合 + this.params = new Array(); + this.level = 1; + this.childrenTypes = new Array(); + + +} + +/*** + * Swagger请求参数 + * @constructor + */ +var SwaggerBootstrapUiParameter = function () { + this.name = null; + //该属性用于过滤参数使用 + this.ignoreFilterName = null; + //默认false + this.require = false; + this.type = null; + this.in = null; + this.schema = false; + this.schemaValue = null; + this.value = null; + //JSR-303 annotations supports since 1.8.7 + //默认状态为false + this.validateStatus = false; + this.validateInstance = null; + //引用类 + this.def = null; + //des + this.description = null; + //文本框值 + this.txtValue = null; + //枚举类型 + this.enum = null; + + //this.id = "param" + Math.round(Math.random() * 1000000); + this.id = uniqueId('param'); // "param" + KUtils.randomMd5(); 使用 uniqueId 方法替代 + this.pid = "-1"; + this.level = 1; + //参数是否显示在debug中 + this.show = true; + //是否readOnly + this.readOnly = false; + this.example = null; + + + this.childrenTypes = new Array(); + this.children = null; + this.parentTypes = new Array(); +} + +function SwaggerBootstrapUiParameterLevel() { + this.level = 1; + +} + +/*** + * swagger 分组对象 + * @param name 分组对象名称 + * @param location url地址 + * @param version 版本号 + * @constructor + */ +function SwaggerBootstrapUiInstance(name, location, version) { + //当前Swagger的json + this.swaggerData=null; + //oatuth认证,存放Oauth2认证的参数类型 + this.oauths=null; + //其他文档 + //OpenAPI基础信息 + this.openApiBaseInfo={}; + //this.id = 'SwaggerBootstrapUiInstance' + Math.round(Math.random() * 1000000) + this.id = 'SwaggerBootstrapUiInstance' + md5(name + location + version) + //默认未加载 + this.load = false + //分组名称 + this.name = name + //分组url地址 + this.location = location + //不分组是url地址 + this.url = null + //增强地址 + this.extUrl = null + //如果version为空,给一个默认值2.0 + if(KUtils.strNotBlank(version)){ + this.groupVersion = version + }else{ + this.groupVersion = "2.0" + } + //所有实例的分组id + this.allGroupIds=null; + //分组url请求实例 + this.basePath = '' + //使用nginx,反向代理服务名称 + this.baseUrl = '' + this.host = '' + this.swagger = '' + this.description = '' + this.title = '' + this.version = '' + this.termsOfService = '' + this.contact = '' + //当前definistion数组 + // SwaggerBootstrapUiDefinition 集合 + this.difArrs = [] + //difinition的请求value缓存值 + //key-definiationName -value :requestValue + // add 2019-12-11 15:06:30 + this.definitionValues = {}; + //针对Swagger Models功能,再存一份SwaggerBootstrapUiDefinition集合 + this.swaggerModelsDifinitions = [] + //add 2019-12-11 20:08:51 + //该属性针对SwaggerModels功能,避免和refTreeTableModels属性功能重叠 + this.swaggerTreeTableModels = {}; + //存放treeTable已经递归查询过的schema值 + this.refTreeTableModels = {}; + //标签分类信息组 + //SwaggerBootstrapUiTag 集合 + this.tags = [] + //接口url信息 + //存储SwaggerBootstrapUiApiInfo 集合 + this.paths = [] + //字典 + this.pathsDictionary = {} + //全局参数,存放SwaggerBootstrapUiParameter集合 + this.globalParameters = [] + //参数统计信息,存放SwaggerBootstrapUiPathCountDownLatch集合 + this.pathArrs = [] + //key-value方式存放 + //key-存放接口地址 + //value:存放实际值 + this.pathFilters = {} + //权限信息 + this.securityArrs = [] + //Models + this.models = [] + this.modelNames = [] + //新版本的models 适配antd的属性表格 + this.modelArrs = [] + + //SwaggerBootstrapCacheGroupApis 对象的集合 + //add by xiaoyumin 2018-12-12 18:49:22 + this.groupId = md5(name) + this.firstLoad = true + this.groupApis = [] + //缓存对象 + //this.cacheInstance=new SwaggerBootstrapUiCacheApis({id:this.groupId,name:this.name}); + this.cacheInstance = null + //自定义文档 + //存放SwaggerBootstarpUiMarkdownTag的集合 + this.markdownFiles = [] + + this.i18n = null + //增加header头,servicePath,主要针对Knife4j-aggregation网关聚合模块 + this.header=null; + this.basicAuth=null; + this.servicePath=null; + //Knife4jAggregationDesktop + this.desktop=false; + this.desktopCode=null; +} +SwaggerBootstrapUiInstance.prototype.clearOAuth2=function(){ + if(!KUtils.checkUndefined(this.oauths)){ + //移除 + if(window.localStorage){ + var key="SELFOAuth"+this.id; + window.localStorage.removeItem(key); + } + } +} +/** + * 其他文件分组 + * @param {*} name + */ +function SwaggerBootstrapUiMarkdownTag(name){ + this.id='mdtag'+md5(name); + this.name=name; + //存放SwaggerBootstrapUiMarkdownFile的集合 + this.children=[]; +} + +function SwaggerBootstrapUiMarkdownFile(title){ + this.id='document-' + md5(title) + this.title=title; + //添加内容,离线文件导出时需要 + //add by xiaoymin 2021年2月8日 15:34:41 + this.content=null; +} + +/** + * 判断是否是swagger2 + */ +SwaggerBootstrapUiInstance.prototype.oas2=function(){ + //非空判断 + // https://gitee.com/xiaoym/knife4j/issues/I37X0Q + if(KUtils.strNotBlank(this.groupVersion)){ + if(this.groupVersion.indexOf("3")>=0){ + return false; + } + } + //默认是swagger2 + return true; +} +/** + * 获取类结构 + */ +SwaggerBootstrapUiInstance.prototype.getOASDefinitions = function () { + var definitions = {}; + var swaggerData = this.swaggerData; + if (this.oas2()) { + if (KUtils.checkUndefined(swaggerData) && swaggerData.hasOwnProperty("definitions")) { + if (KUtils.checkUndefined(swaggerData["definitions"])) { + definitions = swaggerData["definitions"]; + } + } + } else { + if (KUtils.checkUndefined(swaggerData) && swaggerData.hasOwnProperty("components")) { + var components = swaggerData["components"]; + if (KUtils.checkUndefined(components) && components.hasOwnProperty("schemas")) { + var def = components["schemas"]; + if (KUtils.checkUndefined(def)) { + definitions = def; + } + } + } + } + return definitions; + +} +/*** + * 根据类名查找definition + */ +SwaggerBootstrapUiInstance.prototype.getDefinitionByName = function (name, oas) { + var that = this; + var def = null; + that.difArrs.forEach(function (d) { + if (d.name == name) { + if (!d.init) { + d.init = true; + that.analysisDefinitionAsync(this.currentInstance.swaggerData, d, oas); + } + def = d; + return; + } + }) + return def; +} +/** + * 释放内存,当分组切换时,置空,放弃全局搜索功能 + */ +SwaggerBootstrapUiInstance.prototype.freeMemory = function () { + //当前definistion数组 + // SwaggerBootstrapUiDefinition 集合 + this.difArrs = [] + //difinition的请求value缓存值 + //key-definiationName -value :requestValue + // add 2019-12-11 15:06:30 + this.definitionValues = {}; + //针对Swagger Models功能,再存一份SwaggerBootstrapUiDefinition集合 + this.swaggerModelsDifinitions = [] + //add 2019-12-11 20:08:51 + //存放treeTable已经递归查询过的schema值 + this.refTreeTableModels = {}; + //标签分类信息组 + //SwaggerBootstrapUiTag 集合 + this.tags = [] + //接口url信息 + //存储SwaggerBootstrapUiApiInfo 集合 + this.paths = [] + //字典 + this.pathsDictionary = {} + //全局参数,存放SwaggerBootstrapUiParameter集合 + this.globalParameters = [] + //参数统计信息,存放SwaggerBootstrapUiPathCountDownLatch集合 + this.pathArrs = [] + //key-value方式存放 + //key-存放接口地址 + //value:存放实际值 + this.pathFilters = {} + //权限信息 + this.securityArrs = [] + //Models + this.models = [] + this.modelNames = [] + //新版本的models 适配antd的属性表格 + this.modelArrs = [] + this.firstLoad = true + this.groupApis = [] + //缓存对象 + //this.cacheInstance=new SwaggerBootstrapUiCacheApis({id:this.groupId,name:this.name}); + this.cacheInstance = null + //自定义文档 + this.markdownFiles = [] + this.i18n = null +} + +function checkFiledExistsAndEqStr(object, filed, eq) { + var flag = false + if (object.hasOwnProperty(filed)) { + if (object[filed] == eq) { + flag = true + } + } + return flag +} + +/*** + * 控制台打印 + * @param msg + */ +SwaggerBootstrapUi.prototype.log = function (msg) { + /* if (window.console) { + //正式版不开启console功能 + window.console.log(msg) + } */ +} +SwaggerBootstrapUi.prototype.ajax = function (config, success, error) { + config.url="/"+config.url; + var ajax = DebugAxios.create(); + ajax.interceptors.response.use(response => { + var data = response.data; + return data + }, error => { + return Promise.reject(error) + }) + ajax.request(config).then(data => { + success(data); + }).catch(err => { + error(err); + }) +} + +/*** + * 错误异常输出 + * @param msg + */ +SwaggerBootstrapUi.prototype.error = function (msg) { + if (window.console) { + window.console.error(msg) + } +} + +export default SwaggerBootstrapUi diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/json5.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/json5.js new file mode 100644 index 0000000..87e87bb --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/json5.js @@ -0,0 +1,807 @@ +// json5.js +// JSON for Humans. See README.md for details. +// +// This file is based directly off of Douglas Crockford's json_parse.js: +// https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js + +var JSON5 = (typeof exports === 'object' ? exports : {}); + +JSON5.parse = (function () { + "use strict"; + + // This is a function that can parse a JSON5 text, producing a JavaScript + // data structure. It is a simple, recursive descent parser. It does not use + // eval or regular expressions, so it can be used as a model for implementing + // a JSON5 parser in other languages. + + // We are defining the function inside of another function to avoid creating + // global variables. + + var at, // The index of the current character + lineNumber, // The current line number + columnNumber, // The current column number + ch, // The current character + escapee = { + "'": "'", + '"': '"', + '\\': '\\', + '/': '/', + '\n': '', // Replace escaped newlines in strings w/ empty string + b: '\b', + f: '\f', + n: '\n', + r: '\r', + t: '\t' + }, + ws = [ + ' ', + '\t', + '\r', + '\n', + '\v', + '\f', + '\xA0', + '\uFEFF' + ], + text, + + renderChar = function (chr) { + return chr === '' ? 'EOF' : "'" + chr + "'"; + }, + + error = function (m) { + + // Call error when something is wrong. + + var error = new SyntaxError(); + // beginning of message suffix to agree with that provided by Gecko - see https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse + error.message = m + " at line " + lineNumber + " column " + columnNumber + " of the JSON5 data. Still to read: " + JSON.stringify(text.substring(at - 1, at + 19)); + error.at = at; + // These two property names have been chosen to agree with the ones in Gecko, the only popular + // environment which seems to supply this info on JSON.parse + error.lineNumber = lineNumber; + error.columnNumber = columnNumber; + throw error; + }, + + next = function (c) { + + // If a c parameter is provided, verify that it matches the current character. + + if (c && c !== ch) { + error("Expected " + renderChar(c) + " instead of " + renderChar(ch)); + } + + // Get the next character. When there are no more characters, + // return the empty string. + + ch = text.charAt(at); + at++; + columnNumber++; + if (ch === '\n' || ch === '\r' && peek() !== '\n') { + lineNumber++; + columnNumber = 0; + } + return ch; + }, + + peek = function () { + + // Get the next character without consuming it or + // assigning it to the ch varaible. + + return text.charAt(at); + }, + + identifier = function () { + + // Parse an identifier. Normally, reserved words are disallowed here, but we + // only use this for unquoted object keys, where reserved words are allowed, + // so we don't check for those here. References: + // - http://es5.github.com/#x7.6 + // - https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables + // - http://docstore.mik.ua/orelly/webprog/jscript/ch02_07.htm + // TODO Identifiers can have Unicode "letters" in them; add support for those. + + var key = ch; + + // Identifiers must start with a letter, _ or $. + if ((ch !== '_' && ch !== '$') && + (ch < 'a' || ch > 'z') && + (ch < 'A' || ch > 'Z')) { + error("Bad identifier as unquoted key"); + } + + // Subsequent characters can contain digits. + while (next() && ( + ch === '_' || ch === '$' || + (ch >= 'a' && ch <= 'z') || + (ch >= 'A' && ch <= 'Z') || + (ch >= '0' && ch <= '9'))) { + key += ch; + } + + return key; + }, + + number = function () { + + // Parse a number value. + + var number, + sign = '', + string = '', + base = 10; + + if (ch === '-' || ch === '+') { + sign = ch; + next(ch); + } + + // support for Infinity (could tweak to allow other words): + if (ch === 'I') { + number = word(); + if (typeof number !== 'number' || isNaN(number)) { + error('Unexpected word for number'); + } + return (sign === '-') ? -number : number; + } + + // support for NaN + if (ch === 'N') { + number = word(); + if (!isNaN(number)) { + error('expected word to be NaN'); + } + // ignore sign as -NaN also is NaN + return number; + } + + if (ch === '0') { + string += ch; + next(); + if (ch === 'x' || ch === 'X') { + string += ch; + next(); + base = 16; + } else if (ch >= '0' && ch <= '9') { + error('Octal literal'); + } + } + + switch (base) { + case 10: + while (ch >= '0' && ch <= '9') { + string += ch; + next(); + } + if (ch === '.') { + string += '.'; + while (next() && ch >= '0' && ch <= '9') { + string += ch; + } + } + if (ch === 'e' || ch === 'E') { + string += ch; + next(); + if (ch === '-' || ch === '+') { + string += ch; + next(); + } + while (ch >= '0' && ch <= '9') { + string += ch; + next(); + } + } + break; + case 16: + while (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'F' || ch >= 'a' && ch <= 'f') { + string += ch; + next(); + } + break; + } + + if (sign === '-') { + number = -string; + } else { + number = +string; + } + + if (string.length > 15) { + number = new Number(string); + number.toString = function () { + return sign + string; + }; + } + + if (!isFinite(number)) { + error("Bad number"); + } else { + return number; + } + }, + + string = function () { + + // Parse a string value. + + var hex, + i, + string = '', + delim, // double quote or single quote + uffff; + + // When parsing for string values, we must look for ' or " and \ characters. + + if (ch === '"' || ch === "'") { + delim = ch; + while (next()) { + if (ch === delim) { + next(); + return string; + } else if (ch === '\\') { + next(); + if (ch === 'u') { + uffff = 0; + for (i = 0; i < 4; i += 1) { + hex = parseInt(next(), 16); + if (!isFinite(hex)) { + break; + } + uffff = uffff * 16 + hex; + } + string += String.fromCharCode(uffff); + } else if (ch === '\r') { + if (peek() === '\n') { + next(); + } + } else if (typeof escapee[ch] === 'string') { + string += escapee[ch]; + } else { + break; + } + } else if (ch === '\n') { + // unescaped newlines are invalid; see: + // https://github.com/json5/json5/issues/24 + // TODO this feels special-cased; are there other + // invalid unescaped chars? + break; + } else { + string += ch; + } + } + } + error("Bad string"); + }, + + inlineComment = function () { + + // Skip an inline comment, assuming this is one. The current character should + // be the second / character in the // pair that begins this inline comment. + // To finish the inline comment, we look for a newline or the end of the text. + + if (ch !== '/') { + error("Not an inline comment"); + } + + do { + next(); + if (ch === '\n' || ch === '\r') { + next(); + return; + } + } while (ch); + }, + + blockComment = function () { + + // Skip a block comment, assuming this is one. The current character should be + // the * character in the /* pair that begins this block comment. + // To finish the block comment, we look for an ending */ pair of characters, + // but we also watch for the end of text before the comment is terminated. + + if (ch !== '*') { + error("Not a block comment"); + } + + do { + next(); + while (ch === '*') { + next('*'); + if (ch === '/') { + next('/'); + return; + } + } + } while (ch); + + error("Unterminated block comment"); + }, + + comment = function () { + + // Skip a comment, whether inline or block-level, assuming this is one. + // Comments always begin with a / character. + + if (ch !== '/') { + error("Not a comment"); + } + + next('/'); + + if (ch === '/') { + inlineComment(); + } else if (ch === '*') { + blockComment(); + } else { + error("Unrecognized comment"); + } + }, + + white = function () { + + // Skip whitespace and comments. + // Note that we're detecting comments by only a single / character. + // This works since regular expressions are not valid JSON(5), but this will + // break if there are other valid values that begin with a / character! + + while (ch) { + if (ch === '/') { + comment(); + } else if (ws.indexOf(ch) >= 0) { + next(); + } else { + return; + } + } + }, + + word = function () { + + // true, false, or null. + + switch (ch) { + case 't': + next('t'); + next('r'); + next('u'); + next('e'); + return true; + case 'f': + next('f'); + next('a'); + next('l'); + next('s'); + next('e'); + return false; + case 'n': + next('n'); + next('u'); + next('l'); + next('l'); + return null; + case 'I': + next('I'); + next('n'); + next('f'); + next('i'); + next('n'); + next('i'); + next('t'); + next('y'); + return Infinity; + case 'N': + next('N'); + next('a'); + next('N'); + return NaN; + } + error("Unexpected " + renderChar(ch)); + }, + + value, // Place holder for the value function. + + array = function () { + + // Parse an array value. + + var array = []; + + if (ch === '[') { + next('['); + white(); + while (ch) { + if (ch === ']') { + next(']'); + return array; // Potentially empty array + } + // ES5 allows omitting elements in arrays, e.g. [,] and + // [,null]. We don't allow this in JSON5. + if (ch === ',') { + error("Missing array element"); + } else { + array.push(value()); + } + white(); + // If there's no comma after this value, this needs to + // be the end of the array. + if (ch !== ',') { + next(']'); + return array; + } + next(','); + white(); + } + } + error("Bad array"); + }, + + object = function () { + + // Parse an object value. + + var key, + object = {}; + + if (ch === '{') { + next('{'); + white(); + while (ch) { + if (ch === '}') { + next('}'); + return object; // Potentially empty object + } + + // Keys can be unquoted. If they are, they need to be + // valid JS identifiers. + if (ch === '"' || ch === "'") { + key = string(); + } else { + key = identifier(); + } + + white(); + next(':'); + object[key] = value(); + white(); + // If there's no comma after this pair, this needs to be + // the end of the object. + if (ch !== ',') { + next('}'); + return object; + } + next(','); + white(); + } + } + error("Bad object"); + }; + + value = function () { + + // Parse a JSON value. It could be an object, an array, a string, a number, + // or a word. + + white(); + switch (ch) { + case '{': + return object(); + case '[': + return array(); + case '"': + case "'": + return string(); + case '-': + case '+': + case '.': + return number(); + default: + return ch >= '0' && ch <= '9' ? number() : word(); + } + }; + + // Return the json_parse function. It will have access to all of the above + // functions and variables. + + return function (source, reviver) { + var result; + + text = String(source); + at = 0; + lineNumber = 1; + columnNumber = 1; + ch = ' '; + result = value(); + white(); + if (ch) { + error("Syntax error"); + } + + // If there is a reviver function, we recursively walk the new structure, + // passing each name/value pair to the reviver function for possible + // transformation, starting with a temporary root object that holds the result + // in an empty key. If there is not a reviver function, we simply return the + // result. + + return typeof reviver === 'function' ? (function walk(holder, key) { + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + }({ + '': result + }, '')) : result; + }; +}()); + +// JSON5 stringify will not quote keys where appropriate +JSON5.stringify = function (obj, replacer, space) { + if (replacer && (typeof (replacer) !== "function" && !isArray(replacer))) { + throw new Error('Replacer must be a function or an array'); + } + var getReplacedValueOrUndefined = function (holder, key, isTopLevel) { + var value = holder[key]; + + // Replace the value with its toJSON value first, if possible + if (value && value.toJSON && typeof value.toJSON === "function") { + value = value.toJSON(); + } + + // If the user-supplied replacer if a function, call it. If it's an array, check objects' string keys for + // presence in the array (removing the key/value pair from the resulting JSON if the key is missing). + if (typeof (replacer) === "function") { + return replacer.call(holder, key, value); + } else if (replacer) { + if (isTopLevel || isArray(holder) || replacer.indexOf(key) >= 0) { + return value; + } else { + return undefined; + } + } else { + return value; + } + }; + + function isWordChar(c) { + return (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + c === '_' || c === '$'; + } + + function isWordStart(c) { + return (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + c === '_' || c === '$'; + } + + function isWord(key) { + if (typeof key !== 'string') { + return false; + } + if (!isWordStart(key[0])) { + return false; + } + var i = 1, + length = key.length; + while (i < length) { + if (!isWordChar(key[i])) { + return false; + } + i++; + } + return true; + } + + // export for use in tests + JSON5.isWord = isWord; + + // polyfills + function isArray(obj) { + if (Array.isArray) { + return Array.isArray(obj); + } else { + return Object.prototype.toString.call(obj) === '[object Array]'; + } + } + + function isNumber(obj) { + return Object.prototype.toString.call(obj) === '[object Number]'; + } + + function isDate(obj) { + return Object.prototype.toString.call(obj) === '[object Date]'; + } + + var objStack = []; + + function checkForCircular(obj) { + for (var i = 0; i < objStack.length; i++) { + if (objStack[i] === obj) { + throw new TypeError("Converting circular structure to JSON"); + } + } + } + + function makeIndent(str, num, noNewLine) { + if (!str) { + return ""; + } + // indentation no more than 10 chars + if (str.length > 10) { + str = str.substring(0, 10); + } + + var indent = noNewLine ? "" : "\n"; + for (var i = 0; i < num; i++) { + indent += str; + } + + return indent; + } + + var indentStr; + if (space) { + if (typeof space === "string") { + indentStr = space; + } else if (typeof space === "number" && space >= 0) { + indentStr = makeIndent(" ", space, true); + } else { + // ignore space parameter + } + } + + // Copied from Crokford's implementation of JSON + // See https://github.com/douglascrockford/JSON-js/blob/e39db4b7e6249f04a195e7dd0840e610cc9e941e/json2.js#L195 + // Begin + var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"': '\\"', + '\\': '\\\\' + }; + + function escapeString(string) { + + // If the string contains no control characters, no quote characters, and no + // backslash characters, then we can safely slap some quotes around it. + // Otherwise we must also replace the offending characters with safe escape + // sequences. + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? + c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + // End + + function internalStringify(holder, key, isTopLevel) { + var buffer, res; + + // Replace the value, if necessary + var obj_part = getReplacedValueOrUndefined(holder, key, isTopLevel); + + if (obj_part && !isDate(obj_part) && !isNumber(obj_part)) { + // unbox objects + // don't unbox dates, since will turn it into number + obj_part = obj_part.valueOf(); + } + switch (typeof obj_part) { + case "boolean": + return obj_part.toString(); + + case "number": + if (isNaN(obj_part) || !isFinite(obj_part)) { + return "null"; + } + return obj_part.toString(); + + case "string": + return escapeString(obj_part.toString()); + + case "object": + if (obj_part === null) { + return "null"; + } else if (isArray(obj_part)) { + checkForCircular(obj_part); + buffer = "["; + objStack.push(obj_part); + + for (var i = 0; i < obj_part.length; i++) { + res = internalStringify(obj_part, i, false); + buffer += makeIndent(indentStr, objStack.length); + if (res === null || typeof res === "undefined") { + buffer += "null"; + } else { + buffer += res; + } + if (i < obj_part.length - 1) { + buffer += ","; + } else if (indentStr) { + buffer += "\n"; + } + } + objStack.pop(); + if (obj_part.length) { + buffer += makeIndent(indentStr, objStack.length, true) + } + buffer += "]"; + } else if (isNumber(obj_part)) { + return obj_part.toString(); + } else { + checkForCircular(obj_part); + buffer = "{"; + var nonEmpty = false; + objStack.push(obj_part); + for (var prop in obj_part) { + if (obj_part.hasOwnProperty(prop)) { + var value = internalStringify(obj_part, prop, false); + isTopLevel = false; + if (typeof value !== "undefined" && value !== null) { + buffer += makeIndent(indentStr, objStack.length); + nonEmpty = true; + if (JSON5.compatible) { + key = escapeString(prop); + } else { + key = isWord(prop) ? prop : escapeString(prop); + } + //此处会把key的双引号去掉,导致在editor中显示异常 + // modified at 2019-12-9 18:12:23 + // https://gitee.com/xiaoym/knife4j/issues/I125B2 + // https://github.com/xiaoymin/swagger-bootstrap-ui/issues/156 + //校验key值是否包含双引号,如果包含则使用默认的,否则追加双引号 + //正则 + var doubleQuoReg = new RegExp("\".*?\"", "ig") + if (doubleQuoReg.test(key)) { + buffer += key + ":" + (indentStr ? ' ' : '') + value + ","; + } else { + buffer += "\"" + key + "\"" + ":" + (indentStr ? ' ' : '') + value + ","; + } + } + } + } + objStack.pop(); + if (nonEmpty) { + buffer = buffer.substring(0, buffer.length - 1) + makeIndent(indentStr, objStack.length) + "}"; + } else { + buffer = '{}'; + } + } + return buffer; + default: + // functions and undefined should be ignored + return undefined; + } + } + + // special case...when undefined is used inside of + // a compound object/array, return null. + // but when top-level, return undefined + var topLevelHolder = { + "": obj + }; + if (obj === undefined) { + return getReplacedValueOrUndefined(topLevelHolder, '', true); + } + return internalStringify(topLevelHolder, '', true); +}; + +export default JSON5; diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/logger.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/logger.js new file mode 100644 index 0000000..637d336 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/logger.js @@ -0,0 +1,21 @@ +/** + * 控制台日志组件 + */ +var debug = false; + + +var logger = { + info: function (msg) { + if (debug) { + if (window.console) { + window.console(msg) + } + } + }, + error: function (err) { + if (window.console) { + window.console.error(err) + } + } +} +export default logger; diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/logo.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/logo.js new file mode 100644 index 0000000..9a666f5 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/logo.js @@ -0,0 +1 @@ +export default 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTA1LTEwVDEwOjU1OjA0KzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0wNS0xMFQxMDo1NjoxMiswODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMC0wNS0xMFQxMDo1NjoxMiswODowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxYTZhOWUwZS04ZWFkLTlkNGItOGY2My03MWYxZTY4NTRhMjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MWE2YTllMGUtOGVhZC05ZDRiLThmNjMtNzFmMWU2ODU0YTIwIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MWE2YTllMGUtOGVhZC05ZDRiLThmNjMtNzFmMWU2ODU0YTIwIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxYTZhOWUwZS04ZWFkLTlkNGItOGY2My03MWYxZTY4NTRhMjAiIHN0RXZ0OndoZW49IjIwMjAtMDUtMTBUMTA6NTU6MDQrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6ESy9MAABM4UlEQVR4nO2dd5hc5XX/P+fe6bO9aVVXXUJCEuqAEL2JbgIYbBxi48TBP3BwT+wkdoxt7NiJTWxj3MB23BvFDhgwBtEFCNRQRRKruqut09u99/398c6orlZ3RrvSSsz3efQgWzP33pl5v+97yvecI0opyiijjL5hHO8HKKOMoYwyQcooox+UCVJGGf2gTJAyyugHZYKUUUY/KBOkjDL6QZkgZZTRD8oEKaOMflAmSBll9IMyQcooox+UCVJGGf2gTJAyyugHZYKUUUY/KBOkjDL6QZkgZZTRD8oEKaOMflAmSBll9IMyQcooox+UCVJGGf2gTJAyyugHZYKUUUY/KBOkjDL6QZkgZZTRD8oEKaOMflAmSBll9IMyQcooox+UCVJGGf3AU8qb5Lwb3b/YtpDqRqioAeVANo3avBK57IPIwstRa16Aja+hsink0g+gfv9N5PQrEDFgwkzUa08iVXWoTBKprEf1tCG1wyAZQ6XiqLYtGBf/HezYhLKyqJcexvjgV1EP3gNNLcgF74V1y1BtW5BF16B+/iWoboAzr0ZapqJ+/XVUeyuyYAkyeR7UN6F+ew/qud8hcy6C0ZOg5VSvNIysxrYcwMEX8NGxY756+pdevP59zY2r6jwYJhzc79gw/HS375IZi18nGUsryFLTCM/9HlCAlPIzuPruqR0GoSrIZSAQhrpm/W/dbZBJgZ2DSAdq51vIJe9HFixBbV4Ju96CtS8jcy9ETZoLrz4GOzch196J87O7YNwMRERfu20rctEtqPatSLAC9cbTMOtcJNGLeuUx5G8+ivrjd8HKwezzkXnnox7+Hmr5X5BpZ0AgpH+TcA1UN+pn6mmHTBJ2bIJdm5BLb4Up81FP/xJSCeSsa8BxUBtehVXPgmni/Pa/BvwrLIkgJw1MIBWDWDfkMh5gPMlUgomz5os/sIBhY20q62oIVrTgOCMBC3DIpHzUDTtN/vbzxgFkcOx+7uXpwXHa1Kbl92HlfoKVi6LZ8c6DAaTiENmjv38UBCrAl/HgWAFsyyGXSZFNKZIRiHaBlQXDPOaP+g4hiMovRYF0AgIVgnKmEU9WMe/S841T42fSMMoHTCHRa8mUBfXMOreKTFrvZrksOBZ7d3oRsG39w7lHLcqplXEz7iadaFCta3+C42werMNjSEChrQYB0kn9Xdp2E/H0HGae02OMnHw1NY2zMM0M3kAAjy+IL1CJcmzCVVFsK8fwCTFmnRegqeWPpBOryGXXkk3HEQNwBv0jnLwEsXL5RQ2ICCJTsLJz5crbahHjfYRrxpGMBmTCrACmx0smpc0Qw9S7Wyp+0AUHYCWLAelECF/gTqlrTitDvoxSg2ZhHR+INu0KxBAzSCp5iVz6gVHkMtcTrhpLordexpxiMXF2mGzag1L69crJn8IClXV6IzK94PFCKnYx2VRGZp0bQVil0okHxOt/FtvuHEwz9eQhiIg+hlNxcByhul4IVp5DOjGXkRPnSPO4d6McxfBxguMY5LL6BzmECMcAuWwl4eqPcvYNSwmGXzjEZzlaBMKwZTW8/Ij2QY4FCqeqbUNFTRgr9y5GTRkujaPOwhe4ipoGhVKCldMESif0n8PBzm9upAv/TwAxAtQ2VSPGGEknrsAfehKf/0NYua2D9bFODoIoBYmIQW0TjD31FLKpf5BLPtiAlbkaOxfG9IFH9O6UTh7vp9XE9PqrpHHUCPZsG2DbWoHhATkWDk6eFImoNp9ClXMxve+Xs65txMq+CzG8hGvByUE6OTBbfC6r/2t6wMpeJNMXfV/17vkIO99aNyDXPwgnLkFMD6Si2sH2eJtVbfPfy/gZi2TK/Akk4xOxMvkXSv74Pq5PeygCYR/b1p3v/OBTvyVcPXDXdWzwBZDmcRAawOseDDEg3gPhKpi6YJFS6g4ZNnYxtjUCK7+IlQP2IPkJhVNXuFDOvOYG9cyvvsAg/MonHkHEAMtCde1uZPYFY4xRU67FF3ivTJ7TQiqu/YgTBUp5cOz+o1/FXVAvkVA1eP37dtuBhGHq8GusOySzzp1JZe1naBozj0R0OLk0x96hUpBLX0So8gFg20Bf/cQhiOMUfIYgU+adIQ0jrmHk5DsYPiFLIuLT4cITyNtNJzI0jf6zfODL+jQcCJgeJBXD+euvDs3FHDWUJnK0C5l78RQZN+OrDJ9wKdmUn3gPeY98gO/p5rEUGOYcxpwynnceQUTbr7kM+ILgD71bTr9iIf7gh/F4PUQ7QQzf3teeSLByJsGKCjn1rIFbzD4/6ldfhWyKgf0+FCiFMr2NEq5+t8y54Eq8gYuJ92jn/Hh+95ogfmlqmQA8M9CXH9oEsS3wV6A83qtkzkVXkYpfjtffjJXV/yYnqFJGBGwrqXZt2zRg1zRMiPfoLDgM4JoVbao1jp5ozL7ocxjmzThKR6BkCGxKhgGWtUutefZFrr9hwC8/dAmSTkAmOYnpZ94hlbWXkE5M1v7HINjVrqBATPD6dFwewOMDrwnRiDY/CmbgkSAG2Faa7etbBySGrxSEa1CvPgrJKFTVHd31YJ+vkY5DsOLDMm7GNXi8F2APlL80QBADEr33sXbZOjjZCWKY+gfOpkaqcadOlVDVf4svMHOfyXAMQlFKaQL4AgUiZIn1rMUwvWRSXXRs30IiGsWxbGJdKdXT4cicCy28viY83lvx+v1HNJlEQDk2sZ7kgBDE44XdW3W41ec/+q9JBBIRaB4HLdO/Jj7/J3DyOY4hAwWGZwsiXSra/RfMwZGhDA2CKG3jEu0UOePKiTJxzg9pHDmPRDSgE0aDcJQbxj7b3zDB48ug1F9wLJ/q3fMW2ze8TtcuG6W65ezrX8TweFUm2cuut5Ls2gLZNGx7E/X2m/rxRk2uklGTr0eMRtSRFpKA4yjiPVmdST/Kz+f1ozpaIZMAb+DorgWQS0Oosk7mXfLvVDf8E7HugcnVFPwVx85/5x4wPDbZ1JMolWF/dblSYHqS+PyTsHJzdHZ+P+b7Qz0q2v0dMc1f4PG2Hf3D9Y0hQJC9MoMQlfXnScup/wJqEbGeAfYxRP8gdj6smsttweN5WCXjUfa8vYE1L2xRXv9q47qPwe4tWbZvsNi6BoWDnHMDe00sXwBCFdrUClVrdawvCLXNs/D4Qq5MLMMAK5dVW1Ymj4ogSoFp6pCu4+jncI4y76CvM0umnfEhwlW3Ee85enJ4/dpntLKA7MAffER1bH+bzStfVzs3RYyLb1lHqMrGsfd9EYEQavuGjHr29yPllIWnyfiZ86msG4FjWSBKLXv09+TSf2HhFTKYvtDxJ0gmCaMmDzNOXfx1gpU3k8sonAF0wL1+hWHYpBI5otEogfCPVffuZ9VTP18pLafslEXXorZGYPdm8If0YjVMLcGuqM77FAfbLHonVCLIu/4JOfsq6O4+BSsXdBWRUgoM4xfUNquSCaKUXngAe7ZpM6vUhSJ5fyObBsP8B6kbcT6m5wYyqRJ/h3w23+PR1+xp/xnB8Atq3ctr6Wp7U674UBe5NHTvhp1v5QMuBz274cnL3TdsZ8T47di5P2IY4Ih+pu42vdF4fYNqdx9HgogWFFY3TJKW6XfhDbwbKwsKGRCnNRAGK5ule/cLIN9VFTUJ/vqLZ2TBZUm8PkhGdCDANHUewh/SO/ARv27Rr9+9GRk+ARk+DvX6s0jzuBj+kI1jH3lFWVmoqs8aH/xK6Z/RMMEwUM8/iNq1SZ9opUA7uUhtM9I0+g6szD0YInuFnqUgVB0j1gXx1P9R1fB955HvLJeFl0cxPfuiX2JoggdChyG22rdReXz69Xs3H6V9LRiEfM+BOPYEMUxtK8d7IFj5KRl76rUY5twBiU4pBZW1vThOF2+vWUPDyG+ojctXSLw7Ikv+HmWYee7lVaJ9FTf1fwPwBVBtW2HHRti+AbX8cUgnkA/fczoTZnlJxtxdKp2IHtWPGwhD9y7Ukz+Bynp30bODIQYkewEF7/nMnQwf9w0inaWdGvpEawMVY8vKu4BlatfmjbL4b/T3XCDFcajpOBocY4KI1k6NmYbMveibwD8h5tHbzSjwhTL4/K+p5//wI2lqeVDt2ZaSUFUGfxCywdIW0AG3UPqE2b0FOncgNU37fuxMErz+s4r5HGrXptXkMqUtRtFKRPXmi7qir9TPlk1DIIRcfccnaB73NXo7SlvAyoFwdU517Pwvgf9Vq57tkKkLHPzBQd/hBxvHliCpGDSMQi77+3toGPkRIiX+IAWYHvI2/P+pja/+kY4d96udm3JkUkhTi7ZRBwIi4A/C1tXQuRMZeyqYPvbaY7kM+AKefRLtI1zLcRS7W9tJxUqTmYgBVgY2ryjNtBK0+tbj9cnpl3+SptFfJNJZ2m9hGAmC1U+zauljrHr2XpbcCpW1+Shh8Zcbajg2BBHRMvOaYX65+JavUtP0EaIl/iCFPIVhQrz3SZWI/FTqhz9Cb0dU7dgANcO0PzFQAkAxdORq80pY+7Iu5PF4D9oZBaQoNiq6diaI9exLOhb5TKq7TZOj2BNI8r6fxxeQWed9nLrhnycRLWEzyZ+ose4fKkf9iK5dq1X3biQQPuFPjf0x+AQRQyf/Rk3xyUV/+xWq6v+JVKz0KJU/6JCKbSSb+Zzz5P8ulbph7Vx8i14s/tDRm1IHPrxeUO3bUB3bYNQkHV05eGu0rUo8Xn9RpmI26ZBJgF0KQQRyqeLfh+jTTqRa5lz4Uarq/pVMsvhdyrG139P+9pfVyme+xIIlSXxBvZEM6Pd//DF4BMmmdMQi1os6dZFpXPGPXyMQ+ki/VWT9QSkIVbWTjN7F9g3Pq23rVxIM5XerwYiD5+tIejs0HcafxmFtBqUm4w/Wuov8CKDeUq3ronTv3heqdQPH1rmXUJV+lqI2GdEJQDGCMnnex6io+SzZdJHkyOeCgmFU65q7eOrn/05Nsw54nKQYHIIohYyaCiMnAgqZec43qai+nVh38SeHUuDxbcfj7VArnv4iOA9KqFqH+TKJweGGyocYQ1XIGVci40+Bw1lsBpBIjCAVD7vOgYg8LBe8t5tM0r2Z6ThQ24zatBxWP5snSRGwMuAJG3LK6Z8hWPlZMsniE2yGJ0Uus5pA+Je88NA3adsKIyYWd40TDANPEKUApb+4M68WaWz6DtHYbUS7SvM5ghVp1bb16xII/5S33uhlzFSoNAfJAdQNFCQQwml/Gzq2I9vXoza+dni7OhlFzrwmyYTTLF2T4uIehlkri681MA3H9ecIAdt2op7/Q5GOfb5W3xfyyLxLPk2w8jOlkcMEx35Yde68WzzeVVTW6dPvJDOpDsbgmVi639T5GObcvdqbYiAGeLwZtq2/k7UvfI8Fl0NljU7sDZYPaHjAb6A2vAabloM/hHrl0f6dzt49MH3R9eLzV7oiiGGgeju2smeH494xFp3Vf+VRaF0DjWPcBSEKjSzC1UGZc8EnqRv+OdIJo2hymB7IJB9Q2zd8CV9gy97o4TsApREk00/jA6V0lKSmYbTUNN6BbS8o+vqGkcb0Rtm56V+ch79zv0w7Qzvhg/mjiIF4PPD687DmeaRleh/Rqj4Q70XCNfVYOXf3MUzo2LGVaJf7CJYvAJvaUa//BepGuCSHoX3A6kafzL/kk1Q3fr7ok0M5OvCRSf2v2rziLqzsVoIV7t9/EqA0gvRndzo2UtXQIrMv/C+Qq4u6rlLgCzhkkj9S0a57yWXWYmXzC2mQdyzDRO3eDNvXw6Q52hl1c890AkKV4aII0rmri47teuEfEQKGaN2SckBc/GSGAfEI+ILI4mvvpK75P1xn+AtQDgQrIRF9QG1Y9lmy6d3vNHJAqb15F13Tx/9p6ChJvAeZdd5lmN53FVfEr8Dnd4h2fUl17b6fqrpWrTc6BtIEx9FN5sacArVNuEr4FRAIgtfnc513MTzQ0ZqkdS2uFpyuPkQlolqT5Ob1iShU1iJX3/4vNI7+ctHBEaU0OTKpH6vnfn8bPn+G2ib37z+JUNoJsm7Zof9fNg3N45CJp83Ftm5GYRQVYjK9WSzrXtW69rt4vLupK6bhmRTqB/JmUd5xFMn7LHnFrLDvv3vfmk+czTgbaRqTNx+LeG5/1sTjC7p2Vg0D1dNm0f72kSNRSmkSFboL9vXvByOdhHAVcs1H/o3GUV8oKUPuD0Iq/n31/IMfI9adYfSUd4zPcTBKI8ieg5tH5DVWNY0mIybcRTZzpu5L5XKhGUaObPpe1bvnPkR2H9nfyNdBiAlOPmpW0Ek5Npx5td4xMynYvhFqGvM1J0q/3vToZzMMEEHGz4S64dqhLWYh6N19IsoZ7drESideNy77h82uQryBEM6fH9CS8ECo7/vrv+j/OBZU12Fc9/HPUj/iC0RKiBx6/ZCM3adeefRfiPckCB+F1uskQGkEOdh2Vo7etYa1XAAyP18Y4+5aWvb8YxXp/CH+4AZClfpHClbqU+kAP0D0vQ1zX+PotrdRq5aClUX8IRg9FVlwGer5B5FQpd6l5y9Bvfx/qNXPobp2IQuv0O9NxjWJRKC3vfhd0rF1V3J/ULk2yxxnJ6OmxPaebIeDUlAXgOeqtG4K9CiJcBWMmKR3+cpa/T1VN+rPX9MEoarPUFX/RRK9xclHlNLXTEbvU68+/lmi3b0EK8A6Ctn7SYCjD/OKQKQbJs6uZu4lnyPa2VDU+32BOK1vLqVzx5t4fIVOifkwcU8h/q5nRzi2PiVmnI3q2A6RThg3S/fX1cUzetH48+/Jy9MJhvX1dPEO6skHQEzUxg7U+oK5WIIJ0dOOXPL+Zllyaz09e9y9R9mQ6D3y60wvbNoJ0e79zKt89tzn14s5WKE7G1bWadOwquFfCFZ8qWgzUTn6WsnYD9Qrj32aWHf0ZFDiDgSOniC66AnGzbiMbKqItKoCb7CHHRs/4fz6P39OJqEXhRj63xxbX3vYWAhWota9DF4fauUzMHUhsvAKPSTHkH07pSLfXYR99c9K6TJbw6NfV4jhOzYSCIHhQWl9UvGfPVgJHt95KBV29XqPD7WndQORznS/IV6loK4Z9eRPoXVt3kTMS2oU2ky0nX3NojNJwfRMR+TWojtLKgdClZBK/FC98PBHSPSm8fdhzr1DURpB9rdr00moHxGS2efdTFdbk+tj3TBR6fhvePOF+zEMbQodHGnJ5U01MVBP/ARZeDkMa9FRJ60rKunxdT2FQlk5pHm0NsWKiVwVUDccqhr8rlt8erzQ3d7Gzo30uwg9XtiyCjp35Mt+D7OTa9m64PXNk7oRH8c0JhTXeUTp50hE71XPP/hx4r3po6ovOQlREkFU1y79F8cGjw+ZOPtSYj3nFmXzmt52Yj0P7D01bPvQiYlWFkLhfTs/5OuXS3nqg2CY2pybMAvGzaDoPAHkzZr6GtcOuscLve0Rtq3XptHh4PXrQEikq/+CKMuCsH+iNI7+FKjriu4AY3ohl/meWvnMXcS60oRry+Q4CKWdIAVzRNdmGDJ+5mXYtvtzOVTZzZZVH2D9q8sQ0bMB+4Jja/NtUHIhOtav3noDGdayz44vln2mx+N6UXl80Lkzqd56Q3+uQx6pUIcd3BfiPdy1c2moaBkv42Z8FqWu2zt4xvVzm5BL/1BtXf1lspk2Av3c6x2M0hKFs8/Xf3EcqB9+PiJ/59qh8/oh1rNcbVn9FNFOvQj6jPGjHeyGkTrxNRiyXdPU107G9Cli5YpzTG3LIFzd7No8s3PrqW58llGT9VDTQ57Hg3i8qJ0bdQi7L79IRBN5WEuDTDjtX/H5biku0pQPc1vWT1Tnru+RTm3D60JS8w7FUSQKlZa13/DJ6Xh8pjvnUIE/FGXburtZ/3KGqoZ8o+WDIAKRTt1zcNSk0tvZHPFxFIQqUS//CePMK6F5GLj1cQ0gk20i2j3aNUGi3TlZ/De2nHfjoQsy325IvfEX2LYevH38NIYB8V6YMLtWFl7+nxjm+4tudiGmQy5zv+ppvw87u3xQxZ8nAUojyOS52m+Idftx1Dmuj2ZvANWx/TH18p9eFcfRnU36hKCiXTq+fyzg9aOef0jb+24XezYFw8YlZNoZ0X7Fm3uhwDB9KOXtczMxPRDrQT12f76xXDZ/ojl5KYwD0S7UrHN8xoXv+S9Mz/tJldBA2jQ3qt7eH5JJLx+wsQsnMUpz0ttbIZNEzrr2AmqbLiHrctv1+m2J9/xZrfxrXNUM69vmNcx90amBarpwJIignv1dcY2xIx3I6VfNZd5Fi10RxPBAOrFHpeJdffpUhqkTgsEKnfRrGAn1I/JJ0wqd9/D4TBk/64f4Qu/T7UCLrUc3FBg/xfQs26smkIP+HPKeg19j5P8Mgc7uxwClbSGbXte7/+LrRuELBnTG+wjQ5kFcbV6xTOZc3Lfj7Q2g9rRC1y72xvz7hOioVzadn2abD21amdLCtUpBdSNSXY9rXycRgWEtI8gVEcGKdbeyY0MCX7DPf1crntYJzWAFVDXAyEn679WNEK72yrAxPyIRfR+xIiUkelqsIpO8E+X8jx7HnGPv91iYctXXolf2vnwLot9nZSk6KHCCojQnfe7FkEkhwYr3kE273MYElLofw1zHqCmH/nMgrNt/du3Si+ng0KkAKC0PyaaFYIWicXQzlXWjCeSH/FU3RQhWbsOhnVxGUI4761p0MwPlKGTyHN1k4kg5lnQC6oaH98pAjgSPF+K9EXZsPFSkKPmGznu2a7Iq9OfPJPW/ef1gev6eSOf7cJzio3rBKoetqz7pPHLv/+hEqbPPB1I2e5uHHw57T5d8Tirf/E8qaot7jhMQpRHkwptR8Z7JmL7xrjO3ykG1vvkMVX2EbcXQcpAd63X48uBeT4ahd+xsGpkwsx6R98ukuZNlwuxFKGfa3qNmygJQai2xnlepG/4ApucFMgnLnTmg9KIPhKBp9JFPIisLNcOGuc+B+CDWk+LttVBVf9DnM1GxLi02PKD2Jd+FJFBxvlQ3XVN0KyPHgao6xfb1n3b+8M3/JhXXvs7+30fh7/19R/uTZ38yVZ6gA4yKQGk+yGuPI+NnVtHUFCDjsv2MGG/x0iMv07HjULFj3v5WmaTWXO3vm4gBkS5k4pww40/7rEyYtYR0/DSyfchD9NiBaeTsaXLK6fNIRN6iedxnyGXXHpEkXj90bEft2IRcfp7WfPW3U9sWBCuqXC9ar4mKdGxQm17TvgXkxY5hqKjdlwMpXE8EskkYMXG2NIz8FKiL3N0oD8fRurSdmz6mHrv/m2TT4A9QklnU11sKWreTHKUR5P7Pwt/ddY6Mm97ojiAKTPNpOe+mzkNk3l4fJGM4j/7g0L5WghYiVjc2y3k3fgtf8DqiXYd3KPe+TyCTmI4/eIpMP3M+vuAjJKMfI5dJ6SbIfQQHlNLZ7e3rYfMKZMJs+q0xV8rA42123QsrHmuVyfOW8r7Pa4cbNDneXqN9j/2Lp8SAVBypGTaNiXPuIZdZXJRvpcPXjura9Uke//E3yaT0Pa3cO8FtGFCUZmKddS3SOOo00i6ccwDTi9q5aROG6VDdsO+ILizyNc/nw5n77cZO3gkPV0+USXO+jsjVxIupjBOdyHNkBGL+oyy6pkG1bbmZ1nWZw8o8vH7Y9Ra0t8Kii6Gr3wo+P3auxrWzmoqHGD2lSqbMydewALWCWuqHFx7ad6paOchmkVnnjmDWud8nl12kF3YRK9sXyBHv+Twrnr4Xx9Hma7oEKU0ZpeZB5kBlbaXrsKgvCGtffp233zyozFRA2aj2t/VkpP0XgW1BRW1IJs75KoqrS55VofK+RUXddcb1n+pUrz95GxuX52/fx6KrG47ashL1lQ8dflFmkjB8gmlc9zH3JqZhOqQT9t7GeYEKeHU96k/f0wJMrw8Q3Sl+3IxGzr3xV1i5RRSrNPZ4U0S77lata76LSBp/kJKb9ZVRIkG8QTA8PtfyBI/3WXa9tVxtfEXb2wUoB0wvcuVtEK4+0DG2LQhV/g3CtUXvoAfDMPLh0/AMho+fx8blr+EP9E040wvRTt3O53CmXDoOlXWTEXHnF5geSEbbVdeut/cm54IVsGuzLvFYcJkmiS+E1DaOx+v/Prn04qI/t8ebIBH9ptq68j6QHjyD3AnmHYDSCFLT5MHrD7t2UHNph8nzHamsO1DmnR8hJlNP1zUJB9vZSi10HSU6EkQgm1kko6Z8WTWPfT/b1u08XCZZlIJRUw7fGC2bhqbRAdf+hx4c08P29b34gvuIt3mlJooY+RJiKvH4/h7kgj6nLh3p86XiP1bdbQ/gqA48ffQQLqNolOaDVDfW4fPXuJaYJOMi51wv+Pz77O/9Ee063NztAWJHHrrP04Uy8+xznZf/+HMq6w7b+EBmLoYRE+jThLKyUNVQ43qDMD2QSiRoXa83AkPXy6tNy2H4BECBlauXyoZLQS4oSVVrGFEV63kQx958zBQI7wCUdoLUNdVhW7XYh8m+HoxCHqMvU9jI7559jfFVyt3MjWJg5YTG0f8kCy5bqlYu3bE3onTAfR2oHwljpuuk4cFwbPCHRrsniBeVillq6yotqy9E8fz55ttW1pCKuvOoafpXrMzUojd+0xPF678ef+AprAx72yVJ4TvN5y6Uw4CFsZSjDyjJlzqfpN0WSyNINpNFJHfUehyPF7XmBehpP1TybuWguv5xOe382/c2VhgI2DmorDuNaWeezat//kXfBFHg8eswbF8EVQ54/eEiFrIDPKgVu4Zuum3lIJuBYBIZOeksmlu+RDY9ueiuKqGqGGuef59a8cwT+PNTbp3cvuy8nQPDg9QU00bJJUwTOnbAnx/QTffygoaTCaXlQTp3tEtV/R6CleNd7aLK0fIKj+9Am94wkOmLUEt/oxsw7H+KWFmws0+STf8Cf/A9WnZxGNOhsCO73dGzaa8Ewx9kweW/oKqP+X6puJacjBjLoaFs0a9PRce4NoUSkbSMm9EhH/0eVNTi/OEe2LkJRJDpZ05jyvz7SUQnFDVfRAS8gU62b/iYWvHMI/S261BxQVBYeE1hPmAxYxbcQimtfOjcoZtLHKwQOAlQ2gmSSqQJV2f0WF4Xi9Ljj6m316RJRA7sTK7HkekuH17/gepUjw8SsYx68eHb5NwbTKoa3r03SQjsHYOsnBip2HZE/HgDE1w9fzYNtc3jmHb6BHr2bD7k9KpuRO3ZpnVhB+/o+QlXMmpSXJsrR9rxBRzLJpfN4PFBzx5k8lxYeDkyYuLpOPb9xHrcPff+ML27iez5inp7zYOYHn3a9SdfH6xqQTHA5zs27WGPA0ojyLa1NsGKDmqbDxUV9oVw5Xye+EmLWvXsRioPErjZNtQ2Iaedf+hi9Ach1hNVj/7oFpl1bhvNY6+lono0YqaxczvYsamXQOhuFet+EMNzqjSPfYJMqvmI5phyoLoxIOuXVaonHji07sT0ojq36+KkgxeddtCDcsd3FuELHHmDMASydlJ1t+2iqg7WvJDXcTU1k0u/H6VO6f8CfUAE4r33qd6O32J64u8U6fnxQGkEaV0Lo6Yk8HjdVeDlcsMYPXWcOM7GQ/rRFjRIuUz+RDhIGFfdgHr9yYyys3caV374bvXkT68i2h2XcTOeVeGaiGRTcarqob11terw/I/UNX/ZlWOfyzQTqLiMUVNWHGI7mx7E5+eQEw+0TxKurkHkdHc7poBj51QmGWNTK9LbDvUjKiRccy0iFxbt2Go/ZqNK9P4OZHdxbx5kKPapfk8SlOaDbFkFp53/qHh8NwNH1l6n48gZV13C/CWP97nbeXzQsQ215nlNkv19DdvW/ad047h2Viz9gdqzDWwbOetdWuT49C9h1XPIzLPXcP3HdcO5I34IB7y+iYRrdOh1f4hA0xj6jNI5NgRCYUQMV4vbNFGZVFw2r94uPbt0q6F5S95FTeO/kcs0H/kCex+44GttxrGvwTDXDbl1KORNuXwPr5MApZ0glbVgerbg2N3AketilQOVtZPUK4+FSCeSB9r8osOEsR6dxfYGdNbb9PZRMSe62UE6oRNsBR1UKqGVvCKvoVgFzDziM9kWBMKVDBtDn5Gs/j6L11+HuNO9OAhEorkvLR5LQ9WpfOjpzitl9KR7SMZrizo9DA8Ew2+rl/50A+teXkegAnD057Ct0sZJDxRsC6lphFwW9ch92h+ZMOv4Pc8AorRE4d9+Hhx7N91tUfyBxiNHXwSs7BWIcTbRrj8foOZVSmubKmr1XI5Yj7bbkzHIZA+/eAtd2XMZjBs+paMpkCLe406Vp6Us9YyY4MH0HGiT6bmI9Nk/V5uEE0E8rhZ4Ms30KWObP7PktA/evS4bpCvxKZKx4sih+xdvYuPy21i/7HUyqf1k8caxK03uD4U8SKwHqup4Z58gy5+AdHIni971EhXjJrgS7IkgMxbPV7u3/lkPlPToUyIdR+3ciFz5YWTsqainf4Wccjoql9VapfZW9hZlhar0D1FQ+o6cpHVRgaCudbCyBqm4x7WoUQwDw2NiHEQQ20Iq6yBUwWE6FY51E71T+c99SpXR+FZ75AffWJ+DQLEJNQGPdy0d2+5SOzctxR86/idGXyh8Jo/nULP0BEZpPsiyR3VXwjkXPiK+4PVkUkcOsjsOCJfLtIVPqGR0GZlUvm1pM3Ru1ySwsvlEWhqZvlBPyd2zA2JdqEQEtXopqmMHYhgQqkBtWakJVFmnCVPdkJHRUxOuVMZiQC4TJ9qVOaSCMZvW/bgqayDXh8Of6LX2zhw5EkzYlBRu3+SlI+NgeIp1ykFF9nyLWO9jeHzv7FbrxwGlmVjn3aR3sVRsM7HuJIbhP6KZpc2WhYyf+W26di8h1t1Jb7vub3uwTEGAeFSfFONmwKUfwFAK9exvkRmLkLoRqGwKtfwJZNsGGD9T67lapp3O+FnnuyKI1wex7g62rNBBgP1hmKjNK+hzhofjIBe+z6K64YhdUATNoZVdOVZaOSTYXyOKvi5ggMhTpJIP4vFESu5FfDwwFMy+AUBpJ8jWVfqXX7/sdWke/wNqh30Kx0W817bAMCZLqOI9qmP7L7ByneQymhwHb8aFJGJPG1I/UifC/CEYNRmqm/QUWo8PFlwGE2ZCrMcvw1o+6Lr2weODaHcvm1cemAFWuqGz2tMKkY6DJDC6U7ycc/17i2mcYHhEf9PFkiOTfBrUe3DsPXq4Tz4oUWi9MxQh+QhWLqMz+4M9fHWQUZohG+nU/3Vs1M5Nj0t1w60g9a5WgKOqCNf8mzSM7FTRrl8cUdZtGLpJWyG+nknlFbZ5AoUq8r6JeROhyhtdDe/Rwr04VfV/ZOSkAzVE+QZuUjccGkf38fy24PHV5uvfBw+hyo1q1dL3s+Kve/YWkxWayOnnGNz7Hw2iXahnfgPjZ+jWroGw/mPlONGy7aWZWE0t+i9WDtYvW8qscx7CTt3q7t0KsukGmlq+jlIWXbt+Q6Sz+F3GNLXSNhkNEag4S7z+G/UP4MIvEAOiXb00t+yWa24/8N7BCtT6V2Dja30P2VROJR6vx7VuSgwdQEi76b64H6xcL42jIioV153eCyW5J4oDrJROKHfu1MTethZqh51wqt/STpD9h2Rm0jbrlv2FKfOXkE2NcB3eyySHy7CWr6hgxfUy7+IvYVsrXP34km/L2bETmXl2hdQ0fRtf4AzS1njXzx+sQG1f95B64qfrDkkSZpJIyzSYdmbf8+CVasb0+l1pm0Qgm36e3VtWMHLSpdjZia6/Hys7lYaRfwfcQzKm9ooNT6DFRWUNat0yPbh00+swYoL+bms8uJLpKKXzP46dH4VRpVMAtq1Ppqo63WjD6yutYaALlDhAp9Aa1NRh2lVLf8XE084Uw7zD/c4qkE2Nk4q6cZz/nvPpbvs/rNw3yWXX49jJQxaSoO3aZLSWcTMmi+k5n8nz/gnHriMZ9bp2CnU1XzedO3/Mupc5RBvW0w4jJumRDD3tfV1hGh5vlavPqUdjP6zWvvR1aod9VYIVn3JtGlm5KqmsvZsrb7NZ/dy3aNt64pwe+6Ogc1MKlYxBdxvqt/drZURlXf5FfXyuQp1QTxtSUQPNY1EvPqybCzaMRBZdg7P0t/DcHw68zwCjxAE6+0mAlILOncjS3/yAJR+8gnjvOPe7nOTbhebqqKy9mWzmSplzQQJ/8H6y6Q3AvtFmmXRKznrXTZieWVTUVFHX7CUZ9WsJRhEOq8cLHTt+zJsvrZIp8w99b1U90jgKwl6wDiKPCOSyVVhZd9+bY0O4ukFmn4+Kdf2AUOXViExx9f2IQDIekElzF6t0/GE6d23D6zuho0NSUEGsfk7PRwmE8z5VQZnN3oGlqr1Va+LGz9RrrDKsS5TXvqijlktuhMeiug1u0+hD5UIDhBILpvavkRAtMVjz4mqZNPdWxkz7NZlkcXRWDuSygkgNtU012Pa/HuK8OzY0jBActa/zeeH+xSAQ/pVKvPVzMomcHnG8f3g5H31JRGDXLv3f/eE4UFETweu3UM6RvzsRVLR7M7EeeOrnb6kFS94n8y/9I8nYMFfOqgikYu+SprHbVHXDXaRjkaNuYHG8YZh6t3csSEQQfwj1wkPIoqt19DCT0tl4EV0RWdOUrw1CB2Sq6jQZkrqfAaFKMH19l0YPAI7OxCrAq+sBVNfuZ6Sp5XU83ktKtgn1vD85ZBHopgulXRMKRVu2al33Eq1rX8e2Dh27lvdvnGd/A8/97tBrxHuRW/5jgkxdGDiEPH1BBHZu2kr3bn3/SMereH3L8Pmvcl0laVseaprukEtueUU9+7vfsHvL4BQ/HVOoffkljwc6d6F+fjeycAky42xUb4ee5KuUPlGO44YwMHqFgmS9okZR0/RBPPJrujvPPGzH8GMNpSBQYdG5+9PqV3f/D70dh/oehRHL3iCEa+lzh9dO4xVFmZCRzgTZNAwfD70d8MqfP8ykuRX4/O4SmgB2zkeg4grC1S/R3badhlHaVDwZRqapfIcXO1dIjA6NNZPHwBDE44VsGvX6U7Bl5Q48vhtl4eU/wR8677jH65WCQNhSycjnWP74N7Q9W3tohtzKgc+LjDv18BGRdAIJhLyuT0fdiiery4k9Oj/w1M92Ylsfk5mLv4zIZa7IZlvg9b1PTrvAVOGaD/L26hTRLp3sPNFR6E88fByuO+UfQwwMQUyPdrbfWo5Kp8Dn3y5zLryVYOWnUWo2qAXHJTwpAqFKi12bP8HG5ffg8enwYip+4OscR5fRzjxbZ9UPF6HKZcAfDOK4J4jasSFJ+9vaDK1q1KqAaOdKrNxTmJ7LXJFN8pL+6vr3MP/SDnZvvpPMDi32PNHh2Nqcqqw9nDD0uGLgTCwxtKbJH87Ps/BuJZ34qIr3XC4No76IcqYcUwfT9IBh2mxZ9VH1/EPfpmWqJkdfRFUO1DTD1IX0OyvDsUfiC9UU8UP+CX+oVX8vQcimUKko9Lahdm78X+Oaj8zG473Z1eZhGLpfVyB0nqqsbyEQau2zVdKJhoJgLZcdUqZVAYOnmRZ0n9g9235PrLuXMad8F19ggnbC1eB8E/mGCiAW2VQbichdzkPf/r40jNT9gfuaZSIC6TjGklu1n9D/tKxxKFXv2mx0nKhxwydyKAU1Tainfo567Ida2tK2tUN177pbxp82jkjHInfaLgWZ1Ew548oH1NhpN7J+2R6tkh56C8s1lKM31lLm1B8DDB5BCvXJgQql1i37i/hDN1DbdAa+4L/i8Q8nmx7YH1YpqKxzSPRuI5P8tmpv/S6+YBKhf3lDJoXMvQhapoHfC9Zh4ukGkIhp88zNYtZRtzQoe2+PqkxS+zpev84Qr3lhrfL4n5eRExeRiLr7PpQDpnkeoaobSKe+DehssucEHeVsW4MWoh0IHIOqm/yuLsYbavfW1VI7bIUyvXfKiPHnE+msP+od0DDBH1DkspvUxtceYcOr/yZzL0rv7QF8JNWrUhCqQT3/oF78h3uWdAKZujBOyykZV7oq04PavXUtsW4HjxfatuqqyVGTdZsjAfXXX0Lb2/8ht3zBi8//sXyI+8hwHKSm8Vamn/m66t79ItvWoWLdJ55Pkj/xjbkXo7auPN5P0yeObVmaP2hhmi/y8iMvKn/4HFl4+YeoqKkllzkP2/LvDfEV5vTtj4KtCtqJ1qPE1qtI16NseOtNmTr/YdYv61IbXkXOe3f/i70ApcAXRD3za21a9Zel7toFN//7ZTJ1/jC3BKF7Vxvtb2vzzrGhZpgW7EU6dASqphFQKdW25avSOOZSxJjmKnSrfb7TmDL/XjavvIzVz+5ix4YDG4OfCNBKA2g5BbauYigqfY8tQZQCfxgV6YTOlUvlzKufVy88FCRcfYlMO2M2Vm4ujn0phpFBjMKzCSgbRykcJ4fIrzE9HWrN82uluuEpapt3snsLTDxNZ1XDVe6iIZYeuSzVDVDnoi1n42ikun6s627zpgc6d8XYtmGfKnjPdj1WoZDo8wch2o36zdf2cNkHvylTz/g2yYi72K0W8E2VipqLHTF/rHM4gRPLH3FsnS0vVul8DHHsC5t1VxC9cximTffuOMr5PeHq37Pi6YB646/NTJ1fQ1PLSAzTg2EYxHt6ScWibHqjQ8V7dxg3ftoh1qsXRKNPL7RiFkahXLZ+ODSP79t5Pxg1MQhXB1wTxPBApMNS7Vu1MG9/FOrJDVOfXIkIvP7X+xk2dhjh6rtc3yOX8TNywn/LrLPbVPfOP2N6KHpswvGEQm9oQ1hfdpwr//MiNY+3kE1Nk068nZ/DvWLva2xL63EyifzcQAVeb76XbwmN15IRaGpBFlzed/f2vpBNQ6iq2j1BDEj09tDdxiG+RaFN6P6j6KycrRLRR6Vm2G1YuRGu7qEUJCK1MuPsT1Dd+KT6y89sevccOiR1qMKxkVMX50WLQy8HAsedIAdBJD9IZj/Jwd4/hj6Ojzb2b+Wgsh45/XI3Yd19cJx6AqExrgmSST7BzHNWyrAW7YMUYHpQW9forLHHz94NIFwJu956HSt7OyMmfAsrN9LVfWwLvIHTZcSkj6hc5hvEurXA70SAbeE66XqcMLQIciyQTUNVHbL4Woh06bnoriC12Fbt3rrwIyGdqpLTLw/i8ybZ3+82QbZtRq14plCjv0+I2boWtWfbg9Q0nSmB8Cfc7aoC2XSYiuovy+X/YLH6uW/R3npimFmWHs0wlDVl7yyC5KMmxgU3Q6Q778y7Ptoz+o+LhWeYqERkBz27u/vMmRSiWgd3TfGHtMmZjN1PqPIalDPRfe1INCBTF56jctmH6d2zLa8kcPvZjj0k31+gELUconhnEcT0gmPjPPNreOpn7t8X7UIWXBaWSz8Q3tuwoj94fRDpaGX3FnVYf6C7LZ90PMhBFYHHfrROnXrWTbJgyS9Ixye5I4kByehV0jh6i6qo/SLpeHRI144oR28UQzzB+c4hiIjesZWC7t3F7a7RLkgnL8Aw3PkFplc3hdi+se9KNxEdeUtGwe7DvEjHYceG15h19l0EwveSjFW4rB3xUtt0p1xyyxvquQd/ye7NQ7d2JBlDLr0O5fG5iyIeJ7xzCJIfBS31w8E7trj3JiJQP9zvOtPt9UHvnhRvrz7M1CWlAw59dU0BbWrlMrD6hZc5ddEqvP4zXdeOWDkvoapLqah+XteOjDx0stfxRn6IqS4xGNoRt3cGQXR3Ed1OtKqheLMjk4TqxirXESyPoejtWKVa10JdHxMOCvPhR07SQr2DF6/XB8kY6rnfbkL4fzLznLsRudSVKeJY4PX9rcw6T5Q//CG2rxt6tSOZFIw5BRpG6cRp+MhvOV54ZxAkl9X2bnPLoTkJN7ByUN0w3PUuHo2sZd4lq2XCzMMvTF8AiXajXnu8713UzNdux7pW4Nh/wTAvdVeola8dqWl4H2de1c3D2++kY+fQ0mllUjrEXtus5xsOYZzcBNFND2DKfK3YzaZLNTUqQSa6PkGyqQoZOaGScae2Hbb4KuyBtatQOzZpTVafdSoKVi5F7dr8M+Pq2+fh9d3oSkZjGJBKIsHwBaqypgWfv3VIRbRMj+6WaQ3NGpD9cXITxLYgUAETZ0N9FSRKOMt1IweTeK/7LVgkRzKW67fGIZvPHlfWaoXA4RZwKgOZVLtqb/2cjJtRhxW/2N2iUpBOnioLr/yRapl+E+te6cCxjn9PX9Ojuy0OUqO3gcbJSxARCFZpH8A0US88WdpuZeegojYlo6ZEXJ0gHi9Eurarzp2th0zP3R9K6YTlgktRf/l5H00k8vD69Z81z29U8IRMnncx0U53C105YHouIFxzI9n0t1DO8a8d8XhPqIbWJydBBL1DrXwadmxEff/TpQvi4j3IjMXj+MdvnE6s+8ivN72QjHSx7U1F4AgnVk9IzzcxPfmH7mPRGLoVkXrxYaS99RsMHz8Mf+iTriUyto1U19+iTlnwCt1ty9ixEeI9x3cATzIKw1qO3/2LwMlHEIXeXR0Htfp5pLq+70iSWyRj0Di6BdtqcPV6jxcSkTit6/Q8xf5gGIUAQP9mlgA1DahYt8P6V/5TZiy+DMOY7q7NqwJkrkxdcJ/asvpK3nxxh9q+9vjVjtg5MH3IUIqq9YOTjyBCoUkbMn4Wh0yPKhaZFDSODru2mT0+VLw3q7asOLJoUCm9k5teF1EmKbTq7CQd/xa+4L3guDsWHQdy2WkSqrrQEfkxhuc41Y7kW80W2o2eADjJCCJaLbttvSbJqMlHvwisLFQ31rlWnTp2Al/g99Q2HyZJeBAK8xBr86fc4Wxzle9B3LEd1bn9RzL7wkZqm9zXjlhZHyMnfE1mLN6t9mx7/LjUjihbh9t9gSHZ4qcvnFwEcWz95TeO0sVQbjvN93tNB3yBia5PkFiPJdPOzMj0Re5e7w+h3n4T3nxB/+8jhWMdG7IZS6Xjj0pg3O3Ee12UQ6IJlow1yIyz/5mq+r+op39p09N+bDPZ6QQyYzFyyhmoTcuP3X2PAicPQcRExXqQQAUyfjJ0dA3Ulb0oNcbduAMB20oTjUZc78yqE2luQbWugdZ1HNGxB03aLatfJ536e8adeh9W1l2BlZ0Db2C+jJ7yYZVNf4tol66RPxYoSPqj3flTcmjnPwo48QlSKJ81DN0ZMVQJFgPTDl8EbNsiGXXRqZp8ziQXU5GO9qISc1Z2X7364fRZB94I2ragtq7+I8PGnCWB0KfcnZb52pFwzVdkya02q5+7lz3b82t1kBesY+vZkov/RndvP0Fw4hPENCGbwfnVVyAQQgIVOE/9fGBqIbT/McK45O+ucz0wx85liHTE+s2BHIxEL4ycoLP+2bS7Zw9VQTAM6cRPCFf/DU52guuRCslISKYvukA5zh+J/Wn73irOwYSV1ZWcMxfC0kcG914DiBObIAod/cll4O01gKAGMjqSTUFTSwgxGvTNjnBt04RMKk7rujj+YP+v3R9K6TmGe/MhLmB6NJn+fP9adcoZN8qCJb8iHZ/gunYk0XuFNIzcqEKVXyKdiA/6mAHH0cRPZIa8vGR/nLgEUUo3PU7FIdKJjJ468MmvXBZqm7x60blYeKYHMqks29cdOnvdDUSKy08opRtQ7Nz4GrnzPk+w4rskIhWuTgPb9lHT9Am55O9Wqxce+gW7BrF2JB/OlsXvGvIFUgfjxCWIx6sLmbp26RZCR5MMPBy0zCTo+gc1vah0fJPauPzw0pHDobCIRk3RJ5Hbezq2Hqvw6uMvyWnnr8YXPMN1AZJteQhVX0i4+ll62ndQ21zcvYtBOgEMrdkfbnACEkTyNrroFpwzFuuFPBg/qnIgnVrgWgGcSaakbvjDvOsjxe/G+elW6rXH8yrXIoaSRjph9XObEW6XhZd/BTEucvXMunbk/TLzHDC9t6nu3RlS8YE/ie0cMmWBPlVPkPxHAUODIIW2Pk5+kRsG+0yavEZJOeDkIBVHxSPg2KgdGyGXxnWyrBgUdvS5F4/BEHc5lWzKS11ztVzxQSg2BWMCyRRq1VKdwCtmkRqmDtfGul9HqccwzYuwXEa1UgmoaXo/i66J8OLDH6VrN0X5T26QTsKMs3RkcYi3+TkYx4cghaywL6h/XDtvJlTVoZRCOrbDiIl6UToWBCrBF4K5lyJWVjvPpkePBO7aNTid+ZQDYoSZfua1hKtxteLFUNi2Q08JORjD1JWLXv+hA37cwOdHrX8F1bX7l8YV/zgfX+AmV22DDKNw3wsIhCahnE0DK0VXhUlb2hQ+niLJEnBsnlYpHd93LAhV6x2quw32bINEBLXhFaht0nFyFGT2G41QmH9oenQPK8PQUavG0bDkVu1ID4ZkQikIVc7GHxrlaqGZJqTiW9Xq558r+VlMD9IyDbX6ueLfa5gQj0C0u02tfOYTsmBJA8hFroILSoGVnSHTz7xX1Q2/iQ2vdurvdAA2nlQCmXW2Vjdk0kO3icRhMAgEUdoqKszBDldDRTVq+3pIJ1Bdu5F0EtW1E+fH/1aYPnuggO2QEyE/9Wl/s8E0dTfCN1+CWLe+10D5IYahI2NnX3cF/mDIlbTc44NM6ifq0R9uO6pBlB6vPllL2cUdRz97MrZL5TJ/llDVRaRi7ha67ph/IeGa95BJ/g9O/nc5mqiTYWppfX7E3VCeA3I4DDxBClLzFx7SX0pPO8R7UC/9aV8kIxDat6ALu3+xC0opLV2oH6Ez0JGOgWuUlsvAqMkTCFff7Hqh6sE4Sc69oXRyGIb+TO1v50uDS/hORPR7Ny6/h9FTR1Db9HH3tSMWUt3wXjV5/ot0t73G7i1HVzuSSULzOF374fYZhhgGgSACtoV6/P78gBQ9Qx1/UA+BL+xGA7HbWzndiOHN57V8YSCEd2JA105kwZJp1A6ro7fjyAteBHIZS73x1F8lVFU6UcUATxLqhuswcaliy3QS1r5oq2z6bpl30cUYxgz311ILZNrp96mta65hw7IdqvXN0mtHuncjE2fBqBZobzv+5b4lYHB8EBHdkeNgDHQoVkTbtdPO0ENwot1H77AnozB1gV+Gjf0AiWjQ3WkgIMYf2blpvd5xS+0gkjclqxr0oizVWRbRIxccu4t06l58/ntxHHfHka4dmSHBigscxU8wvHp2fCmHoi8I2SzkOCHJAUMlzHtUULqWwhvUP27JvkjeNInsQZrHnUb98LPp2ePyrYLq3vUEsy/MHnWwwBeAjh2w7uWjOxH1aATU1lX3yXk31dA05m7XZo6V8zFiwldk1jkdqmP7oxhGfthNkTNYgpX50O4QalpXJE58guRnHMplt0L7Noh2lmbiqPxYtwVLkNFTP0QiUufyjVry8tYbK+nafeCog1JgmNpXy5uqRwXb0oGRRPRx8YfuJJcZ5mrzUA4kos0y75KvSePoN5w/fW83kQ73hFUO5LLI6Vcii6/DVT/jIYoTnyCgd6uKWmjbilr6Gx05Kxa5DIRrkHd9ZCHN464n6XLqLAK29Uuax79CRe3RN2jz+nVup3v30ecMCj2Ad6x/A9Pz/2iZ+l3SqUbX03Rz2ZHUD78ax7qPSGcRch6lTVXjxJOWHIyTgyAF5LL6h/UHizzWRTv8/gBSP+K9ZFPumkUDBMJRteKvv6Jzp02oCtRRztvzePNjEQbIZvd4Ye1LqM0rfs/lH/JL3fCvYFujXb03l6mmsv7rctEtsPrZ++jcmf+Hfr4bpVBWBhk744SqPT8cTh6CpBMwdjoy42zU+mWHzgXsD44FgTCy+PprqW78sPvTQ4E/tJaO7c+x8hl9ih0t8qORByyvU/AFDBN62h6meez7SLkkiAjEe8My8+xLlMifePlPO3RxWj8mrG3rDi1T5uuWRic4Th6CWDmdjR85Gd5akTdPXJZ2KgXVDV6ZumAJ6bjp+vQIVfWw4dVvEuvpYeLcgdv1DVMXTyUiA5PbKVxj2WMJlYh9ReZdMplUbLy79xoQ67lU6kfcpgLhL5FJJg8/d0TlJ0Yp3S7pxLaugJOJICLQ3YacshCZdjrqr7/UfkVFHfh8etzAAcd9XgSZTmpt1+zzL0bk/XsFk27uZ1m9xLpew+PVJ9ZAhbE9Xu1gJ6IDOyUqEYHWtUuZefbnCFXeSyJS6S7LbgeobviUXPmPG9XKpT9h9bN950YyKZh3CWx6XSusTwKcPASBvFzCqwlherRey7Ggu51DKuYKWee64TBiwjBpHn8TSrlcjUqLJ7t3P69i3ZsZNZUBtbX9IS3ui/UUMUPRBRwH4r2oN556SWaeuxZfcKH72hHbQ6jyYnyBN4h0rqKyVpNX8v5bLt+I2uvXOY8Bz3mhT6XeDh0sMI7N8XRyEaQgs7B1zF5mLkZtWQWrn0PFug6MMNk5PaNjzDRk4ZKvkkm9V483cDeDkHR8N927v6SH0wxwjYOh1a+qa4fWQw0URCDaAWue3Yxj3y5nXv1NrNwiV7Uj+nt9j7RMj6i5F98JZMkk9HddWacTw5uW55XIA6iJy6YhnWzAoYFpZ1xM4+gx1A1/i0z698R7OvD6B3XO+slFkIORSekf0OPTI5fNfKEV6EVuZRF/YC5KLdE5B5e7kuGBdPJB1bljA8GKgd8tDQNMI991cYB/IsOEmmEQ7XpNRTrukUD4TGyXHzydhPrht8miazKqp/2j9LTpBTx2OjKpBZWM6vFxAwLRJ8aYaXVMmPU1oj03ycxzDHwBL7ZlEe36glz4t99hT+s99Hb0DpbDc3ITZC8Kknkve3e3VBSZdd4ITjv/HrLpJteLXDeT/pla8/znSUYhOVALYj8kYnpxDNZMD58ftfE12LP9cXnXHb/BG3h3UbUjSp0NcgGJyDM4tk0iCr1Kk2WgCG3lwB+eK7PPvxN/6GaSMf3/JaOA8iDSKJPnfp7hE4apFx/+N1KxAWuEtj/eEQRRkS7kjCuRWeeg2ls1R7y+YTJ6yu+wrTP22s9uYJgOvR2v0rGj46hk7f0hlwHL0s6620hcMSjI0KPdUbVy6cdl/qW1IBe7rh0xjDlS1/RZ1dvWTU/7GwOe63BsCAROl7rhH8EwbyJ98DTg/PcR7wWv/zaZff4W9dLDXx/Yh9B4RxBEf+Eh3StXNy0zqK7/EKbnDLJp94tciyP/Vz372+8N+tw/j1cP/4l2UVSPLbco1I7Ee3eqXOZxCVVdXFTtiMh5Mnb6l5QYn8Wy1qAliUeJvLzG658tdcPvwDRvOqLp61jgD86honYY0H70z3Ag3hkE0R0S89GWdC3VTUskWHVtUXPEHQfCVY7q2fMImXRGBwIGsb7atrTzW+lSElYs9taOKHhrxf8wevJoqhrvJJfCde5IZImMmeZVycg3UM7zQLSkZ5F8lWgiggqGb5e64ddjmgtdqSEcGwzzOmae8zDw65Lu3w/eGQSBwlCdsFTWX0F1wz9jW9OKen8wnFbbN9zBtvV/oKImX/5r6oWcTevMt+kZOIfdsZGKmsHvhJ5NwprnLJVKfFHmXXQBhum+dkST5GypqJ0BPEM29V68frs4abtoFcSwsdByyhfFMD+L11+cVMgwvFI7bEwRN3WNdwBBlD45rNwYquofwPTMx7HdNMDd937TB0q9TOubD7Bjk577YVTq6r/aYcjU+bpdT+fOAay5FujepeUrxS6YYu8TrgFldZFNfQ9v4Ns4RUwCVsqHsoeRiL5bZp+fUfHI19i2dj3KsbD7qIqUfIeYglLZztXh9V0rs879JJW1LcQjxYVtteo5qTa99jKc4/59LnFyE8RxINGLnHHlaDn9yj+QTswFitvlDQ8Y0kPXri+TSe3bHfdsh3CV7ssVrNA/eLR7gBN7dr6jS5Di+wgVAa9fd5V54aHvyazz6qgd9gXXI68LsDJQN/xmqW68QS7/x2+rHeufxMq9gnJ6D3id44DXbxAIz0fZ82TU1DswzSl6dF20+JyGYUIq/mNeffyFMkHcQvL9nrIpk/Gz5sjIyd8ANbeoaBVo2zhU2aFef/KD6nffeJL6EVrxW1GtnUPJ19enYvk+wZ6BDc0aZr6+RfRA0sGUjisFmaSl0ok/SrDiduI97kPfoL+rbNpAJEBN4yckVPkJlNpEMvYHYN+JnYzGmDRntkycfQm2DV5v/kTJUXwNvgOhSkdFOh7DdtUIrGicfAQR0T7BqElNVDd+WarqTyWXXbi3P1Mx8Pi2s3PTv7D+tUdoHIUMn6CrFx1r3ylkF1lpVyyUgkiXlnJkkgfmcgYajg0bX12hsqnbZerCHxDtrC66VFYp7XCLAYZMQjmfPuQ1hVNCqdJNR8eG2mbU1lWfYP0rfyJzlGUGh8HQIog+LvVRa1uV2LaJcqseBKxcTlk5xB/8Zznz6htxnPFk0+7VuQc8i4GK7Pkmb774cyprkcaR2ufIJAcn7Ho4SF5UGelEde3SUnLTx+CQRGD9K/Dc73/LDZ/MyZyLfkL37qrSTkXV/zi5o4Fjaw3d1jUfUT/+928R74WaPnogDACGEEEEIh0i85dMl5GT/pXK2rkolSrq21TKxuMN4Q+Nw8r69oYyS3ocgVhPJ7FeEMUhNnk2nd8pS7t8UVAKfAFk+HhU9y4t+RisDoX+AKSTqF9/9SGBm5h9wa/p7XBfQDboEB242Pjq7c7PvvAdLAsaRw5aEGPoECSb8tE87hyZPO8LmN7T99ZlFwXRwsFS7NmDYTtIw4gvseiqTwEH2hkiAXKZ7XgDv1Lx3rT4Qw9jZbtdN7kuBY6tp2jVDUd1t2md2aC0XFV7i7WcX//noyLmjTLjrF+SiFYO6udzAzFslPMw/sBf1bYN36G3A4aPH9SmEKURZCA75Fk5HSmqqJslDaP+g1z2dG1PHs0CH4jdToHXP4pAeFSf/2wY41CcLekE+EOPEa5+P1aufVAnxzo2iIFUNWilr06SDfx9lKMjc7Fu6G3/PxKR80lGr6O68Q6y6WM/YF05WlWQ6P2BinV/T6obVhAI6bKAQe6YUhpB6ocP3BPkMlDXXC0tp/wndu6MITXg0XE4Yk7A9ICVXSKLr/2JEvkou7esG/QGzWJAZb1u7DBYgkbl6BnzOgfzmtq8arOMmNBJ46i7Ucqju7Qfg99JDP0Me1r/S23f8BUaR3ceyx5bJf2SxlX/b+CeQI8ZuA7bOnfgLnoMUXCRTO8lcsaVV6gnf7Zu8O11QcI1KKUg1jX4TdkMA3LpHrV+2delurEL0/g4/tBY0onwoN1bj6XLodQu4EfqtSfvwhAYOWlw7ncYlLbVjZgwgI8goOwZpAcnTHfM4Nhg5a5i1OSHENk06Pfz+pGG4agnf6rbHA32WLPCeDhRD6h1r/xUmsd+meHjP5WXvw/kjfR/QpUraG99XW1afqcsuDRGqFLPgjnGXVJKIojatXngnkCfIOukumHgrnk84Njg9S+UUxfNBwafIIahcyIK1F9+OrCVh/3BF4SuXTbB8KeVyFIJVd6CP3QDGHkZSQkCTsMACu+VF1HOcrVh2Q/Ftt+kda3N2ddxvNoHlXaClDK/4nDQcwD/xJlX/ZFc9sqBu/AxhmFCNr1HvfXy8mMU+82PNMsd26E0heGp3gAko4+i1BOqc+cvZfiEyWTTS/AHzyUQclCOgW1rCc7+J0zBZzLNfA+wtCKbAsNcjem5Xz3960dl4mmbSETzo64rOJ7Rs9K+WbeF/m5gW5CK7yTavYLK2itd14UPNRgmJHrv5Y2nN2gf5Bh9Bo8XqR+JinQc++lNOqtv4fU9xKblqB0bfyUX33Iuu7dWI8bN+IO1+IO1mJ4gSimUssmm4jhOjmwmSjKiqBv+c7Vj4zPEetbJvEvixHv1+vIFh0RXxtK+0YHWGyVjqBV//S85+/qReAMfKKqI6bhDFRbKbhXpfEJLLI5hJ/NCpv24QXRLJaVAqW14vD9Vf/wuVDV8iylzw7RMnypV9Y3YloVt51RP+w7SiSQ7NrWpZX9ScuM/azI4+YpZjycfdBgawz6HRqJQi/xiqnXt52T4uChV9XeSiOKqTvp4wuODcFW76m57XeBuTM9rx/uRjh/y5ccKnWj0B8H0JhBZfsA8VsPUeS+vL9/xsYTO8ccQQ4MgKPD4HQzZof58/ycYMfElJp52uoRrRrG3w9sQghgmqJza9dYG3njqMYa1vMy8S4bsj1xG6RgiBAFwIFiFattqSyb1G0ZP+Q3hGt9Q5Ee+VFUR68mpNS+AP4Qc7diDMoYkRA12/LyMMk5gnJhzscoo4xihTJAyyugHZYKUUUY/KBOkjDL6QZkgZZTRD8oEKaOMflAmSBll9IMyQcooox+UCVJGGf2gTJAyyugHZYKUUUY/KBOkjDL6QZkgZZTRD8oEKaOMflAmSBll9IMyQcooox+UCVJGGf2gTJAyyugHZYKUUUY/KBOkjDL6QZkgZZTRD8oEKaOMflAmSBll9IMyQcooox+UCVJGGf2gTJAyyugH/x+FH3ljG+bLeAAAAABJRU5ErkJggg==' diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/utils.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/utils.js new file mode 100644 index 0000000..89ff8df --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/core/utils.js @@ -0,0 +1,786 @@ +/* eslint no-useless-escape:0 */ +import md5 from 'js-md5' +import JSON5 from './json5' +import isObject from 'lodash/isObject' +import isNumber from 'lodash/isNumber' + +const reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/g; +const binaryContentType = { + "application/octet-stream": true, + "application/x-001": true, + "text/h323": true, + "drawing/907": true, + "audio/x-mei-aac": true, + "audio/aiff": true, + "text/asa": true, + "text/asp": true, + "audio/basic": true, + "application/vnd.adobe.workflow": true, + "application/x-bmp": true, + "application/x-c4t": true, + "application/x-cals": true, + "application/x-netcdf": true, + "application/x-cel": true, + "application/x-g4": true, + "application/x-cit": true, + "text/xml": true, + "application/x-cmx": true, + "application/pkix-crl": true, + "application/x-csi": true, + "application/x-cut": true, + "application/x-dbm": true, + "application/x-x509-ca-cert": true, + "application/x-dib": true, + "application/msword": true, + "application/x-drw": true, + "Model/vnd.dwf": true, + "application/x-dwg": true, + "application/x-dxf": true, + "application/x-emf": true, + "application/x-ps": true, + "application/x-ebx": true, + "image/fax": true, + "application/fractals": true, + "application/x-frm": true, + "application/x-gbr": true, + "image/gif": true, + "application/x-gp4": true, + "application/x-hmr": true, + "application/x-hpl": true, + "application/x-hrf": true, + "text/x-component": true, + "text/html": true, + "image/x-icon": true, + "application/x-iff": true, + "application/x-igs": true, + "application/x-img": true, + "application/x-internet-signup": true, + "java/*": true, + "image/jpeg": true, + "application/x-jpg": true, + "application/x-laplayer-reg": true, + "audio/x-liquid-secure": true, + "audio/x-la-lms": true, + "application/x-ltr": true, + "video/x-mpeg": true, + "video/mpeg4": true, + "application/x-troff-man": true, + "application/msaccess": true, + "application/x-shockwave-flash": true, + "message/rfc822": true, + "audio/mid": true, + "application/x-mil": true, + "audio/x-musicnet-download": true, + "application/x-javascript": true, + "audio/mp1": true, + "video/mpeg": true, + "application/vnd.ms-project": true, + "video/mpg": true, + "audio/rn-mpeg": true, + "image/pnetvue": true, + "application/x-out": true, + "application/x-pkcs12": true, + "application/pkcs7-mime": true, + "application/x-pkcs7-certreqresp": true, + "application/x-pc5": true, + "application/x-pcl": true, + "application/pdf": true, + "application/vnd.adobe.pdx": true, + "application/x-pgl": true, + "application/vnd.ms-pki.pko": true, + "application/x-plt": true, + "application/x-png": true, + "application/vnd.ms-powerpoint": true, + "application/x-ppt": true, + "application/pics-rules": true, + "application/x-prt": true, + "application/postscript": true, + "audio/vnd.rn-realaudio": true, + "application/x-ras": true, + "application/x-red": true, + "application/vnd.rn-realsystem-rjs": true, + "application/x-rlc": true, + "application/vnd.rn-realmedia": true, + "audio/x-pn-realaudio": true, + "application/vnd.rn-realmedia-secure": true, + "application/vnd.rn-realsystem-rmx": true, + "image/vnd.rn-realpix": true, + "application/vnd.rn-rsml": true, + "video/vnd.rn-realvideo": true, + "application/x-sat": true, + "application/x-sdw": true, + "application/x-slb": true, + "drawing/x-slk": true, + "application/smil": true, + "text/plain": true, + "application/futuresplash": true, + "application/streamingmedia": true, + "application/vnd.ms-pki.stl": true, + "application/x-sty": true, + "application/x-tg4": true, + "image/tiff": true, + "image/png": true, + "drawing/x-top": true, + "application/x-icq": true, + "text/x-vcard": true, + "application/vnd.visio": true, + "application/x-vpeg005": true, + "application/x-vsd": true, + "audio/wav": true, + "application/x-wb1": true, + "application/x-wb3": true, + "application/x-wk4": true, + "application/x-wks": true, + "audio/x-ms-wma": true, + "application/x-wmf": true, + "video/x-ms-wmv": true, + "application/x-ms-wmz": true, + "application/x-wpd": true, + "application/vnd.ms-wpl": true, + "application/x-wr1": true, + "application/x-wrk": true, + "application/x-ws": true, + "application/vnd.adobe.xdp": true, + "application/vnd.adobe.xfd": true, + "application/x-xls": true, + "application/x-xwd": true, + "application/vnd.symbian.install": true, + "application/x-x_t": true, + "application/vnd.android.package-archive": true +} + +function isUrl(path) { + return reg.test(path); +} + +const utils = { + getOAuth2Html(production){ + if(production){ + return "webjars/oauth/oauth2.html"; + } + return "oauth/oauth2.html"; + }, + groupName(url,defaultName){ + var gname=defaultName; + var reg=new RegExp(".*?group=(.*?)(&.*?)?$"); + if(reg.test(url)){ + var tmpGroupName=RegExp.$1; + if(this.strNotBlank(tmpGroupName)){ + if(tmpGroupName!=defaultName){ + gname=tmpGroupName; + } + } + } + return gname; + }, + oasmodel(oas2){ + //获取oas的definitions解析正则 + if(oas2){ + return "#/definitions/(.*)$"; + }else{ + return "#/components/schemas/(.*)$"; + } + }, + filterIgnoreParameters(inType, name, ignoreParameters) { + //是否过滤参数 + if (ignoreParameters == null) { + return true; + } + var tmpKeys = Object.keys(ignoreParameters || {}); + var ignoreParameterAllKeys = []; + var reg = new RegExp("\\[0\\]", "gm"); + if (tmpKeys != null && tmpKeys.length > 0) { + tmpKeys.forEach(tk => { + ignoreParameterAllKeys.push(tk); + if (tk.indexOf("[0]") > -1) { + ignoreParameterAllKeys.push(tk.replace(reg, "")); + } + }); + } + if (name.indexOf("[0]") > -1) { + //存在数组的情况 + if (ignoreParameterAllKeys.length > 0) { + var containtsKey = ignoreParameterAllKeys.filter(ignoreName => name.startsWith(ignoreName)); + if (containtsKey.length > 0) { + return false; + } else { + return true; + } + } else { + return true; + } + } else { + if (inType == 'query') { + //console.log("ignoreParameterAllKeys") + //console.log(ignoreParameterAllKeys) + return !ignoreParameterAllKeys.some(key => + new RegExp(`^(${key}$|${key}[.[])`).test(name) || eval('/'+key+'/g').test(name)); + } else { + return !ignoreParameterAllKeys.includes(name); + } + } + }, + appendBasePath(paths,basePath){ + var appendBasePathFlag=false; + try{ + if(this.checkUndefined(basePath)&&this.strNotBlank(basePath)&&basePath!='/'){ + var pathKeys=Object.keys(paths||{}); + var pathKeyLength=pathKeys.length; + var num=0; + //https://gitee.com/xiaoym/knife4j/issues/I3B5BK + let basePathStr=basePath+"/"; + for(var i=0;i 0) { + tmpKeys.forEach(tk => { + includeParameterAllKeys.push(tk); + if (tk.indexOf("[0]") > -1) { + includeParameterAllKeys.push(tk.replace(reg, "")); + } + }); + } + if (name.indexOf("[0]") > -1) { + //存在数组的情况 + if (includeParameterAllKeys.length > 0) { + var containtsKey = includeParameterAllKeys.filter(includeName => name.startsWith(includeName)); + if (containtsKey.length > 0) { + return true; + } else { + return false; + } + } else { + return true; + } + } else { + if (inType == 'query') { + /* return includeParameterAllKeys.some(key => + new RegExp(`^(${key}$|${key}[.[])`).test(name)); */ + return includeParameterAllKeys.includes(name); + } else if (inType == 'body') { + return true; + } else { + return includeParameterAllKeys.includes(name); + } + } + }, + rootKeysPath(rootName, jsonInstance, includeKeys) { + //返回一个json对象的key属性集合 + var keyArrs = []; + if (jsonInstance != null && jsonInstance != undefined) { + for (var key in jsonInstance) { + var tmpRootName = rootName + "." + key; + var parentKeyFlag = includeKeys.some(key => key.startsWith(tmpRootName)); + if (!parentKeyFlag) { + keyArrs.push(tmpRootName); + //是否对象 + var tmpJson = jsonInstance[key]; + //判断是否是数组 + if (Array.isArray(tmpJson)) { + //是 + var tmpArrName = rootName + "." + key + "[0]"; + keyArrs = keyArrs.concat(this.rootKeysPath(tmpArrName, tmpJson[0], includeKeys)); + //keyArrs = keyArrs.concat(this.rootKeysPath(tmpRootName, tmpJson[0])); + } else { + if (isObject(tmpJson)) { + keyArrs = keyArrs.concat(this.rootKeysPath(tmpRootName, tmpJson, includeKeys)); + } + } + } + } + } + return keyArrs; + }, + binaryContentType(produces, contentType) { + var binary = false; + var binaryType = ""; + if (produces != null && produces != undefined) { + produces.forEach(function (p) { + if (binaryContentType[p]) { + binaryType = p; + binary = true; + } + }) + } + if (contentType != null) { + if (!binary && binaryContentType[contentType]) { + binary = true; + binaryType = contentType; + } + } + var bobj = { + binary: binary, + binaryType: binaryType + }; + return bobj; + }, + copyOneObject(source) { + var target = {}; + for (var k in source) { + target[k] = source[k]; + } + return target; + }, + randomMd5() { + //生成一个随机MD5码 + return md5(new Date().getTime().toString() + + Math.floor(Math.random() * 100000).toString()); + }, + randomMd5Str(str) { + //生成一个随机MD5码 + return md5(new Date().getTime().toString() + + Math.floor(Math.random() * 10000).toString() + str); + }, + formatter: function (data, parentPath = "/", parentAuthority) { + return data.map(item => { + let { + path + } = item; + if (!isUrl(path)) { + path = parentPath + item.path; + } + const result = { + ...item, + path, + authority: item.authority || parentAuthority + }; + if (item.children) { + result.children = this.formatter( + item.children, + `${parentPath}${item.path}/`, + item.authority + ); + } + return result; + }); + }, + md5Id: function (obj) { + var md5Id = ""; + try { + if (obj != null && obj != undefined) { + var str = JSON.stringify(obj); + if (str != "") { + var strArr = str.split(""); + strArr.sort(); + var newStr = strArr.join(""); + md5Id = md5(newStr); + } + + } + } catch (err) {} + return md5Id; + + }, + checkParamArrsExists: function (arr, param) { + return (arr || []).some(row => row.name == param.name) + // var flag = false; + // if (arr != null && arr.length > 0) { + // arr.forEach(function (a) { + // if (a.name == param.name) { + // flag = true; + // } + // }) + // } + // return flag; + }, + isChinese: function (keyword) { + //判断是否包含中文 + var reg = new RegExp("[\\u4E00-\\u9FFF]+", "g"); + return reg.test(keyword); + }, + json5stringifyNoFormat:function(rtext){ + var ret = null; + try { + ret = JSON5.stringify(rtext); + } catch (err) { + //console(err) + ret = JSON.stringify(rtext); + } + return ret; + }, + json5stringify: function (rtext) { + var ret = null; + try { + ret = JSON5.stringify(rtext, null, 2); + } catch (err) { + //console(err) + ret = JSON.stringify(rtext, null, 2); + } + return ret; + }, + json5stringifyFormat:function(rtext,format,num){ + var ret = null; + try { + ret = JSON5.stringify(rtext, format, num); + } catch (err) { + //console(err) + ret = JSON.stringify(rtext, format, num); + } + return ret; + + }, + json5parse: function (rtext) { + var ret = null; + try { + ret = JSON5.parse(rtext) + } catch (err) { + //console(err) + ret = JSON.parse(rtext); + } + return ret; + }, + filterJsonObject: function (prefix, originalJson, filterObject) { + var _tmpValue = null; + try { + _tmpValue = utils.filterObject(prefix, originalJson, filterObject); + } catch (err) { + _tmpValue = originalJson; + } + return _tmpValue; + }, + filterObject: function (preName, originalJsonObject, filterObject) { + var newObj = {}; + if (filterObject != undefined && filterObject != null) { + for (var x in originalJsonObject) { + var _tmp = originalJsonObject[x]; + var filterName = preName + "." + x; + if (!filterObject.hasOwnProperty(filterName)) { + newObj[x] = _tmp; + } + var _type = utils.genericType(_tmp); + if (_type == "object") { + newObj[x] = utils.filterObject(filterName, _tmp, filterObject); + } else if (_type == "array") { + var _t1 = _tmp[0]; + var _na = new Array(); + _na.push(utils.filterObject(filterName, _t1, filterObject)); + newObj[x] = _na; + } + + } + } else { + newObj = originalJsonObject; + } + + return newObj; + }, + genericType: function (value) { + var _tmp = Object.prototype.toString.call(value); + var _tmpType = ""; + if (_tmp != null && _tmp != undefined) { + if (_tmp.indexOf("Array") != -1) { + _tmpType = "array"; + } else if (_tmp.indexOf("Object") != -1) { + _tmpType = "object"; + } + } + return _tmpType; + }, + getJsonKeyLength: function (json) { + var size = 0; + if (json != null) { + for (key in json) { + if (json.hasOwnProperty(key)) size++; + } + } + return size; + }, + regexMatchStr: function (regex, str) { + var flag = false; + if (regex != null && regex != undefined && str != null && str != undefined) { + var matchResult = str.match(regex); + if (matchResult != null) { + flag = true; + } + } + return flag; + }, + searchMatch(regex, str) { + var flag = false; + if (regex != null && regex != undefined && str != null && str != undefined) { + /* var matchResult = str.match(regex); + if (matchResult != null) { + flag = true; + } */ + flag = new RegExp(regex, "ig").test(str); + } + return flag; + }, + validateJSR303:function(parameter, origin){ + var max = origin["maximum"], + min = origin["minimum"], + emin = origin["exclusiveMinimum"], + emax = origin["exclusiveMaximum"]; + var pattern = origin["pattern"]; + var maxLength = origin["maxLength"], + minLength = origin["minLength"]; + if (max || min || emin || emax) { + parameter.validateStatus = true; + parameter.validateInstance = { + minimum: min, + maximum: max, + exclusiveMaximum: emax, + exclusiveMinimum: emin + }; + } else if (pattern) { + parameter.validateStatus = true; + parameter.validateInstance = { + "pattern": origin["pattern"] + }; + } else if (maxLength || minLength) { + parameter.validateStatus = true; + parameter.validateInstance = { + maxLength: maxLength, + minLength: minLength + }; + } + }, + checkUndefined: function (obj) { + var flag = false; + if (obj != undefined && obj != null && typeof (obj) != "undefined") { + flag = true; + } + return flag; + }, + arrNotEmpty(arr) { + //集合非空 + var flag = false; + if (arr != undefined && arr != null && arr.length > 0) { + flag = true; + } + return flag; + }, + arrEmpty(arr){ + return !this.arrNotEmpty(arr); + }, + strBlank(str){ + return !this.strNotBlank(str); + }, + strNotBlank(str) { + var flag = false; + if ( + str != undefined && + str != null && + str != "" + ) { + flag = true; + } + return flag; + }, + propValue: function (key, obj, defaultValue) { + var t = defaultValue; + if (obj.hasOwnProperty(key)) { + t = obj[key]; + } + return t; + }, + getExample(key, obj, defaultValue){ + var v=this.propValue(key, obj, defaultValue); + //判断是否是双精度64位,如果是,直接返回 + if(isNumber(v)){ + return v; + }else{ + if(typeof(v)=='object'){ + //v=this.json5stringify(v); + v=this.json5stringifyNoFormat(v); + } + } + return v; + }, + checkIsBasicType: function (type) { + var basicTypes = ["string", "integer", "number", "object", "boolean", "int32", "int64", "float", "double"]; + var flag = false; + if (type != null) { + if (basicTypes.indexOf(type) > -1) { + flag = true; + } + } + return flag; + }, + getBasicTypeValue: function (type) { + var propValue = ""; + //是否是基本类型 + if (type == "integer") { + propValue = 0; + } + if (type == "boolean") { + propValue = true; + } + if (type == "object") { + propValue = {}; + } + if (type == "number") { + propValue = parseFloat(0); + } + return propValue; + }, + getValue: function (obj, key, defaultValue, checkEmpty) { + var val = defaultValue; + if (obj != null && obj != undefined) { + if (obj.hasOwnProperty(key)) { + val = obj[key]; + if (checkEmpty) { + if (val == null || val == "") { + val = defaultValue; + } + } + } + } + return val; + }, + getClassName: function (item,oas2) { + if(oas2){ + var regex = new RegExp("#/definitions/(.*)$", "ig"); + if (regex.test(item)) { + var ptype = RegExp.$1; + return ptype; + } + }else{ + var regex = new RegExp("#/components/schemas/(.*)$", "ig"); + if (regex.test(item)) { + var ptype = RegExp.$1; + return ptype; + } + } + + return null; + }, + getRefParameterName:function(item){ + var regex = new RegExp("#/components/parameters/(.*)$", "ig"); + if (regex.test(item)) { + var ptype = RegExp.$1; + return ptype; + } + return null; + }, + trim(text) { + var whitespace = "[\\x20\\t\\r\\n\\f]"; + var rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"); + return text == null ? "" : (text + "").replace(rtrim, ""); + }, + getStringValue: function (obj) { + var str = ""; + if (obj != undefined && typeof (obj) != 'undefined' && obj != null) { + str = obj.toString(); + } + return str; + }, + toString(obj, defutStr) { + var str = defutStr; + if (obj != undefined && typeof (obj) != 'undefined' && obj != null) { + str = obj.toString(); + } + return str; + }, + randomNumber: function () { + return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); + }, + htmlEncode: function (html) { + if (html !== null) { + return html.toString().replace(/&/g, "&").replace(/"/g, """).replace(//g, ">"); + } else { + return ''; + } + }, + jsString: function (s) { + s = JSON.stringify(s).slice(1, -1); + return utils.htmlEncode(s); + }, + replaceMultipLineStr: function (str) { + if (str != null && str != undefined && str != "") { + var newLinePattern = /(\r\n|\n\r|\r|\n)/g; + if (newLinePattern.test(str)) { + var newDes = str.replace(newLinePattern, '\\n'); + return newDes; + } + return str; + } + return ""; + }, + camelCase:function(str){ + if(str!=null&&str!=undefined&&str!=""){ + if(str.length==1){ + return str.toLocaleLowerCase(); + }else{ + return str.substr(0,1).toLocaleLowerCase()+str.substr(1); + } + } + return ""; + }, + generUUID: function () { + return (utils.randomNumber() + utils.randomNumber() + "-" + utils.randomNumber() + "-" + utils.randomNumber() + "-" + utils.randomNumber() + "-" + utils.randomNumber() + utils.randomNumber() + utils.randomNumber()); + }, + base64Encode: function (str) { + var CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var out = "", + i = 0, + len = str.length, + c1, c2, c3; + while (i < len) { + c1 = str.charCodeAt(i++) & 0xff; + if (i == len) { + out += CHARS.charAt(c1 >> 2); + out += CHARS.charAt((c1 & 0x3) << 4); + out += "=="; + break; + } + c2 = str.charCodeAt(i++); + if (i == len) { + out += CHARS.charAt(c1 >> 2); + out += CHARS.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); + out += CHARS.charAt((c2 & 0xF) << 2); + out += "="; + break; + } + c3 = str.charCodeAt(i++); + out += CHARS.charAt(c1 >> 2); + out += CHARS.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); + out += CHARS.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)); + out += CHARS.charAt(c3 & 0x3F); + } + return out; + }, + binToBase64: function (bitString) { + var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""); //索引表 + var result = ""; + var tail = bitString.length % 6; + var bitStringTemp1 = bitString.substr(0, bitString.length - tail); + var bitStringTemp2 = bitString.substr(bitString.length - tail, tail); + for (var i = 0; i < bitStringTemp1.length; i += 6) { + var index = parseInt(bitStringTemp1.substr(i, 6), 2); + result += code[index]; + } + bitStringTemp2 += new Array(7 - tail).join("0"); + if (tail) { + result += code[parseInt(bitStringTemp2, 2)]; + result += new Array((6 - tail) / 2 + 1).join("="); + } + return result; + } +} + + +export default utils; diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/layouts/BasicLayout.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/layouts/BasicLayout.vue new file mode 100644 index 0000000..88af55a --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/layouts/BasicLayout.vue @@ -0,0 +1,933 @@ + + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/layouts/menu.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/layouts/menu.js new file mode 100644 index 0000000..398f103 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/layouts/menu.js @@ -0,0 +1,127 @@ +/* eslint no-useless-escape:0 */ +const reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/g; + +function isUrl(path) { + return reg.test(path); +} + + +const menuData = [{ + key: 'kmain', + name: '主页', + icon: 'icon-home', + path: 'home', + }, { + key: 'swaggerModel', + name: 'Swagger Models', + icon: 'icon-modeling', + path: 'swaggermodels', + }, { + key: 'documentManager', + name: '文档管理', + icon: 'icon-zdlxb', + path: 'documentManager', + children: [{ + key: 'anlaysisPage', + name: '全局参数设置', + component: 'Hello2', + path: 'hello' + }, + { + key: 'monitorPage', + name: '离线文档(Md)', + component: 'Hello2', + path: 'hello1' + }, + { + key: 'workspacePage', + name: '个性化设置', + component: 'Hello2', + path: 'hello2' + // hideInBreadcrumb: true, + // hideInMenu: true, + } + ] + }, + { + key: 'dashboard', + name: 'dashboard', + icon: 'dashboard', + path: 'dashboard', + children: [{ + key: 'anlaysisPage', + name: '分析页', + component: 'Hello2', + path: 'hello' + }, + { + key: 'monitorPage', + name: '监控页', + component: 'Hello2', + path: 'hello1' + }, + { + key: 'workspacePage', + name: '工作台', + component: 'Hello2', + path: 'hello2' + // hideInBreadcrumb: true, + // hideInMenu: true, + } + ] + }, + { + key: 'form', + name: '表单页', + icon: 'form', + path: 'form', + children: [{ + key: 'basicForm', + name: '基础表单', + component: 'Hello2', + path: 'hello3' + }, + { + key: 'setupForm', + name: '分步表单', + component: 'Hello2', + path: 'hello5' + }, + { + key: 'advanceForm', + name: '高级表单', + authority: 'admin', + component: 'Hello2', + path: 'hello4' + } + ] + } +] + +function formatter(data, parentPath = "/", parentAuthority) { + return data.map(item => { + let { + path + } = item; + if (!isUrl(path)) { + path = parentPath + item.path; + } + const result = { + ...item, + path, + authority: item.authority || parentAuthority + }; + if (item.children) { + result.children = formatter( + item.children, + `${parentPath}${item.path}/`, + item.authority + ); + } + return result; + }); +} + + + +export const getMenuData = () => formatter(menuData); diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/main.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/main.js new file mode 100644 index 0000000..6e3b0d4 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/main.js @@ -0,0 +1,154 @@ +import Vue from 'vue' +import App from './App.vue' +import router from './router' +import store from './store' +//import './registerServiceWorker' +//import 'ant-design-vue/dist/antd.css' +import '@/assets/iconfonts/iconfont.css' +/* import Antd from 'ant-design-vue' */ +import axios from 'axios' +import { + Icon +} from 'ant-design-vue' + +import {Menu,Input,Select,Table,Tabs, + Radio,Layout,Button, + Tag,Divider,Tree,Dropdown,Form,Modal, + Col,Row,AutoComplete,Tooltip,Spin,Badge,Card, + Collapse,Checkbox,message +} from 'ant-design-vue' +Vue.prototype.$message=message; +//Vue.use(message) +Vue.use(Card) +Vue.use(Badge); +Vue.use(Modal) +Vue.use(Form) +Vue.use(Collapse) +Vue.use(Checkbox) +Vue.use(Tooltip) +Vue.use(Spin) +Vue.use(AutoComplete) +Vue.use(Col) +Vue.use(Row) +Vue.use(Icon) +Vue.use(Menu) +Vue.use(Input) +Vue.use(Select) +Vue.use(Table) +Vue.use(Tabs) +Vue.use(Radio) +Vue.use(Layout) +Vue.use(Button) +Vue.use(Tag) +Vue.use(Divider) +Vue.use(Tree) +Vue.use(Dropdown) + + +import kloading from '@/components/loading' +import VueI18n from 'vue-i18n' + +Vue.use(VueI18n) +Vue.use(kloading) + +/*** + * 注册全局组件 + */ +import Main from '@/views/index/Main' +Vue.component('Main', Main) +/*** + * 自定义图标 + */ +import iconFront from './assets/iconfonts/iconfont.js' +const myicon = Icon.createFromIconfontCN({ + scriptUrl: iconFront +}) +Vue.component('my-icon', myicon) +/*** + * 请求方法 + */ +import MethodType from '@/components/common/MethodApi' +Vue.component('MethodType', MethodType) +/*** + * api详情展示组件 + */ +import ApiInfo from '@/views/api/index' +import Authorize from '@/views/settings/Authorize' +import SwaggerModels from '@/views/settings/SwaggerModels'; +import GlobalParameters from '@/views/settings/GlobalParameters'; +import Settings from '@/views/settings/Settings'; +import OfficelineDocument from '@/views/settings/OfficelineDocument'; +import OtherMarkdown from '@/views/othermarkdown/index' +import GenApi from '@/views/settings/gen-api' + +Vue.component('ApiInfo', ApiInfo); +Vue.component('Authorize', Authorize); +Vue.component('SwaggerModels', SwaggerModels); +Vue.component('GlobalParameters', GlobalParameters); +Vue.component('Settings', Settings); +Vue.component('OfficelineDocument', OfficelineDocument); +Vue.component('OtherMarkdown', OtherMarkdown); +Vue.component('GenApi', GenApi); + +Vue.config.productionTip = false +// 响应数据拦截器 +axios.interceptors.response.use(function (response) { + var data = response.data; + return data +}, function (error) { + return Promise.reject(error) +}) +Vue.prototype.$axios = axios +/*** + * 本地存储解决方案 + */ +import localStore from './store/local' +Vue.prototype.$localStore = localStore; +//本地缓存models +import knife4jModel from './store/knife4jModels' + +Vue.prototype.$Knife4jModels = knife4jModel; + +/** + * 日志组件 + */ +import logger from '@/core/logger' +Vue.prototype.$logger = logger; + +String.prototype.gblen = function () { + var len = 0; + for (var i = 0; i < this.length; i++) { + if (this.charCodeAt(i) > 127 || this.charCodeAt(i) == 94) { + len += 2; + } else { + len++; + } + } + return len; +} + +String.prototype.startWith = function (str) { + var reg = new RegExp("^" + str); + return reg.test(this); +} + +import i18nZH from '@/assets/common/lang/zh' +import i18nEN from '@/assets/common/lang/en' + +//i18n +const i18n = new VueI18n({ + locale: 'zh-CN', + messages: { + 'zh-CN': i18nZH, + 'en-US': i18nEN + } +}) + +//Vue.use(localStore) +//Vue.use(Antd) +new Vue({ + router, + store, + i18n, + render: h => h(App) +}).$mount('#app') diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/router/index.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/router/index.js new file mode 100644 index 0000000..3f50a64 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/router/index.js @@ -0,0 +1,63 @@ +import Vue from 'vue' +import VueRouter from 'vue-router' +import BasicLayout from '../layouts/BasicLayout.vue' + +Vue.use(VueRouter) + +const routes = [{ + path: '/', + name: 'home', + component: BasicLayout, + redirect: '/home', + children: [{ + path: '/home', + component: () => import('@/views/index/Main') + },{ + path: '/home/:i18n', + component: () => import('@/views/index/Main') + }, { + path: '/plus', + component: () => import('@/views/index/Main') + }, { + path: '/plus/:i18n', + component: () => import('@/views/index/Main') + }, + { + path: '/Authorize/:groupName', + component: () => import('@/views/settings/Authorize') + }, + { + path: '/:groupName/:controller/:summary', + component: () => import('@/views/api/index') + }, { + path: '/SwaggerModels/:groupName', + component: () => import('@/views/settings/SwaggerModels') + }, { + path: '/documentManager/GlobalParameters-:groupName', + component: () => import('@/views/settings/GlobalParameters') + }, { + path: '/documentManager/OfficelineDocument-:groupName', + component: () => import('@/views/settings/OfficelineDocument') + }, { + path: '/documentManager/Settings', + component: () => import('@/views/settings/Settings') + }, { + path: '/documentManager/api', + component: () => import('@/views/settings/gen-api') + }, { + path: '/:groupName-:mdid-omd/:id', + component: () => import('@/views/othermarkdown/index') + } + ] +}, +{ + path: '/oauth2', + name:'oauth2', + component: () => import('@/views/settings/OAuth2') +}] + +const router = new VueRouter({ + routes +}) + +export default router diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/constants.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/constants.js new file mode 100644 index 0000000..559c737 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/constants.js @@ -0,0 +1,382 @@ +/*** + * knife4j常量 + */ +const constants = { + //全局离线参数 + globalParameter: "Knife4jOfficeParameter", + //全局离线参数表头 + globalParameterTableColumns: [{ + title: "参数名称", + dataIndex: "name", + width: "15%", + scopedSlots: { + customRender: "name" + } + }, + { + title: "参数值", + className: "column-money", + dataIndex: "value", + width: "65%", + scopedSlots: { + customRender: "paramContentLabel" + } + }, + { + title: "参数类型", + dataIndex: "in", + width: "10%", + scopedSlots: { + customRender: "paramTypeLable" + } + }, + { + title: "操作", + dataIndex: "operation", + scopedSlots: { + customRender: "operation" + } + } + ], + globalSecurityParameters: "Knife4jGlobalSecurityParameters", + globalSecurityParameterObject: "Knife4jGlobalSecurityParameterObject", + globalSecurityParamPrefix: "Knife4jSecurityParams", + globalI18nCache:"Knife4jI18n", + //缓存api接口,用于判断后端接口是否存在变化 + globalGitApiVersionCaches: "Knife4jGitApiVersionCaches", + //个性化设置名称 + globalSettingsKey: "Knife4jGlobalSettings", + globalTreeTableModelParams: "Knife4jGlobalTreeTableModelParams", + //Ui界面个性化配置默认初始值 + defaultWebSettings:{ + enableDebug:true,//是否开启Debug调试栏 + enableFooter:true,//是否默认显示底部Footer + enableFooterCustom:false,//是否自定义Footer + footerCustomContent:"",//自定义footer内容 + enableSearch:true,//是否显示搜索框 + enableOpenApi:true,//是否显示OpenApi原始规范结构 + enableHomeCustom:false,// 是否开启主页自定义配置,默认false + homeCustomLocation:"",//自定义主页的Markdown文档内容 + enableGroup:true,//是否显示分组下拉框,默认true(即显示),一般情况下,如果是单个分组的情况下,可以设置该属性为false,即不显示分组,那么也就不用选择了 + + enableSwaggerModels:true,//是否显示界面中SwaggerModel功能 + swaggerModelName:"Swagger Models",//重命名界面Swagger Model的显示名称 + enableReloadCacheParameter:false,// 是否在每个Debug调试栏后显示刷新变量按钮,默认不显示 + enableAfterScript:true,//调试Tab是否显示AfterScript功能,默认开启 + enableDocumentManage:true,//是否显示界面中"文档管理"功能 + enableVersion:false,//是否开启界面中对某接口的版本控制,如果开启,后端变化后Ui界面会存在小蓝点 + showApiUrl: false, //接口api地址不显示 + showTagStatus: true, //分组tag显示description属性,针对@Api注解没有tags属性值的情况 + enableSwaggerBootstrapUi: false, //是否开启swaggerBootstrapUi增强 + treeExplain: true, + + language: "zh-CN" //默认语言版本 + }, + defaultSettings: { + enableDebug:true,//是否开启Debug调试栏 + enableFooter:true,//是否默认显示底部Footer + enableFooterCustom:false,//是否自定义Footer + footerCustomContent:"",//自定义footer内容 + enableSearch:true,//是否显示搜索框 + enableOpenApi:true,//是否显示OpenApi原始规范结构 + enableHomeCustom:false,// 是否开启主页自定义配置,默认false + homeCustomLocation:"",//自定义主页的Markdown文档内容 + enableGroup:true,//是否显示分组下拉框,默认true(即显示),一般情况下,如果是单个分组的情况下,可以设置该属性为false,即不显示分组,那么也就不用选择了 + + enableSwaggerModels:true,//是否显示界面中SwaggerModel功能 + swaggerModelName:"Swagger Models",//重命名界面Swagger Model的显示名称 + enableReloadCacheParameter:false,// 是否在每个Debug调试栏后显示刷新变量按钮,默认不显示 + enableAfterScript:true,//调试Tab是否显示AfterScript功能,默认开启 + enableDocumentManage:true,//是否显示界面中"文档管理"功能 + enableVersion:false,//是否开启界面中对某接口的版本控制,如果开启,后端变化后Ui界面会存在小蓝点 + showApiUrl: false, //接口api地址不显示 + showTagStatus: true, //分组tag显示description属性,针对@Api注解没有tags属性值的情况 + enableSwaggerBootstrapUi: false, //是否开启swaggerBootstrapUi增强 + treeExplain: true, + enableDynamicParameter: false, //开启动态参数 + enableFilterMultipartApis: false, //针对RequestMapping的接口请求类型,在不指定参数类型的情况下,如果不过滤,默认会显示7个类型的接口地址参数,如果开启此配置,默认展示一个Post类型的接口地址 + enableFilterMultipartApiMethodType: "POST", //默认保存类型 + enableRequestCache: true, //是否开启请求参数缓存 + enableCacheOpenApiTable: false, //是否开启缓存已打开的api文档 + enableHost:false,//是否启用Host + enableHostText:"",//启用Host后文本 + language: "zh-CN" //默认语言版本 + }, + //增强配置 + defaultPlusSettings: { + enableDebug:true,//是否开启Debug调试栏 + enableFooter:true,//是否默认显示底部Footer + enableFooterCustom:false,//是否自定义Footer + footerCustomContent:"",//自定义footer内容 + enableSearch:true,//是否显示搜索框 + enableOpenApi:true,//是否显示OpenApi原始规范结构 + enableHomeCustom:false,// 是否开启主页自定义配置,默认false + homeCustomLocation:"",//自定义主页的Markdown文档内容 + enableGroup:true,//是否显示分组下拉框,默认true(即显示),一般情况下,如果是单个分组的情况下,可以设置该属性为false,即不显示分组,那么也就不用选择了 + + enableSwaggerModels:true,//是否显示界面中SwaggerModel功能 + swaggerModelName:"Swagger Models",//重命名界面Swagger Model的显示名称 + enableReloadCacheParameter:false,// 是否在每个Debug调试栏后显示刷新变量按钮,默认不显示 + enableAfterScript:true,//调试Tab是否显示AfterScript功能,默认开启 + enableDocumentManage:true,//是否显示界面中"文档管理"功能 + enableVersion:false,//是否开启界面中对某接口的版本控制,如果开启,后端变化后Ui界面会存在小蓝点 + showApiUrl: false, //接口api地址不显示 + showTagStatus: true, //分组tag显示description属性,针对@Api注解没有tags属性值的情况 + enableSwaggerBootstrapUi: true, //是否开启swaggerBootstrapUi增强 + treeExplain: true, + enableDynamicParameter: false, //开启动态参数 + enableFilterMultipartApis: false, //针对RequestMapping的接口请求类型,在不指定参数类型的情况下,如果不过滤,默认会显示7个类型的接口地址参数,如果开启此配置,默认展示一个Post类型的接口地址 + enableFilterMultipartApiMethodType: "POST", //默认保存类型 + enableRequestCache: true, //是否开启请求参数缓存 + enableCacheOpenApiTable: false, //是否开启缓存已打开的api文档 + enableHost:false,//是否启用Host + enableHostText:"",//启用Host后文本 + language: "zh-CN" //默认语言版本 + }, + debugRequestHeaders: ["Accept", + "Accept-Charset", + "Accept-Encoding", + "Accept-Language", + "Accept-Ranges", + "Authorization", + "Cache-Control", + "Connection", + "Cookie", + "Content-Length", + "Content-Type", + "Content-MD5", + "Date", + "Expect", + "From", + "Host", + "If-Match", + "If-Modified-Since", + "If-None-Match", + "If-Range", + "If-Unmodified-Since", + "Max-Forwards", + "Origin", + "Pragma", + "Proxy-Authorization", + "Range", + "Referer", + "TE", + "Upgrade", + "User-Agent", + "Via", + "Warning" + ], + debugRequestHeaderOptions: [{ + value: "Accept", + label: "Accept" + }, + { + value: "Accept-Charset", + label: "Accept-Charset" + }, + { + value: "Accept-Encoding", + label: "Accept-Encoding" + }, + { + value: "Accept-Language", + label: "Accept-Language" + }, + { + value: "Accept-Ranges", + label: "Accept-Ranges" + }, + { + value: "Authorization", + label: "Authorization" + }, + { + value: "Cache-Control", + label: "Cache-Control" + }, + { + value: "Connection", + label: "Connection" + }, + { + value: "Cookie", + label: "Cookie" + }, + { + value: "Content-Length", + label: "Content-Length" + }, + { + value: "Content-Type", + label: "Content-Type" + }, + { + value: "Content-MD5", + label: "Content-MD5" + }, + { + value: "Date", + label: "Date" + }, + { + value: "Expect", + label: "Expect" + }, + { + value: "From", + label: "From" + }, + { + value: "Host", + label: "Host" + }, + { + value: "If-Match", + label: "If-Match" + }, + { + value: "If-Modified-Since", + label: "If-Modified-Since" + }, + { + value: "If-None-Match", + label: "If-None-Match" + }, + { + value: "If-Range", + label: "If-Range" + }, + { + value: "If-Unmodified-Since", + label: "If-Unmodified-Since" + }, + { + value: "Max-Forwards", + label: "Max-Forwards" + }, + { + value: "Origin", + label: "Origin" + }, + { + value: "Pragma", + label: "Pragma" + }, + { + value: "Proxy-Authorization", + label: "Proxy-Authorization" + }, + { + value: "Range", + label: "Range" + }, + { + value: "Referer", + label: "Referer" + }, + { + value: "TE", + label: "TE" + }, + { + value: "Upgrade", + label: "Upgrade" + }, + { + value: "User-Agent", + label: "User-Agent" + }, + { + value: "Via", + label: "Via" + }, + { + value: "Warning", + label: "Warning" + } + ], + debugRequestHeaderColumn: [{ + title: "请求头", + dataIndex: "name", + width: "20%", + scopedSlots: { + customRender: "headerName" + } + }, + { + title: "内容", + dataIndex: "content", + scopedSlots: { + customRender: "headerValue" + } + }, + { + title: "操作", + dataIndex: "operation", + width: "10%", + scopedSlots: { + customRender: "operation" + } + } + ], + debugFormRequestHeader: [{ + title: "参数名称", + dataIndex: "name", + width: "20%", + scopedSlots: { + customRender: "formName" + } + }, + { + title: "类型", + dataIndex: "type", + width: "12%", + scopedSlots: { + customRender: "formType" + } + }, + { + title: "参数值", + dataIndex: "content", + scopedSlots: { + customRender: "formValue" + } + }, + { + title: "操作", + dataIndex: "operation", + width: "10%", + scopedSlots: { + customRender: "operation" + } + } + ], + debugUrlFormRequestHeader: [{ + title: "参数名称", + dataIndex: "name", + width: "20%", + scopedSlots: { + customRender: "urlFormName" + } + }, + { + title: "参数值", + dataIndex: "content", + scopedSlots: { + customRender: "urlFormValue" + } + }, + { + title: "操作", + dataIndex: "operation", + width: "10%", + scopedSlots: { + customRender: "operation" + } + } + ], + debugCacheApiId: "Knife4jCacheApi" + +} + +export default constants diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/index.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/index.js new file mode 100644 index 0000000..6e66c86 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/index.js @@ -0,0 +1,15 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +import header from './module/header' +import globals from './module/global' +Vue.use(Vuex) +const store = new Vuex.Store({ + modules: { + header, + globals + } +}); + + +export default store; diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/knife4jModels.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/knife4jModels.js new file mode 100644 index 0000000..9fc450c --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/knife4jModels.js @@ -0,0 +1,129 @@ +import Vue from 'vue'; +import KUtils from '@/core/utils'; +var knife4jModels = new Vue({ + data: { + instance: { + + }, + load: { + + }, + tags: { + + } + }, + methods: { + setTags(key, value) { + //该方法是递归遍历tags的方法 + //console("setTags--------") + //console(value); + + }, + setValue(key, value) { + //该方法是递归Models的方法 + //判断是否已经赋值 + var that = this; + var tmp = this.instance[key]; + if (tmp == undefined || tmp == null) { + //开始递归初始化 + var data = value; + for (var modelName in data) { + var model = data[modelName]; + if (model != undefined && model != null) { + var params = model.params; + if (params != undefined && params != null) { + params.forEach(function (p) { + if (p.schema) { + //存在 + //p.children=deepModel(shareModels,data,p,p); + //查找该schema的子类属性 + p.children = that.deepModel(data, p, p); + } + }) + } + } + } + //初始化一个空的instance对象 + this.instance[key] = data; + // window.//console("递归初始化完成-----------") + // window.//console(this.instance[key]) + } + }, + deepModel(data, param, rootParam) { + var childrens = []; + var that = this; + var model = data[param.schemaValue]; + if (model != undefined && model != null) { + if (model.params != undefined && model.params != null) { + model.params.forEach(function (chp) { + //深拷贝一个对象 + var childrenParam = that.deepCopy(chp); + childrenParam.pid = param.id; + //判断是否是schema参数 + if (childrenParam.schema) { + rootParam.parentTypes.push(param.schemaValue); + //判断该程序是否已经查找过了 + if (rootParam.parentTypes.indexOf(childrenParam.schemaValue) == -1) { + childrenParam.children = that.deepModel(data, childrenParam, rootParam); + } + } + childrens.push(childrenParam); + }) + } + } + + + return childrens; + }, + deepCopy(source) { + var target = { + childrenTypes: source.childrenTypes, + def: source.def, + description: source.description, + enum: source.enum, + example: source.example, + id: source.id, + ignoreFilterName: source.ignoreFilterName, + in: source.in, + level: source.level, + name: source.name, + parentTypes: source.parentTypes, + pid: source.pid, + readOnly: source.readOnly, + require: source.require, + schema: source.schema, + schemaValue: source.schemaValue, + show: source.show, + txtValue: source.txtValue, + type: source.type, + validateInstance: source.validateInstance, + validateStatus: source.validateStatus, + value: source.value + }; + return target; + }, + getByModelName(key, modelName) { + return this.instance[key][modelName]; + }, + addModels(key, modelName, childrens) { + if (!KUtils.checkUndefined(this.instance[key])) { + this.initInstance(key); + } + this.instance[key][modelName] = childrens; + }, + exists(key, modelName) { + if (!KUtils.checkUndefined(this.instance[key])) { + this.initInstance(key); + } + //判断是否存在 + var flag = false; + var value = this.instance[key][modelName]; + if (value != null && value != undefined) { + flag = true; + } + return flag; + } + } +}) + +export default knife4jModels; diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/local.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/local.js new file mode 100644 index 0000000..fe02fdc --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/local.js @@ -0,0 +1,105 @@ +import localForage from 'localforage'; +import Vue from 'vue'; +/** + * 创建默认实例 + */ +var VueMethods = { + getItem(key) { + return new Promise((resolve, reject) => { + localForage.getItem(key).then((value) => { + resolve(value) + }).catch((err) => { + reject(err) + }) + }) + }, + setItem(key, value) { + return new Promise((resolve, reject) => { + localForage.setItem(key, value).then((value) => { + resolve(value) + }).catch((err) => { + reject(err) + }) + }) + }, + removeItem(key) { + return new Promise((resolve, reject) => { + localForage.removeItem(key).then(() => { + resolve() + }).catch((err) => { + reject(err) + }) + }) + }, + clear() { + return new Promise((resolve, reject) => { + localForage.clear().then(() => { + resolve() + }).catch((err) => { + reject(err) + }) + }) + }, + length() { + return new Promise((resolve, reject) => { + localForage.length().then((numberOfKeys) => { + resolve(numberOfKeys) + }).catch((err) => { + reject(err) + }) + }) + }, + key(keyIndex) { + return new Promise((resolve, reject) => { + localForage.key(keyIndex).then((keyName) => { + resolve(keyName) + }).catch((err) => { + reject(err) + }) + }) + }, + keys() { + return new Promise((resolve, reject) => { + localForage.keys().then((keys) => { + resolve(keys) + }).catch((err) => { + reject(err) + }) + }) + }, + iterate() { + return new Promise((resolve, reject) => { + localForage.iterate((value, key, iterationNumber) => { + resolve([value, key, iterationNumber]) + }).then((result) => { + resolve(result) + }).catch((err) => { + // This code runs if there were any errors + reject(err) + }) + }) + }, + setDriver(driverName) { + return new Promise((resolve, reject) => { + resolve(localForage.setDriver(driverName)) + }) + }, + config(options) { + return new Promise((resolve, reject) => { + resolve(localForage.config(options)) + }) + }, + createInstance(options) { + return new Promise((resolve, reject) => { + resolve(localForage.createInstance(options)) + }) + } +} + + +const localStore = new Vue({ + name: 'localStore', + methods: VueMethods +}) + +export default localStore; diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/module/global.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/module/global.js new file mode 100644 index 0000000..1c4ce56 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/module/global.js @@ -0,0 +1,91 @@ +const globals = { + namespaced: true, + state: { + menuData: [], + language:'zh-CN', + swagger:null, + swaggerCurrentInstance:null, + enableVersion:false, + enableAfterScript:true, + enableReloadCacheParameter:false, + currentMenuData:[], + serviceOptions:[], + settings:{}, + defaultServiceOption: '' + }, + mutations: { + setMenuData: (state, menudatas) => { + let newMenuArrs=state.menuData.concat(menudatas); + state.menuData = newMenuArrs; + state.currentMenuData=menudatas; + },setCurrentMenuData:(state,menudatas)=>{ + state.currentMenuData=menudatas; + },setLang:(state,lang)=>{ + state.language=lang; + }, + setSwagger:(state,swagger)=>{ + state.swagger=swagger; + }, + setSwaggerInstance:(state,instance)=>{ + state.swaggerCurrentInstance=instance; + }, + setServiceOptions:(state,services)=>{ + state.serviceOptions=services; + }, + setDefaultService:(state,defaultOption)=>{ + state.defaultServiceOption=defaultOption; + }, + setGitVersion:(state,gitVersion)=>{ + state.enableVersion=gitVersion; + }, + setAfterScript:(state,afterScript)=>{ + state.enableAfterScript=afterScript; + }, + setReloadCacheParameter:(state,reloadCacheParameter)=>{ + state.enableReloadCacheParameter=reloadCacheParameter; + }, + setSettings:(state,settings)=>{ + state.settings=settings; + } + }, + actions: { + setSettings({commit},settings){ + commit('setSettings',settings); + }, + setReloadCacheParameter({commit},reloadCacheParameter){ + commit('setReloadCacheParameter',reloadCacheParameter); + }, + setAfterScript({commit},afterScript){ + commit('setAfterScript',afterScript); + }, + setGitVersion({commit},gitVersion){ + commit('setGitVersion',gitVersion); + }, + setMenuData({ + commit + }, menudatas) { + commit('setMenuData', menudatas); + }, + setCurrentMenuData({commit},menudatas){ + commit('setCurrentMenuData',menudatas); + }, + setLang({commit},lang){ + commit('setLang',lang); + }, + setSwagger({commit},swagger){ + commit('setSwagger',swagger); + }, + setSwaggerInstance({commit},instance){ + commit('setSwaggerInstance',instance); + }, + setServiceOptions({commit},services){ + commit('setServiceOptions',services); + }, + setDefaultService({commit},defaultOption){ + commit('setDefaultService',defaultOption); + } + } + +} + +export default globals; diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/module/header.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/module/header.js new file mode 100644 index 0000000..81c2164 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/store/module/header.js @@ -0,0 +1,24 @@ +const headers = { + namespaced: true, + state: { + userCurrent: {} + }, + mutations: { + SetCurrentUser: (state) => { + state.userCurrent = { + name: '八一菜刀', + avatar: '' + } + } + }, + actions: { + getCurrentUser({ + commit + }) { + commit("SetCurrentUser") + } + } + +} + +export default headers; diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/style/knife4j.less b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/style/knife4j.less new file mode 100644 index 0000000..f93ef6e --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/style/knife4j.less @@ -0,0 +1,679 @@ +@import "~ant-design-vue/dist/antd.less"; +//@import "~ant-design-vue/lib/style/themes/default.less"; + +@contentHeight: calc(100vh - 64px); +@contentAllHeight:calc(100vh); +@DebugContentBodyHeight: calc(100vh - 395px); +@headerDefaultWidth: calc(100vw - 310px); +@headerCollapsedWidth: calc(100vw - 80px); +@contentTabHeight: calc(100vh - 152px); +/* @GlobalBackgroundColor: #252728; */ +@GlobalBackgroundColor: #1e282c; +@GlobalSubMenuBackgroundColor: #2c3b41; + +.knife4j { + padding: 0px; +} + + +/** +* ----------------------------- +* 左侧菜单部分样式 +* ------------------------------ +*/ + +.knife4j-menu { + height: @contentHeight; + overflow: auto; + /* background: #161718; */ + background: @GlobalBackgroundColor; + + ul { + background: @GlobalBackgroundColor; + } + + li { + /* background: @GlobalBackgroundColor; */ + /* background: @GlobalSubMenuBackgroundColor; */ + } + + .ant-menu-dark .ant-menu-inline.ant-menu-sub { + /* background: @GlobalBackgroundColor; */ + background: @GlobalSubMenuBackgroundColor; + + li { + /* background: @GlobalSubMenuBackgroundColor; */ + } + } + + + +} + + +.knife4j-menu::-webkit-scrollbar { + /*滚动条整体样式*/ + width: 6px; + /*高宽分别对应横竖滚动条的尺寸*/ + height: 0.5px; +} + +.knife4j-menu::-webkit-scrollbar-thumb { + /*滚动条里面小方块*/ + border-radius: 10px; + -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + background: #469aed; +} + +.knife4j-menu::-webkit-scrollbar-track { + /*滚动条里面轨道*/ + -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + border-radius: 10px; + background: #001529; +} + + +.knife4j-menu-all { + height: @contentAllHeight; + overflow: auto; + /* background: #161718; */ + background: @GlobalBackgroundColor; + + ul { + background: @GlobalBackgroundColor; + } + + li { + /* background: @GlobalBackgroundColor; */ + /* background: @GlobalSubMenuBackgroundColor; */ + } + + .ant-menu-dark .ant-menu-inline.ant-menu-sub { + /* background: @GlobalBackgroundColor; */ + background: @GlobalSubMenuBackgroundColor; + + li { + /* background: @GlobalSubMenuBackgroundColor; */ + } + } + + + +} + + +.knife4j-menu-all::-webkit-scrollbar { + /*滚动条整体样式*/ + width: 6px; + /*高宽分别对应横竖滚动条的尺寸*/ + height: 0.5px; +} + +.knife4j-menu-all::-webkit-scrollbar-thumb { + /*滚动条里面小方块*/ + border-radius: 10px; + -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + background: #469aed; +} + +.knife4j-menu-all::-webkit-scrollbar-track { + /*滚动条里面轨道*/ + -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + border-radius: 10px; + background: #001529; +} + + +.ant-menu-dark, +.ant-menu-dark .ant-menu-sub { + background: @GlobalBackgroundColor; +} + +.knife4j-menu-api-deprecated { + text-decoration: line-through; +} + + +.knife4j-menu-line{ + /* left: 10px; + position: absolute; + */ + width:65px; + display: inline-block; + +} + +.knife4j-menu-left-style{ + margin-left: -12px; +} +.knife4j-menu-badge-num{ + float: right; + margin-top: 12px; + margin-right: 10px; + z-index: auto; + min-width: 16px; + height: 16px; + padding: 0px 4px; + color: #fff; + font-weight: normal; + font-size: 12px; + line-height: 16px; + white-space: nowrap; + text-align: center; + background: #4c96e8; + border-radius: 24px; + -webkit-box-shadow: 0 0 0 1px #fff; + box-shadow: 0 0 0 1px #fff; + position: absolute; + right: 25px; +} +.knife4j-menu-badge-num-style{ + background: #fff; + color: #999; + box-shadow: 0 0 0 1px #d9d9d9 inset; +} +/** +* ----------------------------- +* 覆盖antd部分样式 +* ------------------------------ +*/ + + +.knife4j-logo { + height: 64px; + position: relative; + line-height: 64px; + padding-left: (@menu-collapsed-width - 32px) / 2; + transition: all 0.3s; + background: @GlobalBackgroundColor; + overflow: hidden; + + img { + display: inline-block; + vertical-align: middle; + height: 32px; + } + + h1 { + color: white; + display: inline-block; + vertical-align: middle; + font-size: 20px; + margin: 0 0 0 12px; + font-family: "Myriad Pro", "Helvetica Neue", Arial, Helvetica, + sans-serif; + font-weight: 600; + } +} + + +.knife4j-logo-data { + height: 64px; + position: relative; + line-height: 64px; + padding-left: (@menu-collapsed-width - 48px) / 2; + transition: all 0.3s; + background: @GlobalBackgroundColor; + overflow: hidden; + + img { + display: inline-block; + vertical-align: middle; + height: 32px; + } + + h1 { + color: white; + display: inline-block; + vertical-align: middle; + font-size: 20px; + margin: 0 0 0 12px; + font-family: "Myriad Pro", "Helvetica Neue", Arial, Helvetica, + sans-serif; + font-weight: 600; + } +} + + +/** +* ----------------------------- +* 顶部Header部分样式 +* ------------------------------ +*/ +.knife4j-header-title { + font-size: 20px; + font-weight: 400; +} + + +.knife4j-header-default { + position: fixed; + z-index: 999; +} + +.knife4j-header-width { + width: @headerDefaultWidth; + max-width: @headerDefaultWidth; +} + +.knife4j-header-width-collapsed { + width: @headerCollapsedWidth; + max-width: @headerCollapsedWidth; +} + + +/** +* ----------------------------- +* tab选项卡部分样式 +* ------------------------------ +*/ + +.knife4j-tab { + padding: 5px 5px 0; + left: 4px; + top: 5px; + background: white; + + .ant-tabs-nav-container { + font-size: 12px; + } + + .ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab { + line-height: 35px; + border-bottom: 1px; + } +} + + +.knife4j-tab .ant-tabs-bar { + margin: 0 0 3px 0 +} + +/** +* ----------------------------- +* 内容部分样式 +* ------------------------------ +*/ + +.knife4j-body-content { + overflow-y: auto; + height: @contentTabHeight; + min-height: 400px; +} + +.knife4j-body-content--no-fotter { + height: calc(100vh - 109px); + padding-bottom: 20px; +} + +/* +* 内容页滚动条 +*/ +.knife4j-body-content::-webkit-scrollbar { + /*滚动条整体样式*/ + width: 8px; + /*高宽分别对应横竖滚动条的尺寸*/ + height: 0.5px; +} + +.knife4j-body-content::-webkit-scrollbar-thumb { + /*滚动条里面小方块*/ + border-radius: 10px; + -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + background: #469aed; +} + +.knife4j-body-content::-webkit-scrollbar-track { + /*滚动条里面轨道*/ + -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + border-radius: 10px; + background: #fff; +} + + + +.knife4j-router-view { + min-height: 480px; + margin: 5px 5px 0; +} + + +.knife4j-btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} + +.knife4j-btn-info { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} + +.knife4j-request-query { + color: #61affe; +} + +.knife4j-request-body { + color: #0d5aa7; +} + +.knife4j-request-formData { + color: #9012fe; +} + +.knife4j-request-form { + color: #9012fe; +} + +.knife4j-request-validate-jsr { + color: #10af88; + border-bottom: 1px dashed #10af88; +} + +.knife4j-request-header { + color: #fca130; +} + +.knife4j-request-path { + color: #49cc90; +} + +.knife4j-api-copy-address { + font-size: 12px; + cursor: pointer; + text-align: center; + font-weight: 100; + color: #0b0a0a; +} + +.knife4j-api-title { + margin-top: 10px; + margin-bottom: 5px; + font-size: 16px; + font-weight: 600; + color: #616368; + height: 35px; + line-height: 35px; +} + +.knife4j-api-row { + height: 45px; + line-height: 45px; +} + +.knife4j-api-summary { + border-color: #49cc90; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 2px; + cursor: pointer; +} + +.knife4j-api-summary-method { + font-size: 14px; + font-weight: 700; + min-width: 80px; + padding: 6px 15px; + text-align: center; + border-radius: 3px; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); + font-family: Titillium Web, sans-serif; + color: #fff; +} + +.knife4j-api-summary-path { + font-size: 14px; + display: flex; + -webkit-box-flex: 0; + -ms-flex: 0 3 auto; + flex: 0 3 auto; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + word-break: break-all; + padding: 0 32px; +} + +.knife4j-api-post { + border-color: #49cc90; + background: rgba(73, 204, 144, 0.1); + + .knife4j-api-summary-method { + background: #49cc90; + } +} + +.knife4j-api-get { + border-color: #61affe; + background: rgba(97, 175, 254, 0.1); + + .knife4j-api-summary-method { + background: #61affe; + } +} + +.knife4j-api-head { + border-color: #9012fe; + background: rgba(144, 18, 254, 0.1); + + .knife4j-api-summary-method { + background: #9012fe; + } +} + +.knife4j-api-put { + border-color: #fca130; + background: rgba(252, 161, 48, 0.1); + + .knife4j-api-summary-method { + background: #fca130; + } +} + +.knife4j-api-delete { + border-color: #f93e3e; + background: rgba(249, 62, 62, 0.1); + + .knife4j-api-summary-method { + background: #f93e3e; + } +} + +.knife4j-api-options { + border-color: #0d5aa7; + background: rgba(13, 90, 167, 0.1); + + .knife4j-api-summary-method { + background: #0d5aa7; + } +} + +.knife4j-api-patch { + border-color: #50e3c2; + background: rgba(80, 227, 194, 0.1); + + .knife4j-api-summary-method { + background: #50e3c2; + } +} + + +/**Debug调试部分样式**/ +.knife4j-debug { + margin: 20px auto; + width: 100%; +} + +.knife4j-api-send { + width: 10%; +} + +.knife4j-debug-param-count { + background-color: red; + border-radius: 50%; + color: white; +} + +.knife4j-debug-tabs { + margin: 10px auto; +} + +.knife4j-api-readonly { + margin: 10px auto; + width: 98%; +} + +.knife4j-debug-api-post { + border-color: #49cc90; + + .knife4j-api-summary-method { + background: #49cc90; + height: 32px; + } +} + +.knife4j-debug-api-get { + border-color: #61affe; + + .knife4j-api-summary-method { + background: #61affe; + height: 32px; + } +} + +.knife4j-debug-api-head { + border-color: #9012fe; + + .knife4j-api-summary-method { + background: #9012fe; + height: 32px; + } +} + +.knife4j-debug-api-put { + border-color: #fca130; + + .knife4j-api-summary-method { + background: #fca130; + height: 32px; + } +} + +.knife4j-debug-api-delete { + border-color: #f93e3e; + + .knife4j-api-summary-method { + background: #f93e3e; + height: 32px; + } +} + +.knife4j-debug-api-options { + border-color: #0d5aa7; + + .knife4j-api-summary-method { + background: #0d5aa7; + height: 32px; + } +} + +.knife4j-debug-api-patch { + border-color: #50e3c2; + + .knife4j-api-summary-method { + background: #50e3c2; + height: 32px; + } +} + + + + +.knife4j-debug-request-type { + margin-top: 0px; +} + +.knife4j-debug-request-content-type { + width: 360px; + height: 35px; + line-height: 35px; +} + +.knife4j-debug-request-content-type-float { + float: left; + width: 360px; +} + + +.knife4j-debug-request-content-type-raw { + width: 360px; + height: 35px; + line-height: 35px; +} + +.knife4j-debug-request-content-type-beautify{ + float: right;margin-right: 50px;height: 35px;line-height: 35px; +} + +.knife4j-debug-raw-span { + cursor: pointer; +} + + +.knife4j-debug-response { + min-height: @DebugContentBodyHeight; +} + +.knife4j-debug-response-mt { + margin-top: 10px; +} + +.knife4j-debug-response-curl { + margin: 10px 0; + font: 100 12px/18px monaco, andale mono, courier new; + padding: 10px 12px; + border: #ccc 1px solid; + border-left-width: 4px; + background-color: #fefefe; + box-shadow: 0 0 4px #eee; + white-space: pre-wrap; + word-wrap: break-word; + color: #444; +} + +.knife4j-debug-status { + margin-right: 15px; + + .key { + color: #919191; + padding: 6px; + } + + .value { + color: #4dc095; + font-size: 12px; + font-weight: bold; + } +} + +.knife4j-debug-ace-editor { + overflow-y: hidden; + + .ace_scrollbar-v { + overflow-y: hidden; + } +} + +.knife4j-debug-param-requiretrue { + border: 1px solid #e5b2b1; +} + +.knife4j-debug-editor-field-description { + position: absolute; + color: #8c8c8c; +} \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/DataType.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/DataType.vue new file mode 100644 index 0000000..c4dd6a6 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/DataType.vue @@ -0,0 +1,61 @@ + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/Debug.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/Debug.vue new file mode 100644 index 0000000..21aae16 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/Debug.vue @@ -0,0 +1,3625 @@ + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/DebugResponse.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/DebugResponse.vue new file mode 100644 index 0000000..78c37b6 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/DebugResponse.vue @@ -0,0 +1,388 @@ + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/Document.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/Document.vue new file mode 100644 index 0000000..4284a64 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/Document.vue @@ -0,0 +1,930 @@ + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/EditorDebugShow.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/EditorDebugShow.vue new file mode 100644 index 0000000..51e2a59 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/EditorDebugShow.vue @@ -0,0 +1,131 @@ + + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/EditorScript.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/EditorScript.vue new file mode 100644 index 0000000..eaef484 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/EditorScript.vue @@ -0,0 +1,66 @@ + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/EditorShow.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/EditorShow.vue new file mode 100644 index 0000000..33b9c80 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/EditorShow.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/OnlineDocument.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/OnlineDocument.vue new file mode 100644 index 0000000..954f338 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/OnlineDocument.vue @@ -0,0 +1,678 @@ + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/OpenApi.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/OpenApi.vue new file mode 100644 index 0000000..f7b5398 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/OpenApi.vue @@ -0,0 +1,100 @@ + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/index.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/index.vue new file mode 100644 index 0000000..da987d0 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/api/index.vue @@ -0,0 +1,153 @@ + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/index/Main.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/index/Main.vue new file mode 100644 index 0000000..54aaf3d --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/index/Main.vue @@ -0,0 +1,167 @@ + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/othermarkdown/index.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/othermarkdown/index.vue new file mode 100644 index 0000000..098f740 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/othermarkdown/index.vue @@ -0,0 +1,53 @@ + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/Authorize.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/Authorize.vue new file mode 100644 index 0000000..fbc5471 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/Authorize.vue @@ -0,0 +1,428 @@ + + + + \ No newline at end of file diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/DownloadHtml.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/DownloadHtml.vue new file mode 100644 index 0000000..d8eddc6 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/DownloadHtml.vue @@ -0,0 +1,145 @@ + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/GlobalParameters.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/GlobalParameters.vue new file mode 100644 index 0000000..fc0124f --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/GlobalParameters.vue @@ -0,0 +1,277 @@ + + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/OAuth2.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/OAuth2.vue new file mode 100644 index 0000000..e78b0f6 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/OAuth2.vue @@ -0,0 +1,38 @@ + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/OfficelineCss.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/OfficelineCss.js new file mode 100644 index 0000000..9254da5 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/OfficelineCss.js @@ -0,0 +1,222 @@ +export const resumecss = ` +.content-line { + height: 25px; + line-height: 25px; +} +.content-line-count { + height: 35px; + line-height: 35px; +} +.title { + margin-top: 25px; +} +.knife4j-description { + /* width: 90%; + margin: 15px auto; */ + margin-top: 5px; +} +.divider { + margin: 4px 0; +} +.divider-count { + margin: 8px 0; +} +.knife4j-document { + margin-top: 30px; +} +.api-tab { + margin-top: 15px; + + .ant-tag { + height: 32px; + line-height: 32px; + } +} +.knife4j-menu-api-deprecated { + text-decoration: line-through; +} + +.knife4j-api-title { + margin-top: 10px; + margin-bottom: 5px; + font-size: 16px; + font-weight: 600; + color: #616368; + height: 35px; + line-height: 35px; +} +.knife4j-api-row { + height: 45px; + line-height: 45px; +} + +.knife4j-api-summary { + border-color: #49cc90; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 2px; + cursor: pointer; +} +.knife4j-api-summary-method { + font-size: 14px; + font-weight: 700; + min-width: 80px; + padding: 6px 15px; + text-align: center; + border-radius: 3px; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); + font-family: Titillium Web, sans-serif; + color: #fff; +} +.knife4j-api-summary-path { + font-size: 14px; + display: flex; + -webkit-box-flex: 0; + -ms-flex: 0 3 auto; + flex: 0 3 auto; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + word-break: break-all; + padding: 0 32px; +} + +.knife4j-api-post { + border-color: #49cc90; + background: rgba(73, 204, 144, 0.1); +} +.knife4j-api-post .knife4j-api-summary-method { + background: #49cc90; +} + +.knife4j-api-get { + border-color: #61affe; + background: rgba(97, 175, 254, 0.1); +} +.knife4j-api-get .knife4j-api-summary-method { + background: #61affe; +} +.knife4j-api-head { + border-color: #9012fe; + background: rgba(144, 18, 254, 0.1); +} +.knife4j-api-head .knife4j-api-summary-method { + background: #9012fe; +} +.knife4j-api-put { + border-color: #fca130; + background: rgba(252, 161, 48, 0.1); +} +.knife4j-api-put .knife4j-api-summary-method { + background: #fca130; +} +.knife4j-api-delete { + border-color: #f93e3e; + background: rgba(249, 62, 62, 0.1); +} +.knife4j-api-delete .knife4j-api-summary-method { + background: #f93e3e; +} +.knife4j-api-options { + border-color: #0d5aa7; + background: rgba(13, 90, 167, 0.1); +} +.knife4j-api-options .knife4j-api-summary-method { + background: #0d5aa7; +} +.knife4j-api-patch { + border-color: #50e3c2; + background: rgba(80, 227, 194, 0.1); +} +.knife4j-api-patch .knife4j-api-summary-method { + background: #50e3c2; +} +#knife4jDoc ul{ + padding-left: 10px; + list-style: none; + counter-reset: ordered; +} + +#knife4jDoc ul li:before { + counter-increment: ordered; + content: counters(ordered,".")" "; + color:#1890ff; +} +.api-basic { + padding: 11px; +} +.api-basic-title { + font-size: 14px; + font-weight: 700; +} +.api-basic-body { + font-size: 14px; + font-family: -webkit-body; +} +.knife4j-api-editor-show { + margin: 15px 0; + font: 100 12px/18px monaco, andale mono, courier new; + padding: 10px 12px; + border: #ccc 1px solid; + border-left-width: 4px; + background-color: #fefefe; + box-shadow: 0 0 4px #eee; + word-break: break-all; + word-wrap: break-word; + color: #444; +} +.knife4j-api-editor-show .string { color: green; } /*字符串的样式*/ +.knife4j-api-editor-show .number { color: darkorange; } /*数字的样式*/ +.knife4j-api-editor-show .boolean { color: blue; } /*布尔型数据的样式*/ +.knife4j-api-editor-show .null { color: magenta; } /*null值的样式*/ +.knife4j-api-editor-show .key { color: red; } /*key值的样式*/ +.api-description { + border-left: 4px solid #ddd; + line-height: 30px; +} +.api-body-desc { + padding: 10px; + min-height: 35px; + box-sizing: border-box; + border: 1px solid #e8e8e8; +} +.ant-card-body { + padding: 5px; +} +.api-title { + margin-top: 10px; + margin-bottom: 5px; + font-size: 16px; + font-weight: 600; + height: 30px; + line-height: 30px; + border-left: 4px solid #00ab6d; + text-indent: 8px; +} +.content-line { + height: 25px; + line-height: 25px; +} +.content-line-count { + height: 35px; + line-height: 35px; +} +.divider { + margin: 4px 0; +} +.knife4j-doc-m{ + position: fixed; + height: 500px; + width: 400px; + border: 1px solid #b7b4b4; + overflow-y: auto; + right: 12px; + top: 40px; + z-index: 9999; + background: #fcfafa; +} +` diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/OfficelineDocument.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/OfficelineDocument.vue new file mode 100644 index 0000000..1163d0a --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/OfficelineDocument.vue @@ -0,0 +1,886 @@ + + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/Settings.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/Settings.vue new file mode 100644 index 0000000..7915cbe --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/Settings.vue @@ -0,0 +1,343 @@ + + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/SwaggerModels.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/SwaggerModels.vue new file mode 100644 index 0000000..0488884 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/SwaggerModels.vue @@ -0,0 +1,393 @@ + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/gen-api.vue b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/gen-api.vue new file mode 100644 index 0000000..563a640 --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/src/views/settings/gen-api.vue @@ -0,0 +1,122 @@ + + + + diff --git a/src/platform/ZhonTai.ApiUI/src/knife4j-vue/vue.config.js b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/vue.config.js new file mode 100644 index 0000000..7e859fa --- /dev/null +++ b/src/platform/ZhonTai.ApiUI/src/knife4j-vue/vue.config.js @@ -0,0 +1,68 @@ +const TerserPlugin = require("terser-webpack-plugin"); +// const WebpackBundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin +const CompressionWebpackPlugin = require("compression-webpack-plugin"); +const productionGzipExtensions = ["js", "css"]; +module.exports = { + publicPath: ".", + assetsDir: "knife4jui", + outputDir: "../dist", + lintOnSave: false, + productionSourceMap: false, + indexPath: "index.html", + css: { + loaderOptions: { + less: { + javascriptEnabled: true, + }, + }, + }, + devServer: { + open: true, + watchOptions: { + ignored: /node_modules/, + }, + proxy: { + "^/swagger-resources": { + target: "http://localhost:8000/admin", + ws: true, + changeOrigin: true, + }, + "^/": { + target: "http://localhost:8000", + ws: true, + changeOrigin: true, + }, + }, + }, + configureWebpack: { + optimization: { + minimizer: [ + new TerserPlugin({ + terserOptions: { + ecma: undefined, + warnings: false, + parse: {}, + compress: { + drop_console: true, + drop_debugger: true, + pure_funcs: [ + "console.log", + "console.debug", + "window.console.log", + "window.console.debug", + ], // 移除console + }, + }, + }), + ], + }, + plugins: [ + new CompressionWebpackPlugin({ + algorithm: "gzip", + test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"), + threshold: 10240, + minRatio: 0.8, + }), + ], + }, +}; diff --git a/src/platform/ZhonTai.Common/Extensions/DateTimeExtension.cs b/src/platform/ZhonTai.Common/Extensions/DateTimeExtension.cs new file mode 100644 index 0000000..d9742ff --- /dev/null +++ b/src/platform/ZhonTai.Common/Extensions/DateTimeExtension.cs @@ -0,0 +1,33 @@ +namespace ZhonTai.Common.Extensions; + +public static class DateTimeExtension +{ + /// + /// 时间戳起始日期 + /// + public static readonly DateTime TimestampStart = new(1970, 1, 1, 0, 0, 0, 0); + + /// + /// 转换为时间戳 + /// + /// + /// 是否使用毫秒 + /// + public static long ToTimestamp(this DateTime dateTime, bool milliseconds = false) + { + var timestamp = dateTime.ToUniversalTime() - TimestampStart; + return (long)(milliseconds ? timestamp.TotalMilliseconds : timestamp.TotalSeconds); + } + + /// + /// 获取周几 + /// + /// + /// + public static string GetWeekName(this DateTime datetime) + { + var day = (int)datetime.DayOfWeek; + var week = new string[] { "周日", "周一", "周二", "周三", "周四", "周五", "周六" }; + return week[day]; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Extensions/DictionaryExtension.cs b/src/platform/ZhonTai.Common/Extensions/DictionaryExtension.cs new file mode 100644 index 0000000..07d327a --- /dev/null +++ b/src/platform/ZhonTai.Common/Extensions/DictionaryExtension.cs @@ -0,0 +1,54 @@ +namespace ZhonTai.Common.Extensions; + +public static class DictionaryExtension +{ + public static TValue GetOrAdd( + this IDictionary dictionary, + TKey key, + Func factory) + { + TValue obj; + if (dictionary.TryGetValue(key, out obj)) + { + return obj; + } + + return dictionary[key] = factory(key); + } + + public static TValue GetOrAdd( + this IDictionary dictionary, + TKey key, + Func factory) + { + return dictionary.GetOrAdd(key, k => factory()); + } + + public static TValue AddOrUpdate( + this IDictionary dictionary, + TKey key, + Func addFactory, + Func updateFactory) + { + TValue obj; + if (dictionary.TryGetValue(key, out obj)) + { + obj = updateFactory(key, obj); + } + else + { + obj = addFactory(key); + } + dictionary[key] = obj; + return obj; + } + + public static TValue AddOrUpdate( + this IDictionary dictionary, + TKey key, + Func addFactory, + Func updateFactory) + { + return dictionary.AddOrUpdate(key, k => addFactory(), (k, v) => updateFactory(v)); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Extensions/EnumExtension.cs b/src/platform/ZhonTai.Common/Extensions/EnumExtension.cs new file mode 100644 index 0000000..d189325 --- /dev/null +++ b/src/platform/ZhonTai.Common/Extensions/EnumExtension.cs @@ -0,0 +1,56 @@ +using System.ComponentModel; +using System.Reflection; + +namespace ZhonTai.Common.Extensions; + +public static class EnumExtension +{ + public static string ToDescription(this Enum item, bool useName = true) + { + string name = item.ToString(); + var desc = item.GetType().GetField(name)?.GetCustomAttribute(false); + return useName ? (desc?.Description ?? name) : desc?.Description; + } + + public static string ToNameWithDescription(this Enum item) + { + string name = item.ToString(); + var desc = item.GetType().GetField(name)?.GetCustomAttribute(false); + return $"{name}{(desc == null || desc.Description.IsNull() ? "" : $"({desc?.Description})")}"; + } + + public static long ToInt64(this Enum item) + { + return Convert.ToInt64(item); + } + + public static List> ToList(this Enum value, bool ignoreNull = false) + { + var enumType = value.GetType(); + + if (!enumType.IsEnum) + return null; + + return Enum.GetValues(enumType).Cast() + .Where(m => !ignoreNull || !m.ToString().Equals("Null")).Select(x => new Dictionary + { + ["Label"] = x.ToDescription(), + ["Value"] = x + }).ToList(); + } + + public static List> ToList(bool ignoreNull = false) + { + var enumType = typeof(T); + + if (!enumType.IsEnum) + return null; + + return Enum.GetValues(enumType).Cast() + .Where(m => !ignoreNull || !m.ToString().Equals("Null")).Select(x => new Dictionary + { + ["Label"] = x.ToDescription(), + ["Value"] = x + }).ToList(); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Extensions/GuidExtension.cs b/src/platform/ZhonTai.Common/Extensions/GuidExtension.cs new file mode 100644 index 0000000..ffbb057 --- /dev/null +++ b/src/platform/ZhonTai.Common/Extensions/GuidExtension.cs @@ -0,0 +1,24 @@ +namespace ZhonTai.Common.Extensions; + +public static class GuidExtension +{ + /// + /// 判断Guid是否为空 + /// + /// + /// + public static bool IsNull(this Guid s) + { + return s == Guid.Empty; + } + + /// + /// 判断Guid是否不为空 + /// + /// + /// + public static bool NotNull(this Guid s) + { + return s != Guid.Empty; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Extensions/ListExtension.cs b/src/platform/ZhonTai.Common/Extensions/ListExtension.cs new file mode 100644 index 0000000..71a3f24 --- /dev/null +++ b/src/platform/ZhonTai.Common/Extensions/ListExtension.cs @@ -0,0 +1,111 @@ +using Newtonsoft.Json; + +namespace ZhonTai.Common.Extensions; + +public static class ListExtension +{ + /// + /// 将列表转换为树形结构 + /// + /// 类型 + /// 数据 + /// 根条件 + /// 节点条件 + /// 添加子节点 + /// + /// + public static List ToTree(this List list, Func rootWhere, Func childsWhere, Action> addChilds, T entity = default) + { + var treelist = new List(); + //空树 + if (list == null || list.Count == 0) + { + return treelist; + } + if (!list.Any(e => rootWhere(entity, e))) + { + return treelist; + } + + //树根 + if (list.Any(e => rootWhere(entity, e))) + { + treelist.AddRange(list.Where(e => rootWhere(entity, e))); + } + + //树叶 + foreach (var item in treelist) + { + if (list.Any(e => childsWhere(item, e))) + { + var nodedata = list.Where(e => childsWhere(item, e)).ToList(); + foreach (var child in nodedata) + { + //添加子集 + var data = list.ToTree(childsWhere, childsWhere, addChilds, child); + addChilds(child, data); + } + addChilds(item, nodedata); + } + } + + return treelist; + } + + /// + /// 添加子级列表到平级列表 + /// + /// 类型 + /// 平级列表 + /// 获得子级列表的方法 + /// 子级对象 + public static void AddListWithChilds(List list, Func> getChilds, T entity = default) + { + var childs = getChilds(entity); + if (childs != null && childs.Count > 0) + { + list.AddRange(childs); + foreach (var child in childs) + { + AddListWithChilds(list, getChilds, child); + } + } + } + + /// + /// 将树形列表转换为平级列表 + /// tree.ToPlainList((a) => a.Children); + /// + /// 类型 + /// 树形列表 + /// 获得子级列表的方法 + /// 数据对象 + /// + public static List ToPlainList(this List tree, Func> getChilds, T entity = default) + { + var list = new List(); + if (tree == null || tree.Count == 0) + { + return list; + } + + foreach (var item in tree) + { + list.Add(item); + AddListWithChilds(list, getChilds, item); + } + + return list; + } + + /// + /// 深度克隆 + /// + /// 类型 + /// 列表 + /// + public static List Clone(this List list) + { + return JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(list)); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Extensions/MethodInfoExtension.cs b/src/platform/ZhonTai.Common/Extensions/MethodInfoExtension.cs new file mode 100644 index 0000000..45b695f --- /dev/null +++ b/src/platform/ZhonTai.Common/Extensions/MethodInfoExtension.cs @@ -0,0 +1,29 @@ +using System.Reflection; + +namespace ZhonTai.Common.Extensions; + +public static class MethodInfoExtension +{ + public static bool HasAttribute(this MethodInfo method) + { + return method.GetCustomAttributes(typeof(T), false).FirstOrDefault() is T; + } + + public static T GetAttribute(this MethodInfo method) where T : Attribute + { + return method.GetCustomAttributes(typeof(T), false).FirstOrDefault() as T; + } + + public static bool IsAsync(this MethodInfo method) + { + return method.ReturnType == typeof(Task) + || (method.ReturnType.IsGenericType && method.ReturnType.GetGenericTypeDefinition() == typeof(Task<>)); + } + + internal static Type GetReturnType(this MethodInfo method) + { + var isAsync = method.IsAsync(); + var returnType = method.ReturnType; + return isAsync ? (returnType.GenericTypeArguments.FirstOrDefault() ?? typeof(void)) : returnType; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Extensions/StringExtension.cs b/src/platform/ZhonTai.Common/Extensions/StringExtension.cs new file mode 100644 index 0000000..91d3d72 --- /dev/null +++ b/src/platform/ZhonTai.Common/Extensions/StringExtension.cs @@ -0,0 +1,128 @@ +using System.Text; +using System.Text.RegularExpressions; +using ZhonTai.Common.Extensions; + +namespace ZhonTai; + +public static class StringExtension +{ + /// + /// 判断字符串是否为Null、空 + /// + /// + /// + public static bool IsNull(this string s) + { + return string.IsNullOrWhiteSpace(s); + } + + /// + /// 判断字符串是否不为Null、空 + /// + /// + /// + public static bool NotNull(this string s) + { + return !string.IsNullOrWhiteSpace(s); + } + + /// + /// 与字符串进行比较,忽略大小写 + /// + /// + /// + /// + public static bool EqualsIgnoreCase(this string s, string value) + { + return s.Equals(value, StringComparison.OrdinalIgnoreCase); + } + + /// + /// 首字母转小写 + /// + /// + /// + public static string FirstCharToLower(this string s) + { + if (string.IsNullOrEmpty(s)) + return s; + + string str = s.First().ToString().ToLower() + s.Substring(1); + return str; + } + + /// + /// 首字母转大写 + /// + /// + /// + public static string FirstCharToUpper(this string s) + { + if (string.IsNullOrEmpty(s)) + return s; + + string str = s.First().ToString().ToUpper() + s.Substring(1); + return str; + } + + /// + /// 转为Base64,UTF-8格式 + /// + /// + /// + public static string ToBase64(this string s) + { + return s.ToBase64(Encoding.UTF8); + } + + /// + /// 转为Base64 + /// + /// + /// 编码 + /// + public static string ToBase64(this string s, Encoding encoding) + { + if (s.IsNull()) + return string.Empty; + + var bytes = encoding.GetBytes(s); + return bytes.ToBase64(); + } + + public static string ToPath(this string s) + { + if (s.IsNull()) + return string.Empty; + + return s.Replace(@"\", "/"); + } + + public static string Format(this string str, object obj) + { + if (str.IsNull()) + { + return str; + } + string s = str; + if (obj.GetType().Name == "JObject") + { + foreach (var item in (Newtonsoft.Json.Linq.JObject)obj) + { + var k = item.Key.ToString(); + var v = item.Value.ToString(); + s = Regex.Replace(s, "\\{" + k + "\\}", v, RegexOptions.IgnoreCase); + } + } + else + { + foreach (System.Reflection.PropertyInfo p in obj.GetType().GetProperties()) + { + var xx = p.Name; + var yy = p.GetValue(obj).ToString(); + s = Regex.Replace(s, "\\{" + xx + "\\}", yy, RegexOptions.IgnoreCase); + } + } + return s; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Extensions/TypeExtensions.cs b/src/platform/ZhonTai.Common/Extensions/TypeExtensions.cs new file mode 100644 index 0000000..dd441bc --- /dev/null +++ b/src/platform/ZhonTai.Common/Extensions/TypeExtensions.cs @@ -0,0 +1,16 @@ +using System.ComponentModel; +using System.Reflection; + +namespace ZhonTai.Common.Extensions; + +/// +/// 类型扩展 +/// +public static class TypeExtensions +{ + public static string ToDescription(this Type type) + { + var desc = type?.GetCustomAttribute(false); + return desc?.Description; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Extensions/UtilConvertExtension.cs b/src/platform/ZhonTai.Common/Extensions/UtilConvertExtension.cs new file mode 100644 index 0000000..a9a1d80 --- /dev/null +++ b/src/platform/ZhonTai.Common/Extensions/UtilConvertExtension.cs @@ -0,0 +1,218 @@ +using System.Text; + +namespace ZhonTai.Common.Extensions; + +/// +/// 数据类型转换 +/// +public static class UtilConvertExtension +{ + public static int ToInt(this object s, bool round = false) + { + if (s == null || s == DBNull.Value) + return 0; + + if (s is bool b) + return b ? 1 : 0; + + if (int.TryParse(s.ToString(), out int result)) + return result; + + if (s.GetType().IsEnum) + { + return (int)s; + } + + var f = s.ToFloat(); + return round ? Convert.ToInt32(f) : (int)f; + } + + public static long ToLong(this object s) + { + if (s == null || s == DBNull.Value) + return 0L; + + long.TryParse(s.ToString(), out long result); + return result; + } + + public static double ToMoney(this object thisValue) + { + double reval; + if (thisValue != null && thisValue != DBNull.Value && double.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + return 0; + } + + public static double ToMoney(this object thisValue, double errorValue) + { + double reval; + if (thisValue != null && thisValue != DBNull.Value && double.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + return errorValue; + } + + public static string ToString(this object thisValue) + { + if (thisValue != null) return thisValue.ToString().Trim(); + return ""; + } + + public static string ToString(this object thisValue, string errorValue) + { + if (thisValue != null) return thisValue.ToString().Trim(); + return errorValue; + } + + public static float ToFloat(this object s, int? digits = null) + { + if (s == null || s == DBNull.Value) + return 0f; + + float.TryParse(s.ToString(), out float result); + + if (digits == null) + return result; + + return (float)Math.Round(result, digits.Value); + } + + public static double ToDouble(this object s, int? digits = null) + { + if (s == null || s == DBNull.Value) + return 0d; + + double.TryParse(s.ToString(), out double result); + + if (digits == null) + return result; + + return Math.Round(result, digits.Value); + } + + public static decimal ToDecimal(this object thisValue) + { + decimal reval; + if (thisValue != null && thisValue != DBNull.Value && decimal.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + return 0; + } + + public static decimal ToDecimal(this object thisValue, decimal errorValue) + { + decimal reval; + if (thisValue != null && thisValue != DBNull.Value && decimal.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + return errorValue; + } + + public static DateTime ToDateTime(this object thisValue) + { + DateTime reval = DateTime.MinValue; + if (thisValue != null && thisValue != DBNull.Value && DateTime.TryParse(thisValue.ToString(), out reval)) + { + reval = Convert.ToDateTime(thisValue); + } + return reval; + } + + public static DateTime ToDateTime(this object thisValue, DateTime errorValue) + { + DateTime reval; + if (thisValue != null && thisValue != DBNull.Value && DateTime.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + return errorValue; + } + + public static DateTime ToDateTime(this long milliseconds) + { + return Extensions.DateTimeExtension.TimestampStart.AddMilliseconds(milliseconds); + } + + public static bool ToBool(this object thisValue) + { + bool reval = false; + if (thisValue != null && thisValue != DBNull.Value && bool.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + return reval; + } + + public static byte ToByte(this object s) + { + if (s == null || s == DBNull.Value) + return 0; + + byte.TryParse(s.ToString(), out byte result); + return result; + } + + #region ==字节转换== + + /// + /// 转换为16进制 + /// + /// + /// 是否小写 + /// + public static string ToHex(this byte[] bytes, bool lowerCase = true) + { + if (bytes == null) + return null; + + var result = new StringBuilder(); + var format = lowerCase ? "x2" : "X2"; + for (var i = 0; i < bytes.Length; i++) + { + result.Append(bytes[i].ToString(format)); + } + + return result.ToString(); + } + + /// + /// 16进制转字节数组 + /// + /// + /// + public static byte[] HexToBytes(this string s) + { + if (s.IsNull()) + return null; + var bytes = new byte[s.Length / 2]; + + for (int x = 0; x < s.Length / 2; x++) + { + int i = (Convert.ToInt32(s.Substring(x * 2, 2), 16)); + bytes[x] = (byte)i; + } + + return bytes; + } + + /// + /// 转换为Base64 + /// + /// + /// + public static string ToBase64(this byte[] bytes) + { + if (bytes == null) + return null; + + return Convert.ToBase64String(bytes); + } + + #endregion ==字节转换== +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Files/FileInfo.cs b/src/platform/ZhonTai.Common/Files/FileInfo.cs new file mode 100644 index 0000000..9c9c5f4 --- /dev/null +++ b/src/platform/ZhonTai.Common/Files/FileInfo.cs @@ -0,0 +1,78 @@ +namespace ZhonTai.Common.Files; + +/// +/// 文件信息 +/// +public class FileInfo +{ + public FileInfo() + { + } + + /// + /// 初始化文件信息 + /// + /// 文件名称 + /// 大小 + public FileInfo(string fileName, long size = 0L) + { + FileName = fileName; + Size = new FileSize(size); + Extension = System.IO.Path.GetExtension(FileName)?.TrimStart('.'); + } + + /// + /// 上传路径 + /// + public string UploadPath { get; set; } + + /// + /// 请求路径 + /// + public string RequestPath { get; set; } + + /// + /// 相对路径 + /// + public string RelativePath { get; set; } + + /// + /// 文件名 + /// + public string FileName { get; set; } + + /// + /// 保存名 + /// + public string SaveName { get; set; } + + /// + /// 文件大小 + /// + public FileSize Size { get; set; } + + /// + /// 扩展名 + /// + public string Extension { get; set; } + + /// + /// 文件目录 + /// + public string FileDirectory => System.IO.Path.Combine(UploadPath, RelativePath).ToPath(); + + /// + /// 文件请求路径 + /// + public string FileRequestPath => System.IO.Path.Combine(RequestPath, RelativePath, SaveName).ToPath(); + + /// + /// 文件相对路径 + /// + public string FileRelativePath => System.IO.Path.Combine(RelativePath, SaveName).ToPath(); + + /// + /// 文件路径 + /// + public string FilePath => System.IO.Path.Combine(UploadPath, RelativePath, SaveName).ToPath(); +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Files/FileSize.cs b/src/platform/ZhonTai.Common/Files/FileSize.cs new file mode 100644 index 0000000..da0a85a --- /dev/null +++ b/src/platform/ZhonTai.Common/Files/FileSize.cs @@ -0,0 +1,80 @@ +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Common.Files; + +/// +/// 文件大小 +/// +public struct FileSize +{ + /// + /// 初始化文件大小 + /// + /// 文件大小 + /// 文件大小单位 + public FileSize(long size, FileSizeUnit unit = FileSizeUnit.Byte) + { + switch (unit) + { + case FileSizeUnit.K: + Size = size * 1024; break; + case FileSizeUnit.M: + Size = size * 1024 * 1024; break; + case FileSizeUnit.G: + Size = size * 1024 * 1024 * 1024; break; + default: + Size = size; break; + } + } + + /// + /// 文件字节长度 + /// + public long Size { get; } + + /// + /// 获取文件大小,单位:字节 + /// + public long GetSize() + { + return Size; + } + + /// + /// 获取文件大小,单位:K + /// + public double GetSizeByK() + { + return (Size / 1024.0).ToDouble(2); + } + + /// + /// 获取文件大小,单位:M + /// + public double GetSizeByM() + { + return (Size / 1024.0 / 1024.0).ToDouble(2); + } + + /// + /// 获取文件大小,单位:G + /// + public double GetSizeByG() + { + return (Size / 1024.0 / 1024.0 / 1024.0).ToDouble(2); + } + + /// + /// 输出描述 + /// + public override string ToString() + { + if (Size >= 1024 * 1024 * 1024) + return $"{GetSizeByG()} {FileSizeUnit.G.ToDescription()}"; + if (Size >= 1024 * 1024) + return $"{GetSizeByM()} {FileSizeUnit.M.ToDescription()}"; + if (Size >= 1024) + return $"{GetSizeByK()} {FileSizeUnit.K.ToDescription()}"; + return $"{Size} {FileSizeUnit.Byte.ToDescription()}"; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Files/FileSizeUnit.cs b/src/platform/ZhonTai.Common/Files/FileSizeUnit.cs new file mode 100644 index 0000000..8f6eae1 --- /dev/null +++ b/src/platform/ZhonTai.Common/Files/FileSizeUnit.cs @@ -0,0 +1,33 @@ +using System.ComponentModel; + +namespace ZhonTai.Common.Files; + +/// +/// 文件大小单位 +/// +public enum FileSizeUnit +{ + /// + /// 字节 + /// + [Description("B")] + Byte, + + /// + /// K字节 + /// + [Description("KB")] + K, + + /// + /// M字节 + /// + [Description("MB")] + M, + + /// + /// G字节 + /// + [Description("GB")] + G +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/AssemblyHelper.cs b/src/platform/ZhonTai.Common/Helpers/AssemblyHelper.cs new file mode 100644 index 0000000..66b9087 --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/AssemblyHelper.cs @@ -0,0 +1,83 @@ +using System.Reflection; + +namespace ZhonTai.Common.Helpers; + +/// +/// 程序集帮助类 +/// +public class AssemblyHelper +{ + /// + /// 根据程序集名称判断程序集是否存在 + /// + /// + /// + public static bool Exists(string assemblyName) + { + try + { + Assembly.Load(assemblyName); + return true; + } + catch (FileNotFoundException) + { + return false; + } + } + + /// + /// 根据程序集名称列表获取程序集 + /// + /// + /// + public static Assembly GetAssembly(string assemblyName) + { + Assembly assembly = null; + + if (assemblyName.IsNull()) + { + return assembly; + } + + try + { + assembly = Assembly.Load(assemblyName); + } + catch (FileNotFoundException ex) + { + Console.WriteLine("程序集不存在:" + ex.Message); + } + catch (Exception ex) + { + Console.WriteLine("加载程序集时出错:" + ex.Message); + } + + return assembly; + } + + /// + /// 根据程序集名称列表获取程序集列表 + /// + /// + /// + public static Assembly[] GetAssemblyList(string[] assemblyNames) + { + List assemblies = []; + + if (!(assemblyNames?.Length > 0)) + { + return [.. assemblies]; + } + + foreach (var assemblyName in assemblyNames) + { + var assembly = GetAssembly(assemblyName); + if (assembly != null) + { + assemblies.Add(assembly); + } + } + + return [.. assemblies]; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/ConfigHelper.cs b/src/platform/ZhonTai.Common/Helpers/ConfigHelper.cs new file mode 100644 index 0000000..8ab80bb --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/ConfigHelper.cs @@ -0,0 +1,81 @@ +using Microsoft.Extensions.Configuration; + +namespace ZhonTai.Common.Helpers; + +/// +/// 配置帮助类 +/// +public class ConfigHelper +{ + /* 使用热更新 + var uploadConfig = new ConfigHelper().Load("uploadconfig", _env.EnvironmentName, true); + services.Configure(uploadConfig); + + private readonly UploadConfig _uploadConfig; + public ImgController(IOptionsMonitor uploadConfig) + { + _uploadConfig = uploadConfig.CurrentValue; + } + */ + + /// + /// 加载配置文件 + /// + /// 文件名称 + /// 环境名称 + /// 可选 + /// 自动更新 + /// + public static IConfiguration Load(string fileName, string environmentName = "", bool optional = true, bool reloadOnChange = false) + { + var filePath = Path.Combine(AppContext.BaseDirectory, "Configs"); + if (!Directory.Exists(filePath)) + return null; + + var builder = new ConfigurationBuilder() + .SetBasePath(filePath) + .AddJsonFile(fileName + ".json", optional, reloadOnChange); + + if (environmentName.NotNull()) + { + builder.AddJsonFile(fileName + "." + environmentName + ".json", optional: optional, reloadOnChange: reloadOnChange); + } + + return builder.Build(); + } + + /// + /// 获得配置信息 + /// + /// 配置信息 + /// 文件名称 + /// 环境名称 + /// 可选 + /// 自动更新 + /// + public static T Get(string fileName, string environmentName = "", bool optional = true, bool reloadOnChange = false) + { + var configuration = Load(fileName, environmentName, optional, reloadOnChange); + if (configuration == null) + return default; + + return configuration.Get(); + } + + /// + /// 绑定实例配置信息 + /// + /// 文件名称 + /// 实例配置 + /// 环境名称 + /// 可选 + /// 自动更新 + public static void Bind(string fileName, object instance, string environmentName = "", bool optional = true, bool reloadOnChange = false) + { + var configuration = Load(fileName, environmentName, optional, reloadOnChange); + if (configuration == null || instance == null) + return; + + configuration.Bind(instance); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/ConsoleHelper.cs b/src/platform/ZhonTai.Common/Helpers/ConsoleHelper.cs new file mode 100644 index 0000000..6bb1f2f --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/ConsoleHelper.cs @@ -0,0 +1,52 @@ +namespace ZhonTai.Common.Helpers; + +public static class ConsoleHelper +{ + private static void WriteColorLine(string str, ConsoleColor color) + { + ConsoleColor currentForeColor = Console.ForegroundColor; + Console.ForegroundColor = color; + Console.WriteLine(str); + Console.ForegroundColor = currentForeColor; + } + + /// + /// 打印错误信息 + /// + /// 待打印的字符串 + /// 想要打印的颜色 + public static void WriteErrorLine(this string str, ConsoleColor color = ConsoleColor.Red) + { + WriteColorLine(str, color); + } + + /// + /// 打印警告信息 + /// + /// 待打印的字符串 + /// 想要打印的颜色 + public static void WriteWarningLine(this string str, ConsoleColor color = ConsoleColor.Yellow) + { + WriteColorLine(str, color); + } + + /// + /// 打印正常信息 + /// + /// 待打印的字符串 + /// 想要打印的颜色 + public static void WriteInfoLine(this string str, ConsoleColor color = ConsoleColor.White) + { + WriteColorLine(str, color); + } + + /// + /// 打印成功的信息 + /// + /// 待打印的字符串 + /// 想要打印的颜色 + public static void WriteSuccessLine(this string str, ConsoleColor color = ConsoleColor.Green) + { + WriteColorLine(str, color); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/DESEncrypt.cs b/src/platform/ZhonTai.Common/Helpers/DESEncrypt.cs new file mode 100644 index 0000000..d3b4635 --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/DESEncrypt.cs @@ -0,0 +1,127 @@ +using System.Security.Cryptography; +using System.Text; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Common.Helpers; + +/// +/// Des加解密 +/// +public class DesEncrypt +{ + private const string Key = "desenc1!"; + + /// + /// DES+Base64加密 + /// 采用ECB、PKCS7 + /// + /// 加密字符串 + /// 秘钥 + /// + public static string Encrypt(string encryptString, string key = null) + { + return Encrypt(encryptString, key, false, true); + } + + /// + /// DES+Base64解密 + /// 采用ECB、PKCS7 + /// + /// 解密字符串 + /// 秘钥 + /// + public static string Decrypt(string decryptString, string key = null) + { + return Decrypt(decryptString, key, false); + } + + /// + /// DES+16进制加密 + /// 采用ECB、PKCS7 + /// + /// 加密字符串 + /// 秘钥 + /// 是否小写 + /// + public static string Encrypt4Hex(string encryptString, string key = null, bool lowerCase = false) + { + return Encrypt(encryptString, key, true, lowerCase); + } + + /// + /// DES+16进制解密 + /// 采用ECB、PKCS7 + /// + /// 解密字符串 + /// 秘钥 + /// + public static string Decrypt4Hex(string decryptString, string key = null) + { + return Decrypt(decryptString, key, true); + } + + /// + /// DES加密 + /// + /// + /// + /// + /// + /// + private static string Encrypt(string encryptString, string key, bool hex, bool lowerCase = false) + { + if (encryptString.IsNull()) + return null; + if (key.IsNull()) + key = Key; + if (key.Length < 8) + throw new ArgumentException("秘钥长度为8位", nameof(key)); + + var keyBytes = Encoding.UTF8.GetBytes(key[..8]); + var inputByteArray = Encoding.UTF8.GetBytes(encryptString); + + var des = DES.Create(); + des.Mode = CipherMode.ECB; + des.Key = keyBytes; + des.Padding = PaddingMode.PKCS7; + + using var stream = new MemoryStream(); + var cStream = new CryptoStream(stream, des.CreateEncryptor(), CryptoStreamMode.Write); + cStream.Write(inputByteArray, 0, inputByteArray.Length); + cStream.FlushFinalBlock(); + + var bytes = stream.ToArray(); + return hex ? bytes.ToHex(lowerCase) : bytes.ToBase64(); + } + + /// + /// DES解密 + /// + /// + /// + /// + /// + private static string Decrypt(string decryptString, string key, bool hex) + { + if (decryptString.IsNull()) + return null; + if (key.IsNull()) + key = Key; + if (key.Length < 8) + throw new ArgumentException("秘钥长度为8位", nameof(key)); + + var keyBytes = Encoding.UTF8.GetBytes(key[..8]); + var inputByteArray = hex ? decryptString.HexToBytes() : Convert.FromBase64String(decryptString); + + var des = DES.Create(); + des.Mode = CipherMode.ECB; + des.Key = keyBytes; + des.Padding = PaddingMode.PKCS7; + + using var mStream = new MemoryStream(); + var cStream = new CryptoStream(mStream, des.CreateDecryptor(), CryptoStreamMode.Write); + cStream.Write(inputByteArray, 0, inputByteArray.Length); + cStream.FlushFinalBlock(); + return Encoding.UTF8.GetString(mStream.ToArray()); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/DataMaskHelper.cs b/src/platform/ZhonTai.Common/Helpers/DataMaskHelper.cs new file mode 100644 index 0000000..defc560 --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/DataMaskHelper.cs @@ -0,0 +1,62 @@ +using System.Text.RegularExpressions; + +namespace ZhonTai.Common.Helpers; + +/// +/// 数据脱敏 +/// +public partial class DataMaskHelper +{ + public static readonly string PhoneMaskRegex = @"(\d{3})\d{4}(\d{4})"; + + public static readonly string EmailMaskRegex = "(?<=.{2})[^@]+(?=.{2}@)"; + + public static readonly string IPMaskRegex = @"(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})"; + + /// + /// 手机号脱敏 + /// + /// + /// + /// + public static string PhoneMask(string input, string mask = "****") + { + if (input.IsNull()) { + return input; + } + + return Regex.Replace(input, PhoneMaskRegex, match => $"{match.Groups[1]?.Value}{mask}{match.Groups[2]?.Value}"); + } + + /// + /// 邮箱脱敏 + /// + /// + /// + /// + public static string EmailMask(string input, string mask = "****") + { + if (input.IsNull()) + { + return input; + } + + return Regex.Replace(input, EmailMaskRegex, mask); + } + + /// + /// IP脱敏 + /// + /// + /// + /// + public static string IPMask(string input, string mask = "*") + { + if (input.IsNull()) + { + return input; + } + + return Regex.Replace(input, IPMaskRegex, match => $"{match.Groups[1]?.Value}.{mask}.{mask}.{match.Groups[4]?.Value}"); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/EntityHelper.cs b/src/platform/ZhonTai.Common/Helpers/EntityHelper.cs new file mode 100644 index 0000000..e64ebba --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/EntityHelper.cs @@ -0,0 +1,36 @@ +using System.Reflection; + +namespace ZhonTai.Common.Helpers; + +/// +/// 实体帮助类 +/// +public class EntityHelper +{ + public static List GetPropertyNamesByAttribute(bool inherit = false) where T : class where A : Attribute + { + Type classType = typeof(T); + + if (!classType.IsClass && !classType.IsAbstract) + { + throw new ArgumentException($"{classType.FullName} is not an class type."); + } + + var propertyNames = classType.GetProperties() + .Where(p => p.GetCustomAttribute(inherit) != null) + .Select(p => p.Name) + .ToList(); + + return propertyNames; + } + + public static bool IsImplementInterface(Type type, Type interfaceType) + { + if (type == null || interfaceType == null || !interfaceType.IsInterface) + { + return false; + } + + return interfaceType.IsAssignableFrom(type); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/FileHelper.cs b/src/platform/ZhonTai.Common/Helpers/FileHelper.cs new file mode 100644 index 0000000..e4c14b5 --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/FileHelper.cs @@ -0,0 +1,115 @@ +using System.Text; + +namespace ZhonTai.Common.Helpers; + +public class FileHelper : IDisposable +{ + private bool _alreadyDispose = false; + + public FileHelper() + { + } + + ~FileHelper() + { + Dispose(); + } + + protected virtual void Dispose(bool isDisposing) + { + if (_alreadyDispose) return; + _alreadyDispose = true; + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #region 写文件 + + /// + /// 写文件 + /// + /// 文件路径 + /// 文件内容 + public static void WriteFile(string Path, string Strings) + { + if (!File.Exists(Path)) + { + File.Create(Path).Close(); + } + var streamWriter = new StreamWriter(Path, false); + streamWriter.Write(Strings); + streamWriter.Close(); + streamWriter.Dispose(); + } + + /// + /// 写文件 + /// + /// 文件路径 + /// 文件内容 + /// 编码格式 + public static void WriteFile(string Path, string Strings, Encoding encode) + { + if (!File.Exists(Path)) + { + File.Create(Path).Close(); + } + var streamWriter = new StreamWriter(Path, false, encode); + streamWriter.Write(Strings); + streamWriter.Close(); + streamWriter.Dispose(); + } + + #endregion 写文件 + + #region 读文件 + + /// + /// 读文件 + /// + /// 文件路径 + /// + public static string ReadFile(string Path) + { + string s; + if (!File.Exists(Path)) + s = "不存在相应的目录"; + else + { + var streamReader = new StreamReader(Path); + s = streamReader.ReadToEnd(); + streamReader.Close(); + streamReader.Dispose(); + } + + return s; + } + + /// + /// 读文件 + /// + /// 文件路径 + /// 编码格式 + /// + public static string ReadFile(string Path, Encoding encode) + { + string s; + if (!File.Exists(Path)) + s = "不存在相应的目录"; + else + { + var streamReader = new StreamReader(Path, encode); + s = streamReader.ReadToEnd(); + streamReader.Close(); + streamReader.Dispose(); + } + + return s; + } + + #endregion 读文件 +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/IPHelper.cs b/src/platform/ZhonTai.Common/Helpers/IPHelper.cs new file mode 100644 index 0000000..cb21272 --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/IPHelper.cs @@ -0,0 +1,50 @@ +using Microsoft.AspNetCore.Http; +using System.Text.RegularExpressions; + +namespace ZhonTai.Common.Helpers; + +public class IPHelper +{ + /// + /// 是否为ip + /// + /// + /// + public static bool IsIP(string ip) + { + return Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$"); + } + + /// + /// 获得IP地址 + /// + /// + /// + public static string GetIP(HttpRequest request) + { + if (request == null) + { + return ""; + } + + string ip = request.Headers["X-Real-IP"].FirstOrDefault(); + if (ip.IsNull()) + { + ip = request.Headers["X-Forwarded-For"].FirstOrDefault(); + } + if (ip.IsNull()) + { + ip = request.HttpContext?.Connection?.RemoteIpAddress?.ToString(); + } + if (ip.IsNull()) + { + ip = ip.Split(":")?.FirstOrDefault(); + } + if (ip.IsNull() || !IsIP(ip)) + { + ip = "127.0.0.1"; + } + + return ip; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/InterfaceHelper.cs b/src/platform/ZhonTai.Common/Helpers/InterfaceHelper.cs new file mode 100644 index 0000000..b55e9ab --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/InterfaceHelper.cs @@ -0,0 +1,25 @@ +using System.Reflection; + +namespace ZhonTai.Common.Helpers; + +/// +/// 接口帮助类 +/// +public class InterfaceHelper +{ + public static string[] GetPropertyNames() where T : class + { + Type interfaceType = typeof(T); + + if (!interfaceType.IsInterface) + { + throw new ArgumentException($"{interfaceType.FullName} is not an interface type."); + } + + PropertyInfo[] properties = interfaceType.GetProperties(); + + string[] propertyNames = properties.Select(p => p.Name).ToArray(); + + return propertyNames; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/JsonHelper.cs b/src/platform/ZhonTai.Common/Helpers/JsonHelper.cs new file mode 100644 index 0000000..167f259 --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/JsonHelper.cs @@ -0,0 +1,49 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +namespace ZhonTai.Common.Helpers; + +/// +/// Json帮助类 +/// +public class JsonHelper +{ + private static readonly JsonSerializerSettings _jsonSerializerSettings = new() + { + ContractResolver = new CamelCasePropertyNamesContractResolver(), + DateFormatString = "yyyy-MM-dd HH:mm:ss.FFFFFFFK" + }; + + /// + /// 序列化 + /// + /// + /// + /// + public static string Serialize(T obj) + { + return JsonConvert.SerializeObject(obj, typeof(T), _jsonSerializerSettings); + } + + /// + /// 反序列化 + /// + /// + /// + /// + public static T Deserialize(string json) + { + return JsonConvert.DeserializeObject(json, _jsonSerializerSettings); + } + + /// + /// 反序列化 + /// + /// json文本 + /// 类型 + /// + public static object Deserialize(string json, Type type) + { + return JsonConvert.DeserializeObject(json, type, _jsonSerializerSettings); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/MD5Encrypt.cs b/src/platform/ZhonTai.Common/Helpers/MD5Encrypt.cs new file mode 100644 index 0000000..1628bb8 --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/MD5Encrypt.cs @@ -0,0 +1,76 @@ +using System.Security.Cryptography; +using System.Text; +using ZhonTai.Common.Extensions; + +namespace ZhonTai.Common.Helpers; + +/// +/// MD5加密 +/// +public class MD5Encrypt +{ + /// + /// 16位MD5加密 + /// + /// + /// + /// + public static string Encrypt16(string password, bool lowerCase = false) + { + if (password.IsNull()) + return null; + + using var md5 = MD5.Create(); + return md5.ComputeHash(Encoding.UTF8.GetBytes(password)).ToHex(lowerCase); + } + + /// + /// 32位MD5加密 + /// + /// + /// + /// + public static string Encrypt32(string password = "", bool lowerCase = false) + { + if (password.IsNull()) + return null; + + using var md5 = MD5.Create(); + string pwd = string.Empty; + byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(password)); + var format = lowerCase ? "x2" : "X2"; + foreach (var item in s) + { + pwd = string.Concat(pwd, item.ToString(format)); + } + return pwd; + } + + /// + /// 64位MD5加密 + /// + /// + /// + public static string Encrypt64(string password) + { + if (password.IsNull()) + return null; + + using var md5 = MD5.Create(); + byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(password)); + return s.ToBase64(); + } + + public static string GetHash(Stream stream) + { + StringBuilder sb = new(); + using var md5 = MD5.Create(); + byte[] hashBytes = md5.ComputeHash(stream); + foreach (byte bt in hashBytes) + { + sb.Append(bt.ToString("x2")); + } + + return sb.ToString(); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/PasswordHelper.cs b/src/platform/ZhonTai.Common/Helpers/PasswordHelper.cs new file mode 100644 index 0000000..c8fc2df --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/PasswordHelper.cs @@ -0,0 +1,28 @@ +using System.Text.RegularExpressions; + +namespace ZhonTai.Common.Helpers; + +/// +/// 密码帮助类 +/// +public partial class PasswordHelper +{ + + // 验证密码的正则表达式 + public static readonly string PasswordRegex = @"^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d!@#$%^&.*]{6,16}$"; + + /// + /// 验证密码是否符合要求 + /// + /// + /// + public static bool Verify(string input) + { + if (input.IsNull()) + { + return false; + } + + return Regex.IsMatch(input, PasswordRegex); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/SM2Encryption.cs b/src/platform/ZhonTai.Common/Helpers/SM2Encryption.cs new file mode 100644 index 0000000..cc33428 --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/SM2Encryption.cs @@ -0,0 +1,144 @@ +using Org.BouncyCastle.Asn1.X9; +using Org.BouncyCastle.Crypto; +using Org.BouncyCastle.Crypto.Engines; +using Org.BouncyCastle.Crypto.Generators; +using Org.BouncyCastle.Crypto.Parameters; +using Org.BouncyCastle.Math; +using Org.BouncyCastle.Math.EC; +using Org.BouncyCastle.Security; +using Org.BouncyCastle.Utilities.Encoders; +using System.Text; + +namespace ZhonTai.Common.Helpers; +/// +/// 加密工具类,提供基于SM2算法的加密和解密功能。 +/// +public class SM2Encryption +{ + /// + /// 获取SM2曲线参数 + /// + private static readonly X9ECParameters CurveParams = ECNamedCurveTable.GetByName("sm2p256v1"); + /// + /// 随机数 + /// + private static readonly SecureRandom secureRandom = new SecureRandom(); + /// + /// 生成SM2密钥对,密钥对使用Base64进行编码 + /// + /// 输出的私钥(Base64编码) + /// 输出的公钥(Base64编码) + public static void GenerateSM2KeyPair(out string privateKey, out string publicKey) + { + try + { + // 创建SM2密钥对生成器的参数 + ECKeyGenerationParameters keyGenParams = new ECKeyGenerationParameters(new ECDomainParameters(CurveParams), secureRandom); + + // 创建并初始化SM2密钥对生成器 + ECKeyPairGenerator generator = new ECKeyPairGenerator(); + generator.Init(keyGenParams); + + // 生成密钥对 + AsymmetricCipherKeyPair keyPair = generator.GenerateKeyPair(); + + // 获取私钥参数 + ECPrivateKeyParameters privateKeyParams = (ECPrivateKeyParameters)keyPair.Private; + // 私钥:将私钥值转换为无符号字节数组并编码为Base64字符串 + privateKey = Base64.ToBase64String(privateKeyParams.D.ToByteArrayUnsigned()); + + // 获取公钥参数 + ECPublicKeyParameters publicKeyParams = (ECPublicKeyParameters)keyPair.Public; + // 公钥:将公钥点编码为压缩格式(如果需要)并编码为Base64字符串 + // 注意:SM2公钥通常使用未压缩格式,这里使用未压缩格式 + publicKey = Base64.ToBase64String(publicKeyParams.Q.GetEncoded(false)); // false 表示未压缩格式 + } + catch (Exception ex) + { + // 处理异常,这里可以记录日志或抛出更具体的异常 + throw new Exception("Error generating SM2 key pair.", ex); + } + } + + /// + /// SM2 公钥加密 + /// + /// 待加密的消息 + /// SM2公钥(Base64编码) + /// 加密后的密文(Base64编码) + public static string Encrypt(string message, string publicKey) + { + try + { + // 解码公钥 + byte[] keyBytes = Base64.Decode(publicKey); + + ECPoint q = CurveParams.Curve.DecodePoint(keyBytes); + //创建公钥参数 + ECDomainParameters domainParams = new ECDomainParameters(CurveParams); + ECPublicKeyParameters pubKeyParams = new ECPublicKeyParameters("EC", q, domainParams); + + // 创建SM2加密引擎并初始化 + SM2Engine sm2Engine = new SM2Engine(); + sm2Engine.Init(true, new ParametersWithRandom(pubKeyParams,secureRandom)); + + // 将原始数据转换为字节数组 + byte[] dataBytes = Encoding.UTF8.GetBytes(message); + + // 执行加密操作 + // 注意:SM2加密通常用于加密固定长度的数据块(例如ECCiphertext),这里我们假设消息长度适合直接加密 + byte[] encryptedData = sm2Engine.ProcessBlock(dataBytes, 0, dataBytes.Length); + + // 将加密结果转换为Base64字符串 + return Base64.ToBase64String(encryptedData); + } + catch (Exception ex) + { + // 处理异常,例如公钥解码失败或加密操作出错 + throw new Exception("Error encrypting message with SM2 public key.", ex); + } + } + + /// + /// 使用SM2私钥解密消息 + /// + /// 待解密的密文(Base64编码) + /// SM2私钥(Base64编码) + /// 解密后的明文 + public static string Decrypt(string ciphertext, string privateKey) + { + try + { + // 解码私钥 + byte[] keyBytes = Base64.Decode(privateKey); + BigInteger d = new BigInteger(1, keyBytes); + + // 获取SM2曲线参数 + ECDomainParameters domainParams = new ECDomainParameters(CurveParams); + + // 创建私钥参数 + ECPrivateKeyParameters privateKeyParams = new ECPrivateKeyParameters(d, domainParams); + + // 创建SM2解密引擎并初始化 + SM2Engine sm2Engine = new SM2Engine(); + sm2Engine.Init(false, privateKeyParams); + + // 解码密文 + byte[] encryptedData = Base64.Decode(ciphertext); + + // 执行解密操作 + byte[] decryptedData = sm2Engine.ProcessBlock(encryptedData, 0, encryptedData.Length); + + // 将解密结果转换为字符串 + return Encoding.UTF8.GetString(decryptedData); + } + catch (Exception ex) + { + // 处理异常,例如私钥解码失败、密文解码失败或解密操作出错 + throw new Exception("Error decrypting ciphertext with SM2 private key.", ex); + } + } +} + + + diff --git a/src/platform/ZhonTai.Common/Helpers/SM3Encryption.cs b/src/platform/ZhonTai.Common/Helpers/SM3Encryption.cs new file mode 100644 index 0000000..ef24ffe --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/SM3Encryption.cs @@ -0,0 +1,89 @@ +using Org.BouncyCastle.Crypto.Digests; +using Org.BouncyCastle.Crypto.Macs; +using Org.BouncyCastle.Crypto.Parameters; +using Org.BouncyCastle.Utilities.Encoders; +using System.Text; + +namespace ZhonTai.Common.Helpers; + +/// +/// 提供基于SM3算法的哈希计算和HMAC功能。 +/// +public static class SM3Encryption +{ + /// + /// 计算给定数据的SM3哈希值(二进制表示)。 + /// + /// 要计算哈希的数据(字符串形式)。 + /// SM3哈希值的二进制数组。 + public static byte[] ComputeSM3Hash(string data) + { + var msg = Encoding.UTF8.GetBytes(data); // 使用UTF8编码将字符串转换为字节数组 + var sm3 = new SM3Digest(); + sm3.BlockUpdate(msg, 0, msg.Length); + var md = new byte[sm3.GetDigestSize()]; // SM3算法产生的哈希值大小 + sm3.DoFinal(md, 0); + return md; + } + + /// + /// 计算给定数据的SM3哈希值(十六进制表示)。 + /// + /// 要计算哈希的数据(字符串形式)。 + /// SM3哈希值的十六进制字符串。 + public static string ComputeSM3HashHex(string data) + { + return Hex.ToHexString(ComputeSM3Hash(data)); + } + /// + /// 计算给定数据的SM3哈希值(十六进制表示)。 + /// + /// 要计算哈希的数据(字符串形式)。 + /// SM3哈希值的十六进制字符串。 + public static string ComputeSM3HashBase64(string data) + { + return Base64.ToBase64String(ComputeSM3Hash(data)); + } + + /// + /// 计算给定数据和密钥的HMAC-SM3值(二进制表示)。 + /// + /// 要计算HMAC的数据(字符串形式)。 + /// HMAC密钥(字符串形式)。 + /// HMAC-SM3值的二进制数组。 + public static byte[] ComputeHMacSM3(string data, string key) + { + var msg = Encoding.UTF8.GetBytes(data); + var keyBytes = Encoding.UTF8.GetBytes(key); + + var keyParameter = new KeyParameter(keyBytes); + var sm3 = new SM3Digest(); + var mac = new HMac(sm3); // 带密钥的杂凑算法 + mac.Init(keyParameter); + mac.BlockUpdate(msg, 0, msg.Length); + var result = new byte[mac.GetMacSize()]; + mac.DoFinal(result, 0); + return result; + } + + /// + /// 计算给定数据和密钥的HMAC-SM3值(十六进制表示)。 + /// + /// 要计算HMAC的数据(字符串形式)。 + /// HMAC密钥(字符串形式)。 + /// HMAC-SM3值的十六进制字符串。 + public static string ComputeHMACSM3Hex(string data, string key) + { + return Hex.ToHexString(ComputeHMacSM3(data, key)); + } + /// + /// 计算给定数据和密钥的HMAC-SM3值(Base64表示)。 + /// + /// 要计算HMAC的数据(字符串形式)。 + /// HMAC密钥(字符串形式)。 + /// HMAC-SM3值的Base64字符串。 + public static string ComputeHMACSM3Base64(string data, string key) + { + return Base64.ToBase64String(ComputeHMacSM3(data, key)); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/SM4Encryption.cs b/src/platform/ZhonTai.Common/Helpers/SM4Encryption.cs new file mode 100644 index 0000000..98453ad --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/SM4Encryption.cs @@ -0,0 +1,275 @@ +using Org.BouncyCastle.Crypto; +using Org.BouncyCastle.Crypto.Engines; +using Org.BouncyCastle.Crypto.Modes; +using Org.BouncyCastle.Crypto.Paddings; +using Org.BouncyCastle.Crypto.Parameters; +using Org.BouncyCastle.Security; +using Org.BouncyCastle.Utilities.Encoders; +using System.Security.Cryptography; +using System.Text; + +namespace ZhonTai.Common.Helpers; + +/// +/// 加密工具类,提供基于SM4算法的加密和解密功能。 +/// +public static class SM4Encryption +{ + + /// + /// 使用SM4算法对指定明文进行加密。 + /// + /// 待加密的明文。 + /// 用于加密的密钥。 + /// 初始化向量,对于ECB模式可以传递null。 + /// 加密模式,默认为"ECB"。 + /// 是否返回十六进制格式的密文,默认为false(返回Base64格式)。 + /// 加密后的密文,格式为十六进制或Base64。 + /// 当msg或key为空时抛出。 + /// 当mode不被支持时抛出。 + /// 当加密过程中发生错误时抛出。 + public static string Encrypt(string msg, string key, string iv, string mode = "ECB", bool isHex = false) + { + // 加密操作 + // 验证输入参数 + if (string.IsNullOrEmpty(msg)) + throw new ArgumentNullException(nameof(msg), "Message cannot be null or empty."); + if (key == null || key.Length == 0) + throw new ArgumentNullException(nameof(key), "Key cannot be null or empty."); + if (iv == null && mode != "ECB") + throw new ArgumentNullException(nameof(iv), "IV is required for modes other than ECB."); + byte[] plainTextData = Encoding.UTF8.GetBytes(msg); + var cipher = new SM4Engine(); + byte[] nonce = new byte[16]; + Array.Copy(Encoding.UTF8.GetBytes(iv), 0, nonce, 0, Math.Min(iv.Length, nonce.Length)); + PaddedBufferedBlockCipher cipherMode; + switch (mode) + { + case "ECB": + cipherMode = new PaddedBufferedBlockCipher(new EcbBlockCipher(cipher), new Pkcs7Padding()); + break; + case "CBC": + cipherMode = new PaddedBufferedBlockCipher(new CbcBlockCipher(cipher), new Pkcs7Padding()); + break; + // ... [其他模式的情况] ... + default: + throw new ArgumentException("Unsupported mode: " + mode); + } + + byte[] keyBytes = Encoding.UTF8.GetBytes(key); // 假设的密钥,实际中应该使用安全的方式生成和存储 + KeyParameter keyParam = ParameterUtilities.CreateKeyParameter("SM4", keyBytes); + ICipherParameters keyParamIV = new ParametersWithIV(keyParam, nonce); + + cipherMode.Init(true, mode == "ECB" ? keyParam : keyParamIV); + + byte[] cipherTextData = new byte[cipherMode.GetOutputSize(plainTextData.Length)]; + int length1 = cipherMode.ProcessBytes(plainTextData, 0, plainTextData.Length, cipherTextData, 0); + cipherMode.DoFinal(cipherTextData, length1); + return isHex == true ? Hex.ToHexString(cipherTextData) : Convert.ToBase64String(cipherTextData); + } + /// + /// 使用SM4算法对指定密文进行解密。 + /// + /// 待解密的密文,可以是十六进制或Base64格式。 + /// 用于解密的密钥。 + /// 初始化向量,对于ECB模式可以传递null。 + /// 加密模式,用于确定解密时使用的模式,默认为"ECB"。 + /// 是否输入密文是十六进制格式,默认为false(表示Base64格式)。 + /// 解密后的明文。 + /// 当key或encryptMsg为空时抛出。 + /// 当mode不被支持或iv对于非ECB模式为空时抛出。 + /// 当解密过程中发生错误时抛出。 + public static string Decrypt(string encryptMsg, string key, string iv, string mode = "ECB", bool isHex = false) + { + // 加密操作 + // 验证输入参数 + if (string.IsNullOrEmpty(encryptMsg)) + throw new ArgumentNullException(nameof(encryptMsg), "Message cannot be null or empty."); + if (key == null || key.Length == 0) + throw new ArgumentNullException(nameof(key), "Key cannot be null or empty."); + if (iv == null && mode != "ECB") + throw new ArgumentNullException(nameof(iv), "IV is required for modes other than ECB."); + byte[] cipherTextData; + if (isHex) + { + cipherTextData = Hex.Decode(encryptMsg); + } + else + { + cipherTextData = Convert.FromBase64String(encryptMsg); + } + var cipher = new SM4Engine(); + byte[] nonce = new byte[16]; + Array.Copy(Encoding.UTF8.GetBytes(iv), 0, nonce, 0, Math.Min(iv.Length, nonce.Length)); + PaddedBufferedBlockCipher cipherMode; + switch (mode) + { + case "ECB": + cipherMode = new PaddedBufferedBlockCipher(new EcbBlockCipher(cipher), new Pkcs7Padding()); + break; + case "CBC": + cipherMode = new PaddedBufferedBlockCipher(new CbcBlockCipher(cipher), new Pkcs7Padding()); + break; + // ... [其他模式的情况] ... + default: + throw new ArgumentException("Unsupported mode: " + mode); + } + + byte[] keyBytes = Encoding.UTF8.GetBytes(key); // 假设的密钥,实际中应该使用安全的方式生成和存储 + KeyParameter keyParam = ParameterUtilities.CreateKeyParameter("SM4", keyBytes); + ICipherParameters keyParamIV = new ParametersWithIV(keyParam, nonce); + // 解密操作 + + cipherMode.Init(false, mode == "ECB" ? keyParam : keyParamIV); + + byte[] decryptedData = new byte[cipherMode.GetOutputSize(cipherTextData.Length)]; + int length2 = cipherMode.ProcessBytes(cipherTextData, 0, cipherTextData.Length, decryptedData, 0); + cipherMode.DoFinal(decryptedData, length2); + + // 打印解密后的明文 + string decryptedMsg = Encoding.UTF8.GetString(decryptedData); + return decryptedMsg; + } + + /// + /// 使用SM4算法对指定明文进行加密。 + /// + /// 待加密的明文。 + /// 用于加密的密钥(字节数组形式)。 + /// 初始化向量(字节数组形式),对于ECB模式可以传递null。 + /// 加密模式,默认为"ECB"。 + /// 是否返回十六进制格式的密文,默认为false(返回Base64格式)。 + /// 加密后的密文,格式为十六进制或Base64。 + /// 当msg或key为空时抛出。 + /// 当mode不被支持时抛出。 + /// 当加密过程中发生错误时抛出。 + public static string Encrypt(string msg, byte[] key, byte[] iv, string mode = "ECB", bool isHex = false) + { + // 验证输入参数 + if (string.IsNullOrEmpty(msg)) + throw new ArgumentNullException(nameof(msg), "Message cannot be null or empty."); + if (key == null || key.Length == 0) + throw new ArgumentNullException(nameof(key), "Key cannot be null or empty."); + if (iv == null && mode != "ECB") + throw new ArgumentNullException(nameof(iv), "IV is required for modes other than ECB."); + + // 将明文转换为字节数组 + byte[] plainTextData = Encoding.UTF8.GetBytes(msg); + + var cipher = new SM4Engine(); + PaddedBufferedBlockCipher cipherMode; + + switch (mode) + { + case "ECB": + cipherMode = new PaddedBufferedBlockCipher(new EcbBlockCipher(cipher), new Pkcs7Padding()); + break; + case "CBC": + cipherMode = new PaddedBufferedBlockCipher(new CbcBlockCipher(cipher), new Pkcs7Padding()); + break; + // ... [其他模式的情况] ... + default: + throw new ArgumentException("Unsupported mode: " + mode); + } + + // 创建密钥参数 + KeyParameter keyParam = ParameterUtilities.CreateKeyParameter("SM4", key); + ICipherParameters parameters = mode == "ECB" ? keyParam : new ParametersWithIV(keyParam, iv); + + // 初始化加密器 + cipherMode.Init(true, parameters); + + // 准备输出缓冲区 + byte[] cipherTextData = new byte[cipherMode.GetOutputSize(plainTextData.Length)]; + + try + { + // 执行加密操作 + int length1 = cipherMode.ProcessBytes(plainTextData, 0, plainTextData.Length, cipherTextData, 0); + cipherMode.DoFinal(cipherTextData, length1); + + // 根据需求返回加密后的数据格式(十六进制或Base64) + return isHex ? Hex.ToHexString(cipherTextData) : Convert.ToBase64String(cipherTextData); + } + catch (Exception ex) + { + // 处理加密过程中发生的异常 + throw new CryptographicException("Encryption failed.", ex); + } + } + /// + /// 使用SM4算法对指定密文进行解密。 + /// + /// 待解密的密文,可以是十六进制或Base64格式。 + /// 用于解密的密钥(字节数组形式)。 + /// 初始化向量(字节数组形式),对于ECB模式可以传递null。 + /// 加密模式,用于确定解密时使用的模式,默认为"ECB"。 + /// 是否输入密文是十六进制格式,默认为false(表示Base64格式)。 + /// 解密后的明文。 + /// 当key或encryptMsg为空时抛出。 + /// 当mode不被支持或iv对于非ECB模式为空时抛出。 + /// 当解密过程中发生错误时抛出。 + public static string Decrypt(string encryptMsg, byte[] key, byte[] iv, string mode = "ECB", bool isHex = false) + { + // 验证输入参数 + if (string.IsNullOrEmpty(encryptMsg)) + throw new ArgumentNullException(nameof(encryptMsg), "Message cannot be null or empty."); + if (key == null || key.Length == 0) + throw new ArgumentNullException(nameof(key), "Key cannot be null or empty."); + if (iv == null && mode != "ECB") + throw new ArgumentNullException(nameof(iv), "IV is required for modes other than ECB."); + + // 转换密文为字节数组 + byte[] cipherTextData; + if (isHex) + { + cipherTextData = Hex.Decode(encryptMsg); + } + else + { + cipherTextData = Convert.FromBase64String(encryptMsg); + } + + var cipher = new SM4Engine(); + PaddedBufferedBlockCipher cipherMode; + + switch (mode) + { + case "ECB": + cipherMode = new PaddedBufferedBlockCipher(new EcbBlockCipher(cipher), new Pkcs7Padding()); + break; + case "CBC": + cipherMode = new PaddedBufferedBlockCipher(new CbcBlockCipher(cipher), new Pkcs7Padding()); + break; + // ... [其他模式的情况] ... + default: + throw new ArgumentException("Unsupported mode: " + mode); + } + + // 创建密钥参数 + KeyParameter keyParam = ParameterUtilities.CreateKeyParameter("SM4", key); + ICipherParameters parameters = mode == "ECB" ? keyParam : new ParametersWithIV(keyParam, iv); + + // 初始化解密器 + cipherMode.Init(false, parameters); + + // 准备输出缓冲区 + byte[] decryptedData = new byte[cipherMode.GetOutputSize(cipherTextData.Length)]; + + try + { + // 执行解密操作 + int length1 = cipherMode.ProcessBytes(cipherTextData, 0, cipherTextData.Length, decryptedData, 0); + cipherMode.DoFinal(decryptedData, length1); + + // 转换解密后的字节数组为字符串 + string decryptedMsg = Encoding.UTF8.GetString(decryptedData); + return decryptedMsg; + } + catch (Exception ex) + { + // 处理解密过程中发生的异常 + throw new CryptographicException("Decryption failed.", ex); + } + } +} diff --git a/src/platform/ZhonTai.Common/Helpers/StringHelper.cs b/src/platform/ZhonTai.Common/Helpers/StringHelper.cs new file mode 100644 index 0000000..a75bf1d --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/StringHelper.cs @@ -0,0 +1,68 @@ +using System.Text; +using System.Text.RegularExpressions; + +namespace ZhonTai.Common.Helpers; + +/// +/// 字符串帮助类 +/// +public class StringHelper +{ + private static readonly string _chars = "0123456789"; + private static readonly char[] _constant = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; + + /// + /// 生成随机字符串,默认32位 + /// + /// 随机数长度 + /// + public static string GenerateRandom(int length = 32) + { + var newRandom = new StringBuilder(); + var rd = new Random(); + for (int i = 0; i < length; i++) + { + newRandom.Append(_constant[rd.Next(_constant.Length)]); + } + return newRandom.ToString(); + } + + /// + /// 生成随机6位数 + /// + /// + /// + public static string GenerateRandomNumber(int length = 6) + { + var random = new Random(); + return new string(Enumerable.Repeat(_chars, length).Select(s => s[random.Next(s.Length)]).ToArray()); + } + + public static string Format(string str, object obj) + { + if (str.IsNull()) + { + return str; + } + string s = str; + if (obj.GetType().Name == "JObject") + { + foreach (var item in (Newtonsoft.Json.Linq.JObject)obj) + { + var k = item.Key.ToString(); + var v = item.Value.ToString(); + s = Regex.Replace(s, "\\{" + k + "\\}", v, RegexOptions.IgnoreCase); + } + } + else + { + foreach (System.Reflection.PropertyInfo p in obj.GetType().GetProperties()) + { + var xx = p.Name; + var yy = p.GetValue(obj).ToString(); + s = Regex.Replace(s, "\\{" + xx + "\\}", yy, RegexOptions.IgnoreCase); + } + } + return s; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/Helpers/SummaryHelper.cs b/src/platform/ZhonTai.Common/Helpers/SummaryHelper.cs new file mode 100644 index 0000000..3daf063 --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/SummaryHelper.cs @@ -0,0 +1,100 @@ +using System.Text.RegularExpressions; +using System.Xml; +using System.Xml.XPath; + +namespace ZhonTai.Common.Helpers; + +/// +/// 文档说明帮助类 +/// +public class SummaryHelper +{ + static int _CodeBaseNotSupportedException = 0; + + /// + /// 获得枚举类型说明列表 + /// + /// + /// + public static Dictionary GetEnumSummaryList(Type type) + { + return LocalGetComment(type, 0); + + Dictionary LocalGetComment(Type localType, int level) + { + if (localType.Assembly.IsDynamic) return null; + //动态生成的程序集,访问不了 Assembly.Location/Assembly.CodeBase + var regex = new Regex(@"\.(dll|exe)", RegexOptions.IgnoreCase); + var xmlPath = regex.Replace(localType.Assembly.Location, ".xml"); + if (File.Exists(xmlPath) == false) + { + if (_CodeBaseNotSupportedException == 1) return null; + try + { + if (string.IsNullOrEmpty(localType.Assembly.Location)) return null; + } + catch (NotSupportedException) //NotSupportedException: CodeBase is not supported on assemblies loaded from a single-file bundle. + { + Interlocked.Exchange(ref _CodeBaseNotSupportedException, 1); + return null; + } + + xmlPath = regex.Replace(localType.Assembly.Location, ".xml"); + if (xmlPath.StartsWith("file:///") && Uri.TryCreate(xmlPath, UriKind.Absolute, out var tryuri)) + xmlPath = tryuri.LocalPath; + if (File.Exists(xmlPath) == false) return null; + } + + var dic = new Dictionary(); + StringReader sReader = null; + try + { + sReader = new StringReader(File.ReadAllText(xmlPath)); + } + catch + { + return dic; + } + using (var xmlReader = XmlReader.Create(sReader)) + { + XPathDocument xpath = null; + try + { + xpath = new XPathDocument(xmlReader); + } + catch + { + return null; + } + var xmlNav = xpath.CreateNavigator(); + + var className = (localType.IsNested ? (localType.DeclaringType != null && localType.DeclaringType.DeclaringType != null && + localType.DeclaringType.DeclaringType.FullName.NotNull() ? $"{localType.DeclaringType.DeclaringType.FullName}.{localType.DeclaringType.Name}.{localType.Name}" : + $"{localType.Namespace}.{localType.DeclaringType.Name}.{localType.Name}") : + $"{localType.Namespace}.{localType.Name}").Trim('.'); + + var node = xmlNav.SelectSingleNode($"/doc/members/member[@name='T:{className}']/summary"); + if (node != null) + { + var comment = node.InnerXml.Trim(' ', '\r', '\n', '\t'); + if (string.IsNullOrEmpty(comment) == false) dic.Add("", comment); //class注释 + } + + if (localType.IsEnum) + { + var fields = Enum.GetValues(localType).Cast().Select(x => x.ToString()).ToList(); + foreach (var field in fields) + { + node = xmlNav.SelectSingleNode($"/doc/members/member[@name='F:{className}.{field}']/summary"); + if (node != null) + { + var comment = node.InnerXml.Trim(' ', '\r', '\n', '\t'); + if (string.IsNullOrEmpty(comment) == false) dic.Add(field, comment); //field注释 + } + } + } + } + return dic; + } + } +} diff --git a/src/platform/ZhonTai.Common/Helpers/UnicodeHelper.cs b/src/platform/ZhonTai.Common/Helpers/UnicodeHelper.cs new file mode 100644 index 0000000..d3246f7 --- /dev/null +++ b/src/platform/ZhonTai.Common/Helpers/UnicodeHelper.cs @@ -0,0 +1,37 @@ +using System.Text; +using System.Text.RegularExpressions; + +namespace ZhonTai.Common.Helpers; + +public static class UnicodeHelper +{ + /// + /// 字符串转Unicode码 + /// + /// The to unicode. + /// Value. + public static string StringToUnicode(string value) + { + byte[] bytes = Encoding.Unicode.GetBytes(value); + var stringBuilder = new StringBuilder(); + for (int i = 0; i < bytes.Length; i += 2) + { + // 取两个字符,每个字符都是右对齐。 + stringBuilder.AppendFormat("u{0}{1}", bytes[i + 1].ToString("x").PadLeft(2, '0'), bytes[i].ToString("x").PadLeft(2, '0')); + } + return stringBuilder.ToString(); + } + + /// + /// Unicode转字符串 + /// + /// The to string. + /// Unicode. + public static string UnicodeToString(string unicode) + { + unicode = unicode.Replace("%", "\\"); + + return new Regex(@"\\u([0-9A-F]{4})", RegexOptions.IgnoreCase | RegexOptions.Compiled).Replace( + unicode, x => string.Empty + Convert.ToChar(Convert.ToUInt16(x.Result("$1"), 16))); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.Common/ZhonTai.Common.csproj b/src/platform/ZhonTai.Common/ZhonTai.Common.csproj new file mode 100644 index 0000000..de57dd0 --- /dev/null +++ b/src/platform/ZhonTai.Common/ZhonTai.Common.csproj @@ -0,0 +1,26 @@ + + + 中台通用库 + Common;Utils; + + + + 1701;1702;1591;8632 + + + + + + + + + + + + + + + + + + diff --git a/src/platform/ZhonTai.Common/key.snk b/src/platform/ZhonTai.Common/key.snk new file mode 100644 index 0000000..5f909c0 Binary files /dev/null and b/src/platform/ZhonTai.Common/key.snk differ diff --git a/src/platform/ZhonTai.DynamicApi/AppConsts.cs b/src/platform/ZhonTai.DynamicApi/AppConsts.cs new file mode 100644 index 0000000..913bc29 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/AppConsts.cs @@ -0,0 +1,59 @@ +using System.Reflection; +using ZhonTai.DynamicApi.Enums; + +namespace ZhonTai.DynamicApi; + +public static class AppConsts +{ + public static string DefaultHttpVerb { get; set; } + + public static string DefaultAreaName { get; set; } + + public static string DefaultApiPreFix { get; set; } + + public static List ControllerPostfixes { get; set; } + public static List ActionPostfixes { get; set; } + + public static List FormBodyBindingIgnoredTypes { get; set; } + + public static Dictionary HttpVerbs { get; set; } + + public static NamingConventionEnum NamingConvention { get; set; } = NamingConventionEnum.KebabCase; + + public static Func GetRestFulControllerName { get; set; } + + public static Func GetRestFulActionName { get; set; } + + public static Dictionary AssemblyDynamicApiOptions { get; set; } + + public static bool FormatResult { get; set; } = true; + + public static Type FormatResultType { get; set; } = FormatResultContext.FormatResultType; + + static AppConsts() + { + HttpVerbs=new Dictionary() + { + ["add"] = "POST", + ["create"] = "POST", + ["insert"] = "POST", + ["submit"] = "POST", + ["post"] = "POST", + + ["get"] = "GET", + ["find"] = "GET", + ["fetch"] = "GET", + ["query"] = "GET", + + ["update"] = "PUT", + ["change"] = "PUT", + ["put"] = "PUT", + ["batch"] = "PUT", + + ["delete"] = "DELETE", + ["soft"] = "DELETE", + ["remove"] = "DELETE", + ["clear"] = "DELETE", + }; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/AssemblyDynamicApiOptions.cs b/src/platform/ZhonTai.DynamicApi/AssemblyDynamicApiOptions.cs new file mode 100644 index 0000000..282fa4b --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/AssemblyDynamicApiOptions.cs @@ -0,0 +1,32 @@ +namespace ZhonTai.DynamicApi; + +/// +/// Specifies the dynamic webapi options for the assembly. +/// +public class AssemblyDynamicApiOptions +{ + /// + /// Routing prefix for all APIs + /// + /// Default value is null. + /// + public string ApiPrefix { get; } + + /// + /// API HTTP Verb. + /// + /// Default value is null. + /// + public string HttpVerb { get; } + + /// + /// + /// + /// Routing prefix for all APIs + /// API HTTP Verb. + public AssemblyDynamicApiOptions(string apiPrefix = null, string httpVerb = null) + { + ApiPrefix = apiPrefix; + HttpVerb = httpVerb; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/Attributes/DynamicApiAttribute.cs b/src/platform/ZhonTai.DynamicApi/Attributes/DynamicApiAttribute.cs new file mode 100644 index 0000000..35a4963 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/Attributes/DynamicApiAttribute.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using ZhonTai.DynamicApi.Helpers; + +namespace ZhonTai.DynamicApi.Attributes; + +[Serializable] +[AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class)] +public class DynamicApiAttribute : Attribute +{ + /// + /// Equivalent to AreaName + /// + public string Area { get; set; } + + /// + /// 分组名称列表 + /// + public string[] GroupNames { get; set; } + + internal static bool IsExplicitlyEnabledFor(Type type) + { + var remoteServiceAttr = type.GetTypeInfo().GetSingleAttributeOrNull(); + return remoteServiceAttr != null; + } + + internal static bool IsExplicitlyDisabledFor(Type type) + { + var remoteServiceAttr = type.GetTypeInfo().GetSingleAttributeOrNull(); + return remoteServiceAttr != null; + } + + internal static bool IsMetadataExplicitlyEnabledFor(Type type) + { + var remoteServiceAttr = type.GetTypeInfo().GetSingleAttributeOrNull(); + return remoteServiceAttr != null; + } + + internal static bool IsMetadataExplicitlyDisabledFor(Type type) + { + var remoteServiceAttr = type.GetTypeInfo().GetSingleAttributeOrNull(); + return remoteServiceAttr != null; + } + + internal static bool IsMetadataExplicitlyDisabledFor(MethodInfo method) + { + var remoteServiceAttr = method.GetSingleAttributeOrNull(); + return remoteServiceAttr != null; + } + + internal static bool IsMetadataExplicitlyEnabledFor(MethodInfo method) + { + var remoteServiceAttr = method.GetSingleAttributeOrNull(); + return remoteServiceAttr != null; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/Attributes/FormatResultAttribute.cs b/src/platform/ZhonTai.DynamicApi/Attributes/FormatResultAttribute.cs new file mode 100644 index 0000000..74f68c9 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/Attributes/FormatResultAttribute.cs @@ -0,0 +1,31 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; + +namespace ZhonTai.DynamicApi.Attributes; + +[Serializable] +[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)] +public class FormatResultAttribute : ProducesResponseTypeAttribute +{ + public FormatResultAttribute(int statusCode) : base(statusCode) + { + } + + public FormatResultAttribute(Type type) : base(type, StatusCodes.Status200OK) + { + FormatType(type); + } + + public FormatResultAttribute(Type type, int statusCode) : base(type, statusCode) + { + FormatType(type); + } + + private void FormatType(Type type) + { + if (type != null && type != typeof(void)) + { + Type = AppConsts.FormatResultType.MakeGenericType(type); + } + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/Attributes/NonDynamicApiAttribute.cs b/src/platform/ZhonTai.DynamicApi/Attributes/NonDynamicApiAttribute.cs new file mode 100644 index 0000000..deb77a5 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/Attributes/NonDynamicApiAttribute.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.DynamicApi.Attributes; + +[Serializable] +[AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class | AttributeTargets.Method)] +public class NonDynamicApiAttribute:Attribute +{ + +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/Attributes/NonDynamicMethodAttribute.cs b/src/platform/ZhonTai.DynamicApi/Attributes/NonDynamicMethodAttribute.cs new file mode 100644 index 0000000..e45eb3d --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/Attributes/NonDynamicMethodAttribute.cs @@ -0,0 +1,8 @@ +namespace ZhonTai.DynamicApi.Attributes; + +[Serializable] +[AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class | AttributeTargets.Method)] +public class NonDynamicMethodAttribute : Attribute +{ + +} diff --git a/src/platform/ZhonTai.DynamicApi/Attributes/NonFormatResultAttribute.cs b/src/platform/ZhonTai.DynamicApi/Attributes/NonFormatResultAttribute.cs new file mode 100644 index 0000000..ff139be --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/Attributes/NonFormatResultAttribute.cs @@ -0,0 +1,9 @@ +namespace ZhonTai.DynamicApi.Attributes; + +/// +/// 不格式化结果数据 +/// +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] +public class NonFormatResultAttribute : Attribute +{ +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/Attributes/OrderAttribute.cs b/src/platform/ZhonTai.DynamicApi/Attributes/OrderAttribute.cs new file mode 100644 index 0000000..3a143b1 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/Attributes/OrderAttribute.cs @@ -0,0 +1,20 @@ +namespace ZhonTai.DynamicApi.Attributes; + +[Serializable] +[AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class | AttributeTargets.Method)] +public class OrderAttribute : Attribute +{ + /// + /// 排序值 + /// + public int Value { get; set; } = 0; + + /// + /// 排序设置 + /// + /// 排序值 + public OrderAttribute(int value) + { + Value = value; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/DynamicApiControllerFeatureProvider.cs b/src/platform/ZhonTai.DynamicApi/DynamicApiControllerFeatureProvider.cs new file mode 100644 index 0000000..2593287 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/DynamicApiControllerFeatureProvider.cs @@ -0,0 +1,19 @@ +using System.Reflection; +using Microsoft.AspNetCore.Mvc.Controllers; + +namespace ZhonTai.DynamicApi; + +public class DynamicApiControllerFeatureProvider: ControllerFeatureProvider +{ + private ISelectController _selectController; + + public DynamicApiControllerFeatureProvider(ISelectController selectController) + { + _selectController = selectController; + } + + protected override bool IsController(TypeInfo typeInfo) + { + return _selectController.IsController(typeInfo); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/DynamicApiConvention.cs b/src/platform/ZhonTai.DynamicApi/DynamicApiConvention.cs new file mode 100644 index 0000000..806ffdc --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/DynamicApiConvention.cs @@ -0,0 +1,470 @@ +using System.Reflection; +using System.Text.RegularExpressions; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.ActionConstraints; +using Microsoft.AspNetCore.Mvc.ApplicationModels; +using Microsoft.AspNetCore.Mvc.ModelBinding; +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.DynamicApi.Enums; +using ZhonTai.DynamicApi.Helpers; + +namespace ZhonTai.DynamicApi; + +public class DynamicApiConvention : IApplicationModelConvention +{ + private readonly ISelectController _selectController; + private readonly IActionRouteFactory _actionRouteFactory; + + public DynamicApiConvention(ISelectController selectController, IActionRouteFactory actionRouteFactory) + { + _selectController = selectController; + _actionRouteFactory = actionRouteFactory; + } + + public string GetSeparateWords(string value, NamingConventionEnum namingConvention = NamingConventionEnum.KebabCase) + { + if (string.IsNullOrWhiteSpace(value)) + return value; + + var separator = "-"; + if (namingConvention == NamingConventionEnum.SnakeCase) + { + separator = "_"; + } + else if (namingConvention == NamingConventionEnum.ExtensionCase) + { + separator = "."; + } + + return Regex.Replace( + value, + "(?(type.GetTypeInfo()); + + if (!(_selectController is DefaultSelectController) && _selectController.IsController(type)) + { + controller.ControllerName = controller.ControllerName.RemovePostFix(AppConsts.ControllerPostfixes.ToArray()); + if (AppConsts.NamingConvention == NamingConventionEnum.Custom) + { + controller.ControllerName = GetRestFulControllerName(controller.ControllerName); + } + else + { + controller.ControllerName = GetFormatName(controller.ControllerName, AppConsts.NamingConvention); + } + + ConfigureDynamicApi(controller, DynamicApiAttr); + } + else + { + if (typeof(IDynamicApi).GetTypeInfo().IsAssignableFrom(type)) + { + controller.ControllerName = controller.ControllerName.RemovePostFix(AppConsts.ControllerPostfixes.ToArray()); + if (AppConsts.NamingConvention == NamingConventionEnum.Custom) + { + controller.ControllerName = GetRestFulControllerName(controller.ControllerName); + } + else + { + controller.ControllerName = GetFormatName(controller.ControllerName, AppConsts.NamingConvention); + } + ConfigureArea(controller, DynamicApiAttr); + ConfigureDynamicApi(controller, DynamicApiAttr); + } + else + { + if (DynamicApiAttr != null) + { + ConfigureArea(controller, DynamicApiAttr); + ConfigureDynamicApi(controller, DynamicApiAttr); + } + } + } + } + } + + private void ConfigureArea(ControllerModel controller, DynamicApiAttribute attr) + { + if (!controller.RouteValues.ContainsKey("area")) + { + if (attr == null) + { + throw new ArgumentException(nameof(attr)); + } + + if (!string.IsNullOrEmpty(attr.Area)) + { + controller.RouteValues["area"] = attr.Area; + } + else if (!string.IsNullOrEmpty(AppConsts.DefaultAreaName)) + { + controller.RouteValues["area"] = AppConsts.DefaultAreaName; + } + } + + } + + private void ConfigureDynamicApi(ControllerModel controller, DynamicApiAttribute controllerAttr) + { + ConfigureApiExplorer(controller); + ConfigureSelector(controller, controllerAttr); + ConfigureParameters(controller); + if (AppConsts.FormatResult) + { + ConfigureFormatResult(controller); + } + } + + private void ConfigureFormatResult(ControllerModel controller) + { + foreach (var action in controller.Actions) + { + if (!CheckNoMapMethod(action) && !CheckNoFormatResultMethod(action)) + { + var returnType = action.ActionMethod.GetReturnType(); + + if (returnType == typeof(void)) continue; + action.Filters.Add(new FormatResultAttribute(returnType)); + } + } + } + + private void ConfigureParameters(ControllerModel controller) + { + foreach (var action in controller.Actions) + { + if (!CheckNoMapMethod(action)) + foreach (var para in action.Parameters) + { + if (para.BindingInfo != null) + { + continue; + } + + if (!TypeHelper.IsPrimitiveExtendedIncludingNullable(para.ParameterInfo.ParameterType)) + { + if (CanUseFormBodyBinding(action, para)) + { + para.BindingInfo = BindingInfo.GetBindingInfo(new[] { new FromBodyAttribute() }); + } + } + } + } + } + + + private bool CanUseFormBodyBinding(ActionModel action, ParameterModel parameter) + { + if (AppConsts.FormBodyBindingIgnoredTypes.Any(t => t.IsAssignableFrom(parameter.ParameterInfo.ParameterType))) + { + return false; + } + + foreach (var selector in action.Selectors) + { + if (selector.ActionConstraints == null) + { + continue; + } + + foreach (var actionConstraint in selector.ActionConstraints) + { + + var httpMethodActionConstraint = actionConstraint as HttpMethodActionConstraint; + if (httpMethodActionConstraint == null) + { + continue; + } + + if (httpMethodActionConstraint.HttpMethods.All(hm => hm.IsIn("GET", "DELETE", "TRACE", "HEAD"))) + { + return false; + } + } + } + + return true; + } + + + #region ConfigureApiExplorer + + private void ConfigureApiExplorer(ControllerModel controller) + { + if (controller.ApiExplorer.GroupName.IsNullOrEmpty()) + { + controller.ApiExplorer.GroupName = controller.ControllerName; + } + + if (controller.ApiExplorer.IsVisible == null) + { + controller.ApiExplorer.IsVisible = true; + } + + foreach (var action in controller.Actions) + { + if (!CheckNoMapMethod(action)) + ConfigureApiExplorer(action); + } + } + + private void ConfigureApiExplorer(ActionModel action) + { + if (action.ApiExplorer.IsVisible == null) + { + action.ApiExplorer.IsVisible = true; + } + } + + #endregion + /// + /// //不映射指定的方法 + /// + /// + /// + private bool CheckNoMapMethod(ActionModel action) + { + bool isExist = false; + var noMapMethod = ReflectionHelper.GetSingleAttributeOrDefault(action.ActionMethod); + + if (noMapMethod != null) + { + action.ApiExplorer.IsVisible = false;//对应的Api不映射 + isExist = true; + } + + return isExist; + } + + /// + /// 不格式化结果数据 + /// + /// + /// + private bool CheckNoFormatResultMethod(ActionModel action) + { + bool isExist = false; + var nonFormatResult = ReflectionHelper.GetSingleAttributeOrDefault(action.ActionMethod); + + if (nonFormatResult != null) + { + isExist = true; + } + + return isExist; + } + private void ConfigureSelector(ControllerModel controller, DynamicApiAttribute controllerAttr) + { + + if (controller.Selectors.Any(selector => selector.AttributeRouteModel != null)) + { + return; + } + + var areaName = string.Empty; + + if (controllerAttr != null) + { + areaName = controllerAttr.Area; + } + + foreach (var action in controller.Actions) + { + if (!CheckNoMapMethod(action)) + ConfigureSelector(areaName, controller.ControllerName, action); + } + } + + private void ConfigureSelector(string areaName, string controllerName, ActionModel action) + { + + var nonAttr = ReflectionHelper.GetSingleAttributeOrDefault(action.ActionMethod); + + if (nonAttr != null) + { + return; + } + + if (action.Selectors.IsNullOrEmpty() || action.Selectors.Any(a => a.ActionConstraints.IsNullOrEmpty())) + { + if (!CheckNoMapMethod(action)) + AddAppServiceSelector(areaName, controllerName, action); + } + else + { + NormalizeSelectorRoutes(areaName, controllerName, action); + } + } + + private void AddAppServiceSelector(string areaName, string controllerName, ActionModel action) + { + + var verb = GetHttpVerb(action); + if (AppConsts.NamingConvention == NamingConventionEnum.Custom) + { + action.ActionName = GetRestFulActionName(action.ActionName); + } + else + { + action.ActionName = GetFormatName(action.ActionName, AppConsts.NamingConvention); + } + + var appServiceSelectorModel = action.Selectors[0]; + + if (appServiceSelectorModel.AttributeRouteModel == null) + { + appServiceSelectorModel.AttributeRouteModel = CreateActionRouteModel(areaName, controllerName, action); + } + + if (!appServiceSelectorModel.ActionConstraints.Any()) + { + appServiceSelectorModel.ActionConstraints.Add(new HttpMethodActionConstraint(new[] { verb })); + switch (verb) + { + case "GET": + appServiceSelectorModel.EndpointMetadata.Add(new HttpGetAttribute()); + break; + case "POST": + appServiceSelectorModel.EndpointMetadata.Add(new HttpPostAttribute()); + break; + case "PUT": + appServiceSelectorModel.EndpointMetadata.Add(new HttpPutAttribute()); + break; + case "DELETE": + appServiceSelectorModel.EndpointMetadata.Add(new HttpDeleteAttribute()); + break; + default: + throw new Exception($"Unsupported http verb: {verb}."); + } + } + + + } + + + + /// + /// Processing action name + /// + /// + /// + private static string GetRestFulActionName(string actionName) + { + // custom process action name + var appConstsActionName = AppConsts.GetRestFulActionName?.Invoke(actionName); + if (appConstsActionName != null) + { + return appConstsActionName; + } + + // default process action name. + + // Remove Postfix + actionName = actionName.RemovePostFix(AppConsts.ActionPostfixes.ToArray()); + + // Remove Prefix + var verbKey = actionName.GetPascalOrCamelCaseFirstWord().ToLower(); + if (AppConsts.HttpVerbs.ContainsKey(verbKey)) + { + if (actionName.Length == verbKey.Length) + { + return ""; + } + else + { + return actionName.Substring(verbKey.Length); + } + } + else + { + return actionName; + } + } + + private static string GetRestFulControllerName(string controllerName) + { + // custom process action name + var appConstsControllerName = AppConsts.GetRestFulControllerName?.Invoke(controllerName); + if (appConstsControllerName != null) + { + return appConstsControllerName; + } + else + { + return controllerName; + } + } + + private void NormalizeSelectorRoutes(string areaName, string controllerName, ActionModel action) + { + if (AppConsts.NamingConvention == NamingConventionEnum.Custom) + { + action.ActionName = GetRestFulActionName(action.ActionName); + } + else + { + action.ActionName = GetFormatName(action.ActionName, AppConsts.NamingConvention); + } + + foreach (var selector in action.Selectors) + { + selector.AttributeRouteModel = selector.AttributeRouteModel == null ? + CreateActionRouteModel(areaName, controllerName, action) : + AttributeRouteModel.CombineAttributeRouteModel(CreateActionRouteModel(areaName, controllerName, action), selector.AttributeRouteModel); + } + } + + private static string GetHttpVerb(ActionModel action) + { + var getValueSuccess = AppConsts.AssemblyDynamicApiOptions + .TryGetValue(action.Controller.ControllerType.Assembly, out AssemblyDynamicApiOptions assemblyDynamicApiOptions); + if (getValueSuccess && !string.IsNullOrWhiteSpace(assemblyDynamicApiOptions?.HttpVerb)) + { + return assemblyDynamicApiOptions.HttpVerb; + } + + + var verbKey = action.ActionName.GetPascalOrCamelCaseFirstWord().ToLower(); + + var verb = AppConsts.HttpVerbs.ContainsKey(verbKey) ? AppConsts.HttpVerbs[verbKey] : AppConsts.DefaultHttpVerb; + return verb; + } + + private AttributeRouteModel CreateActionRouteModel(string areaName, string controllerName, ActionModel action) + { + var route = _actionRouteFactory.CreateActionRouteModel(areaName, controllerName, action); + + return new AttributeRouteModel(new RouteAttribute(route)); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/DynamicApiOptions.cs b/src/platform/ZhonTai.DynamicApi/DynamicApiOptions.cs new file mode 100644 index 0000000..c2226d2 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/DynamicApiOptions.cs @@ -0,0 +1,147 @@ +using System.Reflection; +using Microsoft.AspNetCore.Http; +using ZhonTai.DynamicApi.Enums; + +namespace ZhonTai.DynamicApi; + +public class DynamicApiOptions +{ + public DynamicApiOptions() + { + RemoveControllerPostfixes = new List() { "AppService", "ApplicationService", "ApiController", "Controller", "Services", "Service" }; + RemoveActionPostfixes = new List() { "Async" }; + FormBodyBindingIgnoredTypes = new List() { typeof(IFormFile) }; + DefaultHttpVerb = "POST"; + DefaultApiPrefix = "api"; + AssemblyDynamicApiOptions = new Dictionary(); + } + + + /// + /// API HTTP Verb. + /// + /// Default value is "POST". + /// + public string DefaultHttpVerb { get; set; } + + public string DefaultAreaName { get; set; } + + /// + /// Routing prefix for all APIs + /// + /// Default value is "api". + /// + public string DefaultApiPrefix { get; set; } + + /// + /// Remove the dynamic API class(Controller) name postfix. + /// + /// Default value is {"AppService", "ApplicationService"}. + /// + public List RemoveControllerPostfixes { get; set; } + + /// + /// Remove the dynamic API class's method(Action) postfix. + /// + /// Default value is {"Async"}. + /// + public List RemoveActionPostfixes { get; set; } + + /// + /// Ignore MVC Form Binding types. + /// + public List FormBodyBindingIgnoredTypes { get; set; } + + /// + /// Naming convention + /// + public NamingConventionEnum NamingConvention { get; set; } = NamingConventionEnum.KebabCase; + + /// + /// The method that processing the name of the action. + /// + public Func GetRestFulActionName { get; set; } + + /// + /// The method that processing the name of the controller. + /// + public Func GetRestFulControllerName { get; set; } + + /// + /// Specifies the dynamic webapi options for the assembly. + /// + public Dictionary AssemblyDynamicApiOptions { get; } + + public ISelectController SelectController { get; set; } = new DefaultSelectController(); + public IActionRouteFactory ActionRouteFactory { get; set; } = new DefaultActionRouteFactory(); + + public bool FormatResult { get; set; } = true; + + public Type FormatResultType { get; set; } = FormatResultContext.FormatResultType; + + /// + /// Verify that all configurations are valid + /// + public void Valid() + { + if (string.IsNullOrEmpty(DefaultHttpVerb)) + { + throw new ArgumentException($"{nameof(DefaultHttpVerb)} can not be empty."); + } + + if (string.IsNullOrEmpty(DefaultAreaName)) + { + DefaultAreaName = string.Empty; + } + + if (string.IsNullOrEmpty(DefaultApiPrefix)) + { + DefaultApiPrefix = string.Empty; + } + + if (FormBodyBindingIgnoredTypes == null) + { + throw new ArgumentException($"{nameof(FormBodyBindingIgnoredTypes)} can not be null."); + } + + if (RemoveControllerPostfixes == null) + { + throw new ArgumentException($"{nameof(RemoveControllerPostfixes)} can not be null."); + } + } + + /// + /// Add the dynamic webapi options for the assembly. + /// + /// + /// + /// + public void AddAssemblyOptions(Assembly assembly, string apiPreFix = null, string httpVerb = null) + { + if (assembly == null) + { + throw new ArgumentException($"{nameof(assembly)} can not be null."); + } + + this.AssemblyDynamicApiOptions[assembly] = new AssemblyDynamicApiOptions(apiPreFix, httpVerb); + } + + /// + /// Add the dynamic webapi options for the assemblies. + /// + /// + /// + /// + public void AddAssemblyOptions(Assembly[] assemblies, string apiPreFix = null, string httpVerb = null) + { + if (assemblies == null) + { + throw new ArgumentException($"{nameof(assemblies)} can not be null."); + } + + foreach (var assembly in assemblies) + { + AddAssemblyOptions(assembly, apiPreFix, httpVerb); + } + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/DynamicApiServiceExtensions.cs b/src/platform/ZhonTai.DynamicApi/DynamicApiServiceExtensions.cs new file mode 100644 index 0000000..ff5a2b8 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/DynamicApiServiceExtensions.cs @@ -0,0 +1,137 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.ApplicationParts; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using ZhonTai.DynamicApi.Helpers; + +namespace ZhonTai.DynamicApi; + +/// +/// Add Dynamic WebApi +/// +public static class DynamicApiServiceExtensions +{ + /// + /// Use Dynamic WebApi to Configure + /// + /// + /// + /// + public static IApplicationBuilder UseDynamicApi(this IApplicationBuilder application, Action optionsAction) + { + var options = new DynamicApiOptions(); + + optionsAction?.Invoke(application.ApplicationServices,options); + + options.Valid(); + + AppConsts.DefaultAreaName = options.DefaultAreaName; + AppConsts.DefaultHttpVerb = options.DefaultHttpVerb; + AppConsts.DefaultApiPreFix = options.DefaultApiPrefix; + AppConsts.ControllerPostfixes = options.RemoveControllerPostfixes; + AppConsts.ActionPostfixes = options.RemoveActionPostfixes; + AppConsts.FormBodyBindingIgnoredTypes = options.FormBodyBindingIgnoredTypes; + AppConsts.NamingConvention = options.NamingConvention; + AppConsts.GetRestFulControllerName = options.GetRestFulControllerName; + AppConsts.GetRestFulActionName = options.GetRestFulActionName; + AppConsts.AssemblyDynamicApiOptions = options.AssemblyDynamicApiOptions; + + var partManager = application.ApplicationServices.GetRequiredService(); + + // Add a custom controller checker + var featureProviders = application.ApplicationServices.GetRequiredService(); + partManager.FeatureProviders.Add(featureProviders); + + foreach(var assembly in options.AssemblyDynamicApiOptions.Keys) + { + var partFactory = ApplicationPartFactory.GetApplicationPartFactory(assembly); + + foreach(var part in partFactory.GetApplicationParts(assembly)) + { + partManager.ApplicationParts.Add(part); + } + } + + + var mvcOptions = application.ApplicationServices.GetRequiredService>(); + var DynamicApiConvention = application.ApplicationServices.GetRequiredService(); + + mvcOptions.Value.Conventions.Add(DynamicApiConvention); + + return application; + } + + public static IServiceCollection AddDynamicApiCore(this IServiceCollection services) + where TSelectController: class,ISelectController + where TActionRouteFactory: class, IActionRouteFactory + { + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + return services; + } + + /// + /// Add Dynamic WebApi to Container + /// + /// + /// configuration + /// + public static IServiceCollection AddDynamicApi(this IServiceCollection services, DynamicApiOptions options) + { + if (options == null) + { + throw new ArgumentException(nameof(options)); + } + + options.Valid(); + + AppConsts.DefaultAreaName = options.DefaultAreaName; + AppConsts.DefaultHttpVerb = options.DefaultHttpVerb; + AppConsts.DefaultApiPreFix = options.DefaultApiPrefix; + AppConsts.ControllerPostfixes = options.RemoveControllerPostfixes; + AppConsts.ActionPostfixes = options.RemoveActionPostfixes; + AppConsts.FormBodyBindingIgnoredTypes = options.FormBodyBindingIgnoredTypes; + AppConsts.NamingConvention = options.NamingConvention; + AppConsts.GetRestFulControllerName = options.GetRestFulControllerName; + AppConsts.GetRestFulActionName = options.GetRestFulActionName; + AppConsts.AssemblyDynamicApiOptions = options.AssemblyDynamicApiOptions; + AppConsts.FormatResult = options.FormatResult; + AppConsts.FormatResultType = options.FormatResultType; + + var partManager = services.GetSingletonInstanceOrNull(); + + if (partManager == null) + { + throw new InvalidOperationException("\"AddDynamicApi\" must be after \"AddMvc\"."); + } + + // Add a custom controller checker + partManager.FeatureProviders.Add(new DynamicApiControllerFeatureProvider(options.SelectController)); + + services.Configure(o => + { + // Register Controller Routing Information Converter + o.Conventions.Add(new DynamicApiConvention(options.SelectController, options.ActionRouteFactory)); + }); + + return services; + } + + public static IServiceCollection AddDynamicApi(this IServiceCollection services) + { + return AddDynamicApi(services, new DynamicApiOptions()); + } + + public static IServiceCollection AddDynamicApi(this IServiceCollection services, Action optionsAction) + { + var DynamicApiOptions = new DynamicApiOptions(); + + optionsAction?.Invoke(DynamicApiOptions); + + return AddDynamicApi(services, DynamicApiOptions); + } + +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/Enums/NamingConventionEnum.cs b/src/platform/ZhonTai.DynamicApi/Enums/NamingConventionEnum.cs new file mode 100644 index 0000000..888ea66 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/Enums/NamingConventionEnum.cs @@ -0,0 +1,29 @@ +namespace ZhonTai.DynamicApi.Enums; + +public enum NamingConventionEnum +{ + /// + /// camelCase + /// + CamelCase, + /// + /// PascalCase + /// + PascalCase, + /// + /// snake_case + /// + SnakeCase, + /// + /// kebab-case + /// + KebabCase, + /// + /// extension.case + /// + ExtensionCase, + /// + /// Customize with GetRestFulControllerName and GetRestFulActionName method + /// + Custom +} diff --git a/src/platform/ZhonTai.DynamicApi/Extensions/MethodInfoExtension.cs b/src/platform/ZhonTai.DynamicApi/Extensions/MethodInfoExtension.cs new file mode 100644 index 0000000..71e49ce --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/Extensions/MethodInfoExtension.cs @@ -0,0 +1,19 @@ +using System.Reflection; + +namespace ZhonTai.DynamicApi; + +public static class MethodInfoExtension +{ + public static bool IsAsync(this MethodInfo method) + { + return method.ReturnType == typeof(Task) + || (method.ReturnType.IsGenericType && method.ReturnType.GetGenericTypeDefinition() == typeof(Task<>)); + } + + internal static Type GetReturnType(this MethodInfo method) + { + var isAsync = method.IsAsync(); + var returnType = method.ReturnType; + return isAsync ? (returnType.GenericTypeArguments.FirstOrDefault() ?? typeof(void)) : returnType; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/Helpers/ExtensionMethods.cs b/src/platform/ZhonTai.DynamicApi/Helpers/ExtensionMethods.cs new file mode 100644 index 0000000..aebeafe --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/Helpers/ExtensionMethods.cs @@ -0,0 +1,204 @@ +using System.Text.RegularExpressions; + +namespace ZhonTai.DynamicApi.Helpers; + +internal static class ExtensionMethods +{ + public static bool IsNullOrEmpty(this string str) + { + return string.IsNullOrEmpty(str); + } + + public static bool IsNullOrEmpty(this ICollection source) + { + return source == null || source.Count <= 0; + } + + public static bool IsIn(this string str, params string[] data) + { + foreach (var item in data) + { + if (str == item) + { + return true; + } + } + return false; + } + + public static string RemovePostFix(this string str, params string[] postFixes) + { + if (str == null) + { + return null; + } + + if (str == string.Empty) + { + return string.Empty; + } + + if (postFixes.IsNullOrEmpty()) + { + return str; + } + + foreach (var postFix in postFixes) + { + if (str.EndsWith(postFix)) + { + return str.Left(str.Length - postFix.Length); + } + } + + return str; + } + + public static string RemovePreFix(this string str, params string[] preFixes) + { + if (str == null) + { + return null; + } + + if (str == string.Empty) + { + return string.Empty; + } + + if (preFixes.IsNullOrEmpty()) + { + return str; + } + + foreach (var preFix in preFixes) + { + if (str.StartsWith(preFix)) + { + return str.Right(str.Length - preFix.Length); + } + } + + return str; + } + + + public static string Left(this string str, int len) + { + if (str == null) + { + throw new ArgumentNullException("str"); + } + + if (str.Length < len) + { + throw new ArgumentException("len argument can not be bigger than given string's length!"); + } + + return str.Substring(0, len); + } + + + public static string Right(this string str, int len) + { + if (str == null) + { + throw new ArgumentNullException("str"); + } + + if (str.Length < len) + { + throw new ArgumentException("len argument can not be bigger than given string's length!"); + } + + return str.Substring(str.Length - len, len); + } + + public static string GetCamelCaseFirstWord(this string str) + { + if (str == null) + { + throw new ArgumentNullException(nameof(str)); + } + + if (str.Length == 1) + { + return str; + } + + var res = Regex.Split(str, @"(?=\p{Lu}\p{Ll})|(?<=\p{Ll})(?=\p{Lu})"); + + if (res.Length < 1) + { + return str; + } + else + { + return res[0]; + } + } + + public static string GetPascalCaseFirstWord(this string str) + { + if (str == null) + { + throw new ArgumentNullException(nameof(str)); + } + + if (str.Length == 1) + { + return str; + } + + var res = Regex.Split(str, @"(?=\p{Lu}\p{Ll})|(?<=\p{Ll})(?=\p{Lu})"); + + if (res.Length < 2) + { + return str; + } + else + { + return res[1]; + } + } + + public static string GetPascalOrCamelCaseFirstWord(this string str) + { + if (str == null) + { + throw new ArgumentNullException(nameof(str)); + } + + if (str.Length <= 1) + { + return str; + } + + if (str[0] >= 65 && str[0] <= 90) + { + return GetPascalCaseFirstWord(str); + } + else + { + return GetCamelCaseFirstWord(str); + } + } + + public static string FirstCharToLower(this string s) + { + if (string.IsNullOrEmpty(s)) + return s; + + string str = s.First().ToString().ToLower() + s.Substring(1); + return str; + } + + public static string FirstCharToUpper(this string s) + { + if (string.IsNullOrEmpty(s)) + return s; + + string str = s.First().ToString().ToUpper() + s.Substring(1); + return str; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/Helpers/ReflectionHelper.cs b/src/platform/ZhonTai.DynamicApi/Helpers/ReflectionHelper.cs new file mode 100644 index 0000000..9e33eac --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/Helpers/ReflectionHelper.cs @@ -0,0 +1,87 @@ +using System.Reflection; + +namespace ZhonTai.DynamicApi.Helpers; + +internal static class ReflectionHelper +{ + + public static TAttribute GetSingleAttributeOrDefaultByFullSearch(TypeInfo info) + where TAttribute : Attribute + { + var attributeType = typeof(TAttribute); + if (info.IsDefined(attributeType, true)) + { + return info.GetCustomAttributes(attributeType, true).Cast().First(); + } + else + { + foreach (var implInter in info.ImplementedInterfaces) + { + var res = GetSingleAttributeOrDefaultByFullSearch(implInter.GetTypeInfo()); + + if (res != null) + { + return res; + } + } + } + + return null; + } + + public static TAttribute GetSingleAttributeOrDefault(MemberInfo memberInfo, TAttribute defaultValue = default(TAttribute), bool inherit = true) + where TAttribute : Attribute + { + var attributeType = typeof(TAttribute); + if (memberInfo.IsDefined(typeof(TAttribute), inherit)) + { + return memberInfo.GetCustomAttributes(attributeType, inherit).Cast().First(); + } + + return defaultValue; + } + + + /// + /// Gets a single attribute for a member. + /// + /// Type of the attribute + /// The member that will be checked for the attribute + /// Include inherited attributes + /// Returns the attribute object if found. Returns null if not found. + public static TAttribute GetSingleAttributeOrNull(this MemberInfo memberInfo, bool inherit = true) + where TAttribute : Attribute + { + if (memberInfo == null) + { + throw new ArgumentNullException(nameof(memberInfo)); + } + + var attrs = memberInfo.GetCustomAttributes(typeof(TAttribute), inherit).ToArray(); + if (attrs.Length > 0) + { + return (TAttribute)attrs[0]; + } + + return default(TAttribute); + } + + + public static TAttribute GetSingleAttributeOfTypeOrBaseTypesOrNull(this Type type, bool inherit = true) + where TAttribute : Attribute + { + var attr = type.GetTypeInfo().GetSingleAttributeOrNull(); + if (attr != null) + { + return attr; + } + + if (type.GetTypeInfo().BaseType == null) + { + return null; + } + + return type.GetTypeInfo().BaseType.GetSingleAttributeOfTypeOrBaseTypesOrNull(inherit); + } + +} diff --git a/src/platform/ZhonTai.DynamicApi/Helpers/ServiceCollectionExtensions.cs b/src/platform/ZhonTai.DynamicApi/Helpers/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..b87dc38 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/Helpers/ServiceCollectionExtensions.cs @@ -0,0 +1,76 @@ +using System.Reflection; +using Microsoft.Extensions.DependencyInjection; + +namespace ZhonTai.DynamicApi.Helpers; + +internal static class ServiceCollectionExtensions +{ + public static bool IsAdded(this IServiceCollection services) + { + return services.IsAdded(typeof(T)); + } + + public static bool IsAdded(this IServiceCollection services, Type type) + { + return services.Any(d => d.ServiceType == type); + } + + public static T GetSingletonInstanceOrNull(this IServiceCollection services) + { + return (T)services + .FirstOrDefault(d => d.ServiceType == typeof(T)) + ?.ImplementationInstance; + } + + public static T GetSingletonInstance(this IServiceCollection services) + { + var service = services.GetSingletonInstanceOrNull(); + if (service == null) + { + throw new InvalidOperationException("Could not find singleton service: " + typeof(T).AssemblyQualifiedName); + } + + return service; + } + + public static IServiceProvider BuildServiceProviderFromFactory(this IServiceCollection services) + { + foreach (var service in services) + { + var factoryInterface = service.ImplementationInstance?.GetType() + .GetTypeInfo() + .GetInterfaces() + .FirstOrDefault(i => i.GetTypeInfo().IsGenericType && + i.GetGenericTypeDefinition() == typeof(IServiceProviderFactory<>)); + + if (factoryInterface == null) + { + continue; + } + + var containerBuilderType = factoryInterface.GenericTypeArguments[0]; + return (IServiceProvider)typeof(ServiceCollectionExtensions) + .GetTypeInfo() + .GetMethods() + .Single(m => m.Name == nameof(BuildServiceProviderFromFactory) && m.IsGenericMethod) + .MakeGenericMethod(containerBuilderType) + .Invoke(null, new object[] { services, null }); + } + + return services.BuildServiceProvider(); + } + + public static IServiceProvider BuildServiceProviderFromFactory(this IServiceCollection services, Action builderAction = null) + { + + var serviceProviderFactory = services.GetSingletonInstanceOrNull>(); + if (serviceProviderFactory == null) + { + throw new Exception($"Could not find {typeof(IServiceProviderFactory).FullName} in {services}."); + } + + var builder = serviceProviderFactory.CreateBuilder(services); + builderAction?.Invoke(builder); + return serviceProviderFactory.CreateServiceProvider(builder); + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/Helpers/TypeHelper.cs b/src/platform/ZhonTai.DynamicApi/Helpers/TypeHelper.cs new file mode 100644 index 0000000..d87b9f5 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/Helpers/TypeHelper.cs @@ -0,0 +1,62 @@ +using System.Reflection; + +namespace ZhonTai.DynamicApi.Helpers; + +internal static class TypeHelper +{ + public static bool IsFunc(object obj) + { + if (obj == null) + { + return false; + } + + var type = obj.GetType(); + if (!type.GetTypeInfo().IsGenericType) + { + return false; + } + + return type.GetGenericTypeDefinition() == typeof(Func<>); + } + + public static bool IsFunc(object obj) + { + return obj != null && obj.GetType() == typeof(Func); + } + + public static bool IsPrimitiveExtendedIncludingNullable(Type type, bool includeEnums = false) + { + if (IsPrimitiveExtended(type, includeEnums)) + { + return true; + } + + if (type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) + { + return IsPrimitiveExtended(type.GenericTypeArguments[0], includeEnums); + } + + return false; + } + + private static bool IsPrimitiveExtended(Type type, bool includeEnums) + { + if (type.GetTypeInfo().IsPrimitive) + { + return true; + } + + if (includeEnums && type.GetTypeInfo().IsEnum) + { + return true; + } + + return type == typeof(string) || + type == typeof(decimal) || + type == typeof(DateTime) || + type == typeof(DateTimeOffset) || + type == typeof(TimeSpan) || + type == typeof(Guid); + } +} diff --git a/src/platform/ZhonTai.DynamicApi/IActionRouteFactory.cs b/src/platform/ZhonTai.DynamicApi/IActionRouteFactory.cs new file mode 100644 index 0000000..1fea1df --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/IActionRouteFactory.cs @@ -0,0 +1,29 @@ +using Microsoft.AspNetCore.Mvc.ApplicationModels; + +namespace ZhonTai.DynamicApi; + +public interface IActionRouteFactory +{ + string CreateActionRouteModel(string areaName, string controllerName, ActionModel action); +} + +internal class DefaultActionRouteFactory : IActionRouteFactory +{ + private static string GetApiPreFix(ActionModel action) + { + var getValueSuccess = AppConsts.AssemblyDynamicApiOptions + .TryGetValue(action.Controller.ControllerType.Assembly, out AssemblyDynamicApiOptions assemblyDynamicApiOptions); + if (getValueSuccess && !string.IsNullOrWhiteSpace(assemblyDynamicApiOptions?.ApiPrefix)) + { + return assemblyDynamicApiOptions.ApiPrefix; + } + + return AppConsts.DefaultApiPreFix; + } + + public string CreateActionRouteModel(string areaName, string controllerName, ActionModel action) + { + var apiPreFix = GetApiPreFix(action); + var routeStr = $"{apiPreFix}/{areaName}/{controllerName}/{action.ActionName}".Replace("//", "/"); + return routeStr; } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/IDynamicApi.cs b/src/platform/ZhonTai.DynamicApi/IDynamicApi.cs new file mode 100644 index 0000000..c2e7e65 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/IDynamicApi.cs @@ -0,0 +1,6 @@ +namespace ZhonTai.DynamicApi; + +public interface IDynamicApi +{ + +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/ISelectController.cs b/src/platform/ZhonTai.DynamicApi/ISelectController.cs new file mode 100644 index 0000000..1aab853 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/ISelectController.cs @@ -0,0 +1,39 @@ +using ZhonTai.DynamicApi.Attributes; +using ZhonTai.DynamicApi.Helpers; +using System.Reflection; + +namespace ZhonTai.DynamicApi; + +public interface ISelectController +{ + bool IsController(Type type); +} + +internal class DefaultSelectController : ISelectController +{ + public bool IsController(Type type) + { + var typeInfo = type.GetTypeInfo(); + + if (!typeof(IDynamicApi).IsAssignableFrom(type) || + !typeInfo.IsPublic || typeInfo.IsAbstract || typeInfo.IsGenericType) + { + return false; + } + + + var attr = ReflectionHelper.GetSingleAttributeOrDefaultByFullSearch(typeInfo); + + if (attr == null) + { + return false; + } + + if (ReflectionHelper.GetSingleAttributeOrDefaultByFullSearch(typeInfo) != null) + { + return false; + } + + return true; + } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/Response/FormatResultContext.cs b/src/platform/ZhonTai.DynamicApi/Response/FormatResultContext.cs new file mode 100644 index 0000000..1dcc812 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/Response/FormatResultContext.cs @@ -0,0 +1,6 @@ +namespace ZhonTai.DynamicApi; + +public static class FormatResultContext +{ + internal static Type FormatResultType = typeof(ResponseResult<>); +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/Response/ResponseResult.cs b/src/platform/ZhonTai.DynamicApi/Response/ResponseResult.cs new file mode 100644 index 0000000..4e16b15 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/Response/ResponseResult.cs @@ -0,0 +1,24 @@ +namespace ZhonTai.DynamicApi; + +public class ResponseResult +{ + /// + /// 是否成功标记 + /// + public bool Success { get; private set; } + + /// + /// 编码 + /// + public string Code { get; set; } + + /// + /// 消息 + /// + public string Msg { get; private set; } + + /// + /// 数据 + /// + public T Data { get; private set; } +} \ No newline at end of file diff --git a/src/platform/ZhonTai.DynamicApi/ZhonTai.DynamicApi.csproj b/src/platform/ZhonTai.DynamicApi/ZhonTai.DynamicApi.csproj new file mode 100644 index 0000000..c145aa9 --- /dev/null +++ b/src/platform/ZhonTai.DynamicApi/ZhonTai.DynamicApi.csproj @@ -0,0 +1,17 @@ + + + net9.0; + + + 中台动态WebApi库 + DynamicApi;WebApi; + + + + + + + + + + diff --git a/src/platform/ZhonTai.DynamicApi/key.snk b/src/platform/ZhonTai.DynamicApi/key.snk new file mode 100644 index 0000000..3b7e316 Binary files /dev/null and b/src/platform/ZhonTai.DynamicApi/key.snk differ diff --git a/zhontai.ui.admin.vue3/.editorconfig b/zhontai.ui.admin.vue3/.editorconfig new file mode 100644 index 0000000..77503d5 --- /dev/null +++ b/zhontai.ui.admin.vue3/.editorconfig @@ -0,0 +1,23 @@ +# https://editorconfig.org +root = true + +# 匹配全部文件 +[*] +# 设置字符集 +charset = utf-8 +# 缩进风格,可选space、tab +indent_style = space +# 缩进的空格数 +indent_size = 2 +# 结尾换行符,可选lf、cr、crlf +end_of_line = lf +# 在文件结尾插入新行 +insert_final_newline = true +# 删除一行中的前后空格 +trim_trailing_whitespace = true + +# 匹配md结尾的文件 +[*.md] +indent_style = tab +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/zhontai.ui.admin.vue3/.env b/zhontai.ui.admin.vue3/.env new file mode 100644 index 0000000..03ffbd6 --- /dev/null +++ b/zhontai.ui.admin.vue3/.env @@ -0,0 +1,8 @@ +# port 端口号 +VITE_PORT = 24010 + +# open 运行 npm run dev 时自动打开浏览器 +VITE_OPEN = true + +# public path 配置线上环境路径(打包)、本地通过 http-server 访问时,请置空即可 +VITE_PUBLIC_PATH = '' \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/.env.development b/zhontai.ui.admin.vue3/.env.development new file mode 100644 index 0000000..6de13e9 --- /dev/null +++ b/zhontai.ui.admin.vue3/.env.development @@ -0,0 +1,5 @@ +# 本地环境 +ENV = 'development' + +# 本地环境接口地址 +VITE_API_URL = 'http://localhost:18010' \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/.env.production b/zhontai.ui.admin.vue3/.env.production new file mode 100644 index 0000000..83a7148 --- /dev/null +++ b/zhontai.ui.admin.vue3/.env.production @@ -0,0 +1,11 @@ +# 线上环境 +ENV = 'production' + +# 开启压缩 +VITE_COMPRESSION = true + +# public path 配置线上环境路径(打包) +VITE_PUBLIC_PATH = '/' + +# 线上环境接口地址,确保替换 http://localhost:16010 为你的实际线上接口地址 +VITE_API_URL = 'http://localhost:16010' \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/.eslintignore b/zhontai.ui.admin.vue3/.eslintignore new file mode 100644 index 0000000..a391981 --- /dev/null +++ b/zhontai.ui.admin.vue3/.eslintignore @@ -0,0 +1,19 @@ + +*.sh +node_modules +lib +*.md +*.scss +*.woff +*.ttf +.vscode +.idea +dist +mock +public +bin +build +config +index.html +src/assets +gen \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/.eslintrc.js b/zhontai.ui.admin.vue3/.eslintrc.js new file mode 100644 index 0000000..510241c --- /dev/null +++ b/zhontai.ui.admin.vue3/.eslintrc.js @@ -0,0 +1,78 @@ +module.exports = { + root: true, + env: { + browser: true, + es2021: true, + node: true, + }, + parser: 'vue-eslint-parser', + parserOptions: { + ecmaVersion: 12, + parser: '@typescript-eslint/parser', + sourceType: 'module', + }, + extends: ['plugin:vue/vue3-essential', 'plugin:vue/essential', 'eslint:recommended'], + plugins: ['vue', '@typescript-eslint'], + overrides: [ + { + files: ['*.ts', '*.tsx', '*.vue'], + rules: { + 'no-undef': 'off', + }, + }, + ], + rules: { + // http://eslint.cn/docs/rules/ + // https://eslint.vuejs.org/rules/ + // https://typescript-eslint.io/rules/no-unused-vars/ + '@typescript-eslint/ban-ts-ignore': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-redeclare': 'error', + '@typescript-eslint/no-non-null-asserted-optional-chain': 'off', + '@typescript-eslint/no-unused-vars': [2], + 'vue/custom-event-name-casing': 'off', + 'vue/attributes-order': 'off', + 'vue/one-component-per-file': 'off', + 'vue/html-closing-bracket-newline': 'off', + 'vue/max-attributes-per-line': 'off', + 'vue/multiline-html-element-content-newline': 'off', + 'vue/singleline-html-element-content-newline': 'off', + 'vue/attribute-hyphenation': 'off', + 'vue/html-self-closing': 'off', + 'vue/no-multiple-template-root': 'off', + 'vue/require-default-prop': 'off', + 'vue/no-v-model-argument': 'off', + 'vue/no-arrow-functions-in-watch': 'off', + 'vue/no-template-key': 'off', + 'vue/no-v-html': 'off', + 'vue/comment-directive': 'off', + 'vue/no-parsing-error': 'off', + 'vue/no-deprecated-v-on-native-modifier': 'off', + 'vue/multi-word-component-names': 'off', + 'no-useless-escape': 'off', + 'no-sparse-arrays': 'off', + 'no-prototype-builtins': 'off', + 'no-constant-condition': 'off', + 'no-use-before-define': 'off', + 'no-restricted-globals': 'off', + 'no-restricted-syntax': 'off', + 'generator-star-spacing': 'off', + 'no-unreachable': 'off', + 'no-multiple-template-root': 'off', + 'no-unused-vars': 'error', + 'no-v-model-argument': 'off', + 'no-case-declarations': 'off', + 'no-console': 'error', + 'no-redeclare': 'off', + //修复prettier格式化语句在语句前生成分号后,eslintrc检测报错误的问题 + 'no-extra-semi': 'off', + }, +} diff --git a/zhontai.ui.admin.vue3/.prettierrc.cjs b/zhontai.ui.admin.vue3/.prettierrc.cjs new file mode 100644 index 0000000..ed8309c --- /dev/null +++ b/zhontai.ui.admin.vue3/.prettierrc.cjs @@ -0,0 +1,39 @@ +module.exports = { + // 一行最多多少个字符 + printWidth: 150, + // 指定每个缩进级别的空格数 + tabWidth: 2, + // 使用制表符而不是空格缩进行 + useTabs: false, + // 在语句末尾打印分号 + semi: false, + // 使用单引号而不是双引号 + singleQuote: true, + // 更改引用对象属性的时间 可选值"" + quoteProps: 'as-needed', + // 在JSX中使用单引号而不是双引号 + jsxSingleQuote: false, + // 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"",默认none + trailingComma: 'es5', + // 在对象文字中的括号之间打印空格 + bracketSpacing: true, + // jsx 标签的反尖括号需要换行 + jsxBracketSameLine: false, + // 在单独的箭头函数参数周围包括括号 always:(x) => x \ avoid:x => x + arrowParens: 'always', + // 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码 + rangeStart: 0, + rangeEnd: Infinity, + // 指定要使用的解析器,不需要写文件开头的 @prettier + requirePragma: false, + // 不需要自动在文件开头插入 @prettier + insertPragma: false, + // 使用默认的折行标准 always\never\preserve + proseWrap: 'preserve', + // 指定HTML文件的全局空格敏感度 css\strict\ignore + htmlWhitespaceSensitivity: 'css', + // Vue文件脚本和样式标签缩进 + vueIndentScriptAndStyle: false, + // 换行符使用 lf 结尾是 可选值"" + endOfLine: 'lf', +} diff --git a/zhontai.ui.admin.vue3/LICENSE b/zhontai.ui.admin.vue3/LICENSE new file mode 100644 index 0000000..4e3c578 --- /dev/null +++ b/zhontai.ui.admin.vue3/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 zhontai + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/bin/build.bat b/zhontai.ui.admin.vue3/bin/build.bat new file mode 100644 index 0000000..36d353c --- /dev/null +++ b/zhontai.ui.admin.vue3/bin/build.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo 发布网站,生成dist文件 +echo. + +%~d0 +cd %~dp0 + +cd .. +pnpm run build + +pause \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/bin/install.bat b/zhontai.ui.admin.vue3/bin/install.bat new file mode 100644 index 0000000..95bd4c3 --- /dev/null +++ b/zhontai.ui.admin.vue3/bin/install.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo 安装包,生成node_modules文件 +echo. + +%~d0 +cd %~dp0 + +cd .. +pnpm install --registry=https://registry.npmmirror.com + +pause \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/bin/run-web.bat b/zhontai.ui.admin.vue3/bin/run-web.bat new file mode 100644 index 0000000..49199f0 --- /dev/null +++ b/zhontai.ui.admin.vue3/bin/run-web.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo 运行网站 +echo. + +%~d0 +cd %~dp0 + +cd .. +pnpm run dev + +pause \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/gen/gen-api.js b/zhontai.ui.admin.vue3/gen/gen-api.js new file mode 100644 index 0000000..17b78cd --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/gen-api.js @@ -0,0 +1,56 @@ +import axios from 'axios' +import ejs from 'ejs' +import fs from 'node:fs' +import path from 'node:path' +import { generateApi } from 'swagger-typescript-api' + +const projectPath = process.cwd() +const apiUrl = 'http://localhost:16010' + +const apis = [ + { + output: path.resolve(projectPath, './src/api/admin'), + url: `${apiUrl}/doc/admin/swagger/admin/swagger.json`, + enumUrl: `${apiUrl}/api/admin/get-enums`, + }, + // { + // output: path.resolve(projectPath, './src/api/app'), + // url: `${apiUrl}/doc/app/swagger/app/swagger.json`, + // // enumUrl: `${apiUrl}/api/app/get-enums`, + // }, +] + +const genEnums = async (api) => { + console.log(`✨ try to get enums by URL "${api.enumUrl}"`) + console.log(`⭐ start generating your typescript api`) + const res = await axios.get(api.enumUrl).catch((error) => { + console.error(error) + }) + + if (res?.data?.data?.length > 0) { + ejs.renderFile(path.resolve(projectPath, './gen/templates/enum-contracts.ejs'), res.data, {}, function (err, content) { + fs.writeFile(path.resolve(api.output + '/enum-contracts.ts'), content, (err) => {}) + console.log(`✅ api file "enum-contracts.ts" created in ${api.output}\n`) + }) + } +} + +apis?.forEach(async (api) => { + if (api.enumUrl) { + await genEnums(api) + } + + await generateApi({ + output: api.output, + templates: path.resolve(projectPath, './gen/templates'), + url: api.url, + httpClientType: 'axios', + modular: true, + cleanOutput: false, + moduleNameIndex: 2, // 0 api, 1 api htt-client data-contracts, 2 apis htt-client data-contracts + moduleNameFirstTag: true, //apis htt-client data-contracts + unwrapResponseData: true, + generateUnionEnums: true, + defaultResponseType: 'AxiosResponse', + }).catch((error) => console.error(error)) +}) diff --git a/zhontai.ui.admin.vue3/gen/gen-templates.js b/zhontai.ui.admin.vue3/gen/gen-templates.js new file mode 100644 index 0000000..fb01e21 --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/gen-templates.js @@ -0,0 +1,12 @@ +import path from 'node:path' +import { generateTemplates } from 'swagger-typescript-api' + +//导出swagger-typescript-api内置模板 +generateTemplates({ + cleanOutput: false, + output: path.resolve(process.cwd(), './gen/templates'), + httpClientType: 'axios', + modular: true, + silent: false, + rewrite: false, +}) diff --git a/zhontai.ui.admin.vue3/gen/templates/api.ejs b/zhontai.ui.admin.vue3/gen/templates/api.ejs new file mode 100644 index 0000000..357b3c2 --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/templates/api.ejs @@ -0,0 +1,28 @@ +<% +const { utils, route, config, modelTypes } = it; +const { _, pascalCase, require } = utils; +const apiClassName = pascalCase(route.moduleName); +const routes = route.routes; +const dataContracts = _.map(modelTypes, "name"); +%> + +<% if (config.httpClientType === config.constants.HTTP_CLIENT.AXIOS) { %> import { AxiosRequestConfig, AxiosResponse } from "axios"; <% } %> + +import { HttpClient, RequestParams, ContentType, HttpResponse } from "./<%~ config.fileNames.httpClient %>"; +<% if (dataContracts.length) { %> +import { <%~ dataContracts.join(", ") %> } from "./<%~ config.fileNames.dataContracts %>" +<% } %> + +export class <%= apiClassName %>Api<% if (!config.singleHttpClient) { %> extends HttpClient <% } %> { +<% if(config.singleHttpClient) { %> + http: HttpClient; + + constructor (http: HttpClient) { + this.http = http; + } +<% } %> + + <% routes.forEach((route) => { %> + <%~ includeFile('./procedure-call.ejs', { ...it, route }) %> + <% }) %> +} diff --git a/zhontai.ui.admin.vue3/gen/templates/data-contract-jsdoc.ejs b/zhontai.ui.admin.vue3/gen/templates/data-contract-jsdoc.ejs new file mode 100644 index 0000000..cd3c3de --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/templates/data-contract-jsdoc.ejs @@ -0,0 +1,37 @@ +<% +const { data, utils } = it; +const { formatDescription, require, _ } = utils; + +const stringify = (value) => _.isObject(value) ? JSON.stringify(value) : _.isString(value) ? `"${value}"` : value + +const jsDocLines = _.compact([ + data.title, + data.description && formatDescription(data.description), + !_.isUndefined(data.deprecated) && data.deprecated && '@deprecated', + !_.isUndefined(data.format) && `@format ${data.format}`, + !_.isUndefined(data.minimum) && `@min ${data.minimum}`, + !_.isUndefined(data.multipleOf) && `@multipleOf ${data.multipleOf}`, + !_.isUndefined(data.exclusiveMinimum) && `@exclusiveMin ${data.exclusiveMinimum}`, + !_.isUndefined(data.maximum) && `@max ${data.maximum}`, + !_.isUndefined(data.minLength) && `@minLength ${data.minLength}`, + !_.isUndefined(data.maxLength) && `@maxLength ${data.maxLength}`, + !_.isUndefined(data.exclusiveMaximum) && `@exclusiveMax ${data.exclusiveMaximum}`, + !_.isUndefined(data.maxItems) && `@maxItems ${data.maxItems}`, + !_.isUndefined(data.minItems) && `@minItems ${data.minItems}`, + !_.isUndefined(data.uniqueItems) && `@uniqueItems ${data.uniqueItems}`, + !_.isUndefined(data.default) && `@default ${stringify(data.default)}`, + !_.isUndefined(data.pattern) && `@pattern ${data.pattern}`, + !_.isUndefined(data.example) && `@example ${stringify(data.example)}` +]).join('\n').split('\n'); +%> +<% if (jsDocLines.every(_.isEmpty)) { %> +<% } else if (jsDocLines.length === 1) { %> +/** <%~ jsDocLines[0] %> */ +<% } else if (jsDocLines.length) { %> +/** +<% for (jsDocLine of jsDocLines) { %> + * <%~ jsDocLine %> + +<% } %> + */ +<% } %> diff --git a/zhontai.ui.admin.vue3/gen/templates/data-contracts.ejs b/zhontai.ui.admin.vue3/gen/templates/data-contracts.ejs new file mode 100644 index 0000000..bb54793 --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/templates/data-contracts.ejs @@ -0,0 +1,28 @@ +<% +const { modelTypes, utils, config } = it; +const { formatDescription, require, _, Ts } = utils; + + +const dataContractTemplates = { + enum: (contract) => { + return `enum ${contract.name} {\r\n${contract.content} \r\n }`; + }, + interface: (contract) => { + return `interface ${contract.name} {\r\n${contract.content}}`; + }, + type: (contract) => { + return `type ${contract.name} = ${contract.content}`; + }, +} +%> + +<% if (config.internalTemplateOptions.addUtilRequiredKeysType) { %> +type <%~ config.Ts.CodeGenKeyword.UtilRequiredKeys %> = Omit & Required> +<% } %> + +<% modelTypes.forEach((contract) => { %> + <%~ includeFile('./data-contract-jsdoc.ejs', { ...it, data: { ...contract, ...contract.typeData } }) %> + export <%~ (dataContractTemplates[contract.typeIdentifier] || dataContractTemplates.type)(contract) %> + + +<% }) %> diff --git a/zhontai.ui.admin.vue3/gen/templates/enum-contracts.ejs b/zhontai.ui.admin.vue3/gen/templates/enum-contracts.ejs new file mode 100644 index 0000000..ad243e9 --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/templates/enum-contracts.ejs @@ -0,0 +1,6 @@ +<% data.forEach((enumType) => { %>/** <%= enumType.desc %> */ +export const <%= enumType.name %> = {<% enumType.options.forEach((option) => { %> + <%= option.name %>: { name: '<%= option.name %>', value: <%= option.value %>, desc: '<%= option.desc %>' },<% }) %> +} + +<% }) %> \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/gen/templates/enum-data-contract.ejs b/zhontai.ui.admin.vue3/gen/templates/enum-data-contract.ejs new file mode 100644 index 0000000..5610746 --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/templates/enum-data-contract.ejs @@ -0,0 +1,12 @@ +<% +const { contract, utils, config } = it; +const { formatDescription, require, _ } = utils; +const { name, $content } = contract; +%> +<% if (config.generateUnionEnums) { %> + export type <%~ name %> = <%~ _.map($content, ({ value }) => value).join(" | ") %> +<% } else { %> + export enum <%~ name %> { + <%~ _.map($content, ({ key, value }) => `${key} = ${value}`).join(",\n") %> + } +<% } %> diff --git a/zhontai.ui.admin.vue3/gen/templates/http-client.ejs b/zhontai.ui.admin.vue3/gen/templates/http-client.ejs new file mode 100644 index 0000000..4f4609a --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/templates/http-client.ejs @@ -0,0 +1,465 @@ +<% +const { apiConfig, generateResponses, config } = it; +%> + +import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, HeadersDefaults, ResponseType, RawAxiosRequestHeaders } from 'axios' +import { ElLoading, ElMessage, LoadingOptions } from 'element-plus' +import { useUserInfo } from '/@/stores/userInfo' + +export type QueryParamsType = Record; + +export interface FullRequestParams extends Omit { + /** set parameter to `true` for call `securityWorker` for this request */ + secure?: boolean; + /** request path */ + path: string; + /** content type of request body */ + type?: ContentType; + /** query params */ + query?: QueryParamsType; + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseType; + /** request body */ + body?: unknown; + /** 显示错误消息 */ + showErrorMessage?: boolean + /** 显示成功消息 */ + showSuccessMessage?: boolean + /** 登录访问 */ + login?: boolean + /** 加载中 */ + loading?: boolean + /** 加载中选项 */ + loadingOptions?: LoadingOptions + /** 取消重复请求 */ + cancelRepeatRequest?: boolean + /** 返回整个响应对象 */ + returnResponse?: boolean +} + +export type RequestParams = Omit; + +export interface ApiConfig extends Omit { + securityWorker?: (securityData: SecurityDataType | null) => Promise | AxiosRequestConfig | void; + secure?: boolean; + format?: ResponseType; +} + +export enum ContentType { + Json = "application/json", + FormData = "multipart/form-data", + UrlEncoded = "application/x-www-form-urlencoded", + Text = "text/plain", +} + +export interface LoadingInstance { + target: any + count: number +} + +const pendingMap = new Map() + +const loadingInstance: LoadingInstance = { + target: null, + count: 0, +} + +export class HttpClient { + public instance: AxiosInstance; + private securityData: SecurityDataType | null = null; + private securityWorker?: ApiConfig["securityWorker"]; + private secure?: boolean; + private format?: ResponseType; + + constructor({ securityWorker, secure, format, ...axiosConfig }: ApiConfig = {}) { + this.instance = axios.create({ ...axiosConfig, timeout: 60000, baseURL: axiosConfig.baseURL || import.meta.env.VITE_API_URL }) + this.secure = secure; + this.format = format; + this.securityWorker = securityWorker; + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data + } + + protected mergeRequestParams(params1: AxiosRequestConfig, params2?: AxiosRequestConfig): AxiosRequestConfig { + const method = params1.method || (params2 && params2.method) + + return { + ...this.instance.defaults, + ...params1, + ...(params2 || {}), + headers: { + ...((method && this.instance.defaults.headers[method.toLowerCase() as keyof HeadersDefaults]) || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + } as RawAxiosRequestHeaders, + }; + } + + protected stringifyFormItem(formItem: unknown) { + if (typeof formItem === "object" && formItem !== null) { + return JSON.stringify(formItem); + } else { + return `${formItem}`; + } + } + + protected createFormData(input: Record): FormData { + return Object.keys(input || {}).reduce((formData, key) => { + const property = input[key]; + const propertyContent: any[] = (property instanceof Array) ? property : [property] + + for (const formItem of propertyContent) { + const isFileType = formItem instanceof Blob || formItem instanceof File; + formData.append( + key, + isFileType ? formItem : this.stringifyFormItem(formItem) + ); + } + + return formData; + }, new FormData()); + } + + /** + * 错误处理 + * @param {*} error + */ + protected errorHandle(error: any) { + if (!error) { + return + } + if (axios.isCancel(error)) return console.error('请求重复已被自动取消:' + error.message) + let message = '' + if (error.response) { + switch (error.response.status) { + case 302: + message = '接口重定向' + break + case 400: + message = '参数不正确' + break + case 401: + message = '您还没有登录' + break + case 403: + message = '您没有权限操作' + break + case 404: + message = '请求地址出错:' + error.response.config.url + break + case 408: + message = '请求超时' + break + case 409: + message = '系统已存在相同数据' + break + case 429: + message = '访问过于频繁' + break + case 500: + message = '服务器内部错误' + break + case 501: + message = '服务未实现' + break + case 502: + message = '网关错误' + break + case 503: + message = '服务不可用' + break + case 504: + message = '服务暂时无法访问,请稍后再试' + break + case 505: + message = 'HTTP版本不受支持' + break + default: + message = '异常问题,请联系网站管理员' + break + } + } + if (error.message.includes('timeout')) message = '请求超时' + if (error.message.includes('Network')) message = window.navigator.onLine ? '服务端异常' : '您已断网' + + if (message) { + ElMessage.error({ message, grouping: true }) + } + } + + /** + * 刷新token接口 + * @param string refreshToken + */ + protected async refreshApi(refreshToken: string) { + return this.request({ + path: `/api/admin/auth/refresh`, + method: 'GET', + secure: true, + format: 'json', + login: false, + query: { + token: refreshToken, + }, + }) + } + + /** + * 刷新token + * @param {*} config + */ + protected async refreshToken(config: any) { + const storesUseUserInfo = useUserInfo() + const token = storesUseUserInfo.getToken() + if (!token) { + storesUseUserInfo.clear() + return Promise.reject(config) + } + + if (window.tokenRefreshing) { + window.requests = window.requests ? window.requests : [] + return new Promise((resolve) => { + window.requests.push(() => { + resolve(this.instance(config)) + }) + }) + } + + window.tokenRefreshing = true + + return this.refreshApi(token) + .then((res) => { + if (res?.success) { + storesUseUserInfo.setTokenInfo(res.data) + if (window.requests?.length > 0) { + window.requests.forEach((apiRequest) => apiRequest()) + window.requests = [] + } + return this.instance(config) + } else { + storesUseUserInfo.clear() + return Promise.reject(res) + } + }) + .catch((error) => { + storesUseUserInfo.clear() + return Promise.reject(error) + }) + .finally(() => { + window.tokenRefreshing = false + }) + } + + /** + * 储存每个请求的唯一cancel回调, 以此为标识 + */ + protected addPending(config: AxiosRequestConfig) { + const pendingKey = this.getPendingKey(config) + config.cancelToken = + config.cancelToken || + new axios.CancelToken((cancel) => { + if (!pendingMap.has(pendingKey)) { + pendingMap.set(pendingKey, cancel) + } + }) + } + + /** + * 删除重复的请求 + */ + protected removePending(config: AxiosRequestConfig) { + const pendingKey = this.getPendingKey(config) + if (pendingMap.has(pendingKey)) { + const cancelToken = pendingMap.get(pendingKey) + cancelToken(pendingKey) + pendingMap.delete(pendingKey) + } + } + + /** + * 生成每个请求的唯一key + */ + protected getPendingKey(config: AxiosRequestConfig) { + let { data, headers } = config + headers = headers as RawAxiosRequestHeaders + const { url, method, params } = config + if (typeof data === 'string') data = JSON.parse(data) + return [url, method, headers && headers.Authorization ? headers.Authorization : '', JSON.stringify(params), JSON.stringify(data)].join('&') + } + + /** + * 关闭Loading层实例 + */ + protected closeLoading(loading: boolean = false) { + if (loading && loadingInstance.count > 0) loadingInstance.count-- + if (loadingInstance.count === 0) { + loadingInstance.target.close() + loadingInstance.target = null + } + } + + public request = async ({ + secure, + path, + type, + query, + format, + body, + showErrorMessage = true, + showSuccessMessage = false, + login = true, + loading = false, + loadingOptions = { + background: 'rgba(0,0,0,0.5)', + }, + cancelRepeatRequest = false, + returnResponse = false, + ...params +<% if (config.unwrapResponseData) { %> + }: FullRequestParams): Promise => { +<% } else { %> + }: FullRequestParams): Promise> => { +<% } %> + const secureParams = ((typeof secure === 'boolean' ? secure : this.secure) && this.securityWorker && (await this.securityWorker(this.securityData))) || {}; + const requestParams = this.mergeRequestParams(params, secureParams); + const responseFormat = (format || this.format) || undefined; + + if (type === ContentType.FormData && body && body !== null && typeof body === "object") { + body = this.createFormData(body as Record); + } + + if (type === ContentType.Text && body && body !== null && typeof body !== "string") { + body = JSON.stringify(body); + } + + // 请求拦截 + this.instance.interceptors.request.use( + async (config) => { + this.removePending(config) + cancelRepeatRequest && this.addPending(config) + + if (loading) { + loadingInstance.count++ + if (loadingInstance.count === 1) { + loadingInstance.target = ElLoading.service(loadingOptions) + } + } + + const storesUseUserInfo = useUserInfo() + const tokenInfo = storesUseUserInfo.getTokenInfo() + + if (tokenInfo && tokenInfo.accessToken) { + // 判断 accessToken 是否快失效 + const now = new Date().getTime() + const expiresAt = new Date(tokenInfo.accessTokenExpiresAt).getTime() + const maxThreshold = tokenInfo.accessTokenLifeTime * 0.5 + // 确保阈值不超过 5 分钟且不超过 accessTokenLifeTime 的一半 + const threshold = Math.min(5 * 60 * 1000, maxThreshold) + if (expiresAt - now < threshold) { + //加锁 + if (!window.tokenRefreshing) { + window.tokenRefreshing = true + try { + const res = await this.refreshApi(tokenInfo.accessToken) + if (res?.success) { + storesUseUserInfo.setTokenInfo(res.data) + //处理等待队列中的请求 + if (window.requests?.length > 0) { + window.requests.forEach((apiRequest) => apiRequest()) + window.requests = [] + } + } else { + storesUseUserInfo.clear() + return Promise.reject(res) + } + } catch (error) { + // 清空等待队列 + window.requests = [] + return Promise.reject(error) + } finally { + // 解锁 + window.tokenRefreshing = false + } + } else { + // 如果正在刷新,则将当前请求加入等待队列 + if (config.url !== '/api/admin/auth/refresh') { + window.requests = window.requests ? window.requests : [] + return new Promise((resolve) => { + window.requests.push(() => { + resolve(this.instance(config)) + }) + }) + } + } + } + } + + const accessToken = storesUseUserInfo.getToken() + config.headers!['Authorization'] = `Bearer ${accessToken}` + return config + }, + (error) => { + return Promise.reject(error) + } + ) + // 响应拦截 + this.instance.interceptors.response.use( + (res) => { + this.removePending(res.config) + loading && this.closeLoading(loading) + + if (res.config?.responseType == 'blob') { + return res + } + + const data = res.data + if (data.success) { + if (showSuccessMessage) { + ElMessage.success({ message: data.msg ? data.msg : '操作成功', grouping: true }) + } + } else { + if (showErrorMessage) { + ElMessage.error({ message: data.msg ? data.msg : '操作失败', grouping: true }) + } + // return Promise.reject(res) + } + + return res + }, + async (error) => { + error.config && this.removePending(error.config) + loading && this.closeLoading(loading) + + //刷新token + if (login && error?.response?.status === 401) { + return this.refreshToken(error.config) + } + + //错误处理 + if (showErrorMessage) { + this.errorHandle(error) + } + + return Promise.reject(error) + } + ) + + return this.instance.request({ + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), + } as RawAxiosRequestHeaders, + params: query, + responseType: responseFormat, + data: body, + url: path, +<% if (config.unwrapResponseData) { %> + }).then(response => returnResponse ? response : response.data); +<% } else { %> + }); +<% } %> + }; +} diff --git a/zhontai.ui.admin.vue3/gen/templates/interface-data-contract.ejs b/zhontai.ui.admin.vue3/gen/templates/interface-data-contract.ejs new file mode 100644 index 0000000..cd20803 --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/templates/interface-data-contract.ejs @@ -0,0 +1,10 @@ +<% +const { contract, utils } = it; +const { formatDescription, require, _ } = utils; +%> +export interface <%~ contract.name %> { + <% _.forEach(contract.$content, (field) => { %> + <%~ includeFile('./object-field-jsdoc.ejs', { ...it, field }) %> + <%~ field.name %><%~ field.isRequired ? '' : '?' %>: <%~ field.value %><%~ field.isNullable ? ' | null' : ''%>; + <% }) %> +} diff --git a/zhontai.ui.admin.vue3/gen/templates/object-field-jsdoc.ejs b/zhontai.ui.admin.vue3/gen/templates/object-field-jsdoc.ejs new file mode 100644 index 0000000..ec39314 --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/templates/object-field-jsdoc.ejs @@ -0,0 +1,28 @@ +<% +const { field, utils } = it; +const { formatDescription, require, _ } = utils; + +const comments = _.uniq( + _.compact([ + field.title, + field.description, + field.deprecated && ` * @deprecated`, + !_.isUndefined(field.format) && `@format ${field.format}`, + !_.isUndefined(field.minimum) && `@min ${field.minimum}`, + !_.isUndefined(field.maximum) && `@max ${field.maximum}`, + !_.isUndefined(field.pattern) && `@pattern ${field.pattern}`, + !_.isUndefined(field.example) && + `@example ${_.isObject(field.example) ? JSON.stringify(field.example) : field.example}`, + ]).reduce((acc, comment) => [...acc, ...comment.split(/\n/g)], []), +); +%> +<% if (comments.length === 1) { %> + /** <%~ comments[0] %> */ +<% } else if (comments.length) { %> + /** + <% comments.forEach(comment => { %> + * <%~ comment %> + + <% }) %> + */ +<% } %> diff --git a/zhontai.ui.admin.vue3/gen/templates/procedure-call.ejs b/zhontai.ui.admin.vue3/gen/templates/procedure-call.ejs new file mode 100644 index 0000000..1e05b85 --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/templates/procedure-call.ejs @@ -0,0 +1,100 @@ +<% +const { utils, route, config } = it; +const { requestBodyInfo, responseBodyInfo, specificArgNameResolver } = route; +const { _, getInlineParseContent, getParseContent, parseSchema, getComponentByRef, require } = utils; +const { parameters, path, method, payload, query, formData, security, requestParams } = route.request; +const { type, errorType, contentTypes } = route.response; +const { HTTP_CLIENT, RESERVED_REQ_PARAMS_ARG_NAMES } = config.constants; +const routeDocs = includeFile("./route-docs", { config, route, utils }); +const queryName = (query && query.name) || "query"; +const pathParams = _.values(parameters); +const pathParamsNames = _.map(pathParams, "name"); + +const isFetchTemplate = config.httpClientType === HTTP_CLIENT.FETCH; + +const requestConfigParam = { + name: specificArgNameResolver.resolve(RESERVED_REQ_PARAMS_ARG_NAMES), + optional: true, + type: "RequestParams", + defaultValue: "{}", +} + +const argToTmpl = ({ name, optional, type, defaultValue }) => `${name}${!defaultValue && optional ? '?' : ''}: ${type}${defaultValue ? ` = ${defaultValue}` : ''}`; + +const rawWrapperArgs = config.extractRequestParams ? + _.compact([ + requestParams && { + name: pathParams.length ? `{ ${_.join(pathParamsNames, ", ")}, ...${queryName} }` : queryName, + optional: false, + type: getInlineParseContent(requestParams), + }, + ...(!requestParams ? pathParams : []), + payload, + requestConfigParam, + ]) : + _.compact([ + ...pathParams, + query, + payload, + requestConfigParam, + ]) + +const wrapperArgs = _ + // Sort by optionality + .sortBy(rawWrapperArgs, [o => o.optional]) + .map(argToTmpl) + .join(', ') + +// RequestParams["type"] +const requestContentKind = { + "JSON": "ContentType.Json", + "URL_ENCODED": "ContentType.UrlEncoded", + "FORM_DATA": "ContentType.FormData", + "TEXT": "ContentType.Text", +} +// RequestParams["format"] +const responseContentKind = { + "JSON": '"json"', + "IMAGE": '"blob"', + "FORM_DATA": isFetchTemplate ? '"formData"' : '"document"' +} + +const bodyTmpl = _.get(payload, "name") || null; +const queryTmpl = (query != null && queryName) || null; +const bodyContentKindTmpl = requestContentKind[requestBodyInfo.contentKind] || null; +const responseFormatTmpl = responseContentKind[responseBodyInfo.success && responseBodyInfo.success.schema && responseBodyInfo.success.schema.contentKind] || null; +const securityTmpl = security ? 'true' : null; + +const describeReturnType = () => { + if (!config.toJS) return ""; + + switch(config.httpClientType) { + case HTTP_CLIENT.AXIOS: { + return `Promise>` + } + default: { + return `Promise` + } + } +} + +%> +/** +<%~ routeDocs.description %> + + *<% /* Here you can add some other JSDoc tags */ %> + +<%~ routeDocs.lines %> + + */ +<%~ route.routeName.usage %> = (<%~ wrapperArgs %>)<%~ config.toJS ? `: ${describeReturnType()}` : "" %> => + <%~ config.singleHttpClient ? 'this.http.request' : 'this.request' %><<%~ type %>, <%~ errorType %>>({ + path: `<%~ path %>`, + method: '<%~ _.upperCase(method) %>', + <%~ queryTmpl ? `query: ${queryTmpl},` : '' %> + <%~ bodyTmpl ? `body: ${bodyTmpl},` : '' %> + <%~ securityTmpl ? `secure: ${securityTmpl},` : '' %> + <%~ bodyContentKindTmpl ? `type: ${bodyContentKindTmpl},` : '' %> + <%~ responseFormatTmpl ? `format: ${responseFormatTmpl},` : '' %> + ...<%~ _.get(requestConfigParam, "name") %>, + }) diff --git a/zhontai.ui.admin.vue3/gen/templates/route-docs.ejs b/zhontai.ui.admin.vue3/gen/templates/route-docs.ejs new file mode 100644 index 0000000..3de625a --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/templates/route-docs.ejs @@ -0,0 +1,30 @@ +<% +const { config, route, utils } = it; +const { _, formatDescription, fmtToJSDocLine, pascalCase, require } = utils; +const { raw, request, routeName } = route; + +const jsDocDescription = raw.description ? + ` * @description ${formatDescription(raw.description, true)}` : + fmtToJSDocLine('No description', { eol: false }); +const jsDocLines = _.compact([ + _.size(raw.tags) && ` * @tags ${raw.tags.join(", ")}`, + ` * @name ${pascalCase(routeName.usage)}`, + raw.summary && ` * @summary ${raw.summary}`, + ` * @request ${_.upperCase(request.method)}:${raw.route}`, + raw.deprecated && ` * @deprecated`, + routeName.duplicate && ` * @originalName ${routeName.original}`, + routeName.duplicate && ` * @duplicate`, + request.security && ` * @secure`, + ...(config.generateResponses && raw.responsesTypes.length + ? raw.responsesTypes.map( + ({ type, status, description, isSuccess }) => + ` * @response \`${status}\` \`${_.replace(_.replace(type, /\/\*/g, "\\*"), /\*\//g, "*\\")}\` ${description}`, + ) + : []), +]).map(str => str.trimEnd()).join("\n"); + +return { + description: jsDocDescription, + lines: jsDocLines, +} +%> diff --git a/zhontai.ui.admin.vue3/gen/templates/route-name.ejs b/zhontai.ui.admin.vue3/gen/templates/route-name.ejs new file mode 100644 index 0000000..d343e9d --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/templates/route-name.ejs @@ -0,0 +1,27 @@ +<% +const { routeInfo, utils } = it; +const { + operationId, + method, + route, + moduleName, + responsesTypes, + description, + tags, + summary, + pathArgs, +} = routeInfo; +const { _, fmtToJSDocLine, require } = utils; + +const createCustomOperationId = (method, route, moduleName) => { + const hasPathInserts = /\{(\w){1,}\}/g.test(route); + const splitedRouteBySlash = _.compact(_.replace(route, /\{(\w){1,}\}/g, "").split("/")); + const routeParts = (splitedRouteBySlash.length > 1 + ? [splitedRouteBySlash[splitedRouteBySlash.length-1]] + : splitedRouteBySlash + ).join("_"); + return _.camelCase(_.lowerCase(routeParts)); +}; + +return createCustomOperationId(method, route, moduleName); +%> \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/gen/templates/route-type.ejs b/zhontai.ui.admin.vue3/gen/templates/route-type.ejs new file mode 100644 index 0000000..e174397 --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/templates/route-type.ejs @@ -0,0 +1,22 @@ +<% +const { route, utils, config } = it; +const { _, pascalCase, require } = utils; +const { query, payload, pathParams, headers } = route.request; + +const routeDocs = includeFile("./route-docs", { config, route, utils }); +const routeNamespace = pascalCase(route.routeName.usage); + +%> +/** +<%~ routeDocs.description %> + +<%~ routeDocs.lines %> + +*/ +export namespace <%~ routeNamespace %> { + export type RequestParams = <%~ (pathParams && pathParams.type) || '{}' %>; + export type RequestQuery = <%~ (query && query.type) || '{}' %>; + export type RequestBody = <%~ (payload && payload.type) || 'never' %>; + export type RequestHeaders = <%~ (headers && headers.type) || '{}' %>; + export type ResponseBody = <%~ route.response.type %>; +} \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/gen/templates/route-types.ejs b/zhontai.ui.admin.vue3/gen/templates/route-types.ejs new file mode 100644 index 0000000..70d07a4 --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/templates/route-types.ejs @@ -0,0 +1,18 @@ +<% +const { utils, config, route, modelTypes } = it; +const { _, pascalCase } = utils; +const { routes, moduleName } = route; +const dataContracts = config.modular ? _.map(modelTypes, "name") : []; + +%> +<% if (dataContracts.length) { %> +import { <%~ dataContracts.join(", ") %> } from "./<%~ config.fileNames.dataContracts %>" +<% } %> + +export namespace <%~ pascalCase(moduleName) %> { + <% _.forEach(routes, (route) => { %> + + <%~ includeFile('./route-type.ejs', { ...it, route }) %> + + <% }) %> +} diff --git a/zhontai.ui.admin.vue3/gen/templates/type-data-contract.ejs b/zhontai.ui.admin.vue3/gen/templates/type-data-contract.ejs new file mode 100644 index 0000000..af88e01 --- /dev/null +++ b/zhontai.ui.admin.vue3/gen/templates/type-data-contract.ejs @@ -0,0 +1,15 @@ +<% +const { contract, utils } = it; +const { formatDescription, require, _ } = utils; + +%> +<% if (contract.$content.length) { %> +export type <%~ contract.name %> = { + <% _.forEach(contract.$content, (field) => { %> + <%~ includeFile('./object-field-jsdoc.ejs', { ...it, field }) %> + <%~ field.field %>; + <% }) %> +}<%~ utils.isNeedToAddNull(contract) ? ' | null' : ''%> +<% } else { %> +export type <%~ contract.name %> = Record; +<% } %> diff --git a/zhontai.ui.admin.vue3/index.html b/zhontai.ui.admin.vue3/index.html new file mode 100644 index 0000000..20dc078 --- /dev/null +++ b/zhontai.ui.admin.vue3/index.html @@ -0,0 +1,27 @@ + + + + + + + + + + NPP 门户网站 + + + +
+ + + + + diff --git a/zhontai.ui.admin.vue3/package-lock.json b/zhontai.ui.admin.vue3/package-lock.json new file mode 100644 index 0000000..fa03c31 --- /dev/null +++ b/zhontai.ui.admin.vue3/package-lock.json @@ -0,0 +1,16717 @@ +{ + "name": "zhontai.ui.admin.vue3", + "version": "9.1.2", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "zhontai.ui.admin.vue3", + "version": "9.1.2", + "license": "MIT", + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "axios": "^1.10.0", + "countup.js": "^2.9.0", + "cropperjs": "^2.0.0", + "dayjs": "^1.11.13", + "echarts": "^5.6.0", + "echarts-gl": "^2.0.9", + "echarts-wordcloud": "^2.1.0", + "element-plus": "2.10.2", + "js-cookie": "^3.0.5", + "js-table2excel": "^1.1.2", + "jsoneditor": "^10.2.0", + "jsplumb": "^2.15.6", + "lodash-es": "^4.17.21", + "mitt": "^3.0.1", + "nprogress": "^0.2.0", + "pinia": "^3.0.3", + "print-js": "^1.6.0", + "qrcodejs2-fixes": "^0.0.2", + "qs": "^6.14.0", + "screenfull": "^6.0.2", + "sm-crypto-v2": "^1.12.0", + "sortablejs": "^1.15.6", + "splitpanes": "^4.0.4", + "vue": "3.5.16", + "vue-clipboard3": "^2.0.0", + "vue-demi": "^0.14.10", + "vue-grid-layout": "^3.0.0-beta1", + "vue-i18n": "^11.1.5", + "vue-plugin-hiprint": "^0.0.60", + "vue-router": "^4.5.1", + "vue3-tree-org": "^4.2.2" + }, + "devDependencies": { + "@types/lodash-es": "^4.17.12", + "@types/node": "^24.0.3", + "@types/nprogress": "^0.2.3", + "@types/sortablejs": "^1.15.8", + "@typescript-eslint/eslint-plugin": "^8.34.1", + "@typescript-eslint/parser": "^8.34.1", + "@vitejs/plugin-vue": "^5.2.4", + "@vue/compiler-sfc": "^3.5.16", + "dotenv": "16.5.0", + "ejs": "^3.1.10", + "eslint": "^9.29.0", + "eslint-plugin-vue": "^10.2.0", + "prettier": "^3.5.3", + "sass": "^1.89.2", + "swagger-typescript-api": "13.0.28", + "typescript": "^5.8.3", + "vite": "^6.3.5", + "vite-plugin-compression": "0.5.1", + "vite-plugin-svg-icons": "^2.0.1", + "vite-plugin-vue-setup-extend": "^0.4.0", + "vue-eslint-parser": "^10.1.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">= 7.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@claviska/jquery-minicolors": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@claviska/jquery-minicolors/-/jquery-minicolors-2.3.6.tgz", + "integrity": "sha512-8Ro6D4GCrmOl41+6w4NFhEOpx8vjxwVRI69bulXsFDt49uVRKhLU5TnzEV7AmOJrylkVq+ugnYNMiGHBieeKUQ==", + "peerDependencies": { + "jquery": ">= 1.7.x" + } + }, + "node_modules/@cropper/element": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element/-/element-2.0.0.tgz", + "integrity": "sha512-lsthn0nQq73GExUE7Mg/ss6Q3RXADGDv055hxoLFwvl/wGHgy6ZkYlfLZ/VmgBHC6jDK5IgPBFnqrPqlXWSGBA==", + "dependencies": { + "@cropper/utils": "^2.0.0" + } + }, + "node_modules/@cropper/element-canvas": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-canvas/-/element-canvas-2.0.0.tgz", + "integrity": "sha512-GPtGJgSm92crJhhhwUsaMw3rz2KfJWWSz7kRAlufFEV/EHTP5+6r6/Z1BCGRna830i+Avqbm435XLOtA7PVJwA==", + "dependencies": { + "@cropper/element": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "node_modules/@cropper/element-crosshair": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-crosshair/-/element-crosshair-2.0.0.tgz", + "integrity": "sha512-KfPfyrdeFvUC31Ws7ATtcalWWSaMtrC6bMoCipZhqbUOE7wZoL4ecDSL6BUOZxPa74awZUqfzirCDjHvheBfyw==", + "dependencies": { + "@cropper/element": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "node_modules/@cropper/element-grid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-grid/-/element-grid-2.0.0.tgz", + "integrity": "sha512-i78SQ0IJTLFveKX6P7svkfMYVdgHrQ8ZmmEw8keFy9n1ZVbK+SK0UHK5FNMRNI/gtVhKJOGEnK/zeyjUdj4Iyw==", + "dependencies": { + "@cropper/element": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "node_modules/@cropper/element-handle": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-handle/-/element-handle-2.0.0.tgz", + "integrity": "sha512-ZJvW+0MkK9E8xYymGdoruaQn2kwjSHFpNSWinjyq6csuVQiCPxlX5ovAEDldmZ9MWePPtWEi3vLKQOo2Yb0T8g==", + "dependencies": { + "@cropper/element": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "node_modules/@cropper/element-image": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-image/-/element-image-2.0.0.tgz", + "integrity": "sha512-9BxiTS/aHRmrjopaFQb9mQQXmx4ruhYHGkDZMVz24AXpMFjUY6OpqrWse/WjzD9tfhMFvEdu17b3VAekcAgpeg==", + "dependencies": { + "@cropper/element": "^2.0.0", + "@cropper/element-canvas": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "node_modules/@cropper/element-selection": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-selection/-/element-selection-2.0.0.tgz", + "integrity": "sha512-ensNnbIfJsJ8bhbJTH/RXtk2URFvTOO4TvfRk461n2FPEC588D7rwBmUJxQg74IiTi4y1JbCI+6j+4LyzYBLCQ==", + "dependencies": { + "@cropper/element": "^2.0.0", + "@cropper/element-canvas": "^2.0.0", + "@cropper/element-image": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "node_modules/@cropper/element-shade": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-shade/-/element-shade-2.0.0.tgz", + "integrity": "sha512-jv/2bbNZnhU4W+T4G0c8ADocLIZvQFTXgCf2RFDNhI5UVxurzWBnDdb8Mx8LnVplnkTqO+xUmHZYve0CwgWo+Q==", + "dependencies": { + "@cropper/element": "^2.0.0", + "@cropper/element-canvas": "^2.0.0", + "@cropper/element-selection": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "node_modules/@cropper/element-viewer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-viewer/-/element-viewer-2.0.0.tgz", + "integrity": "sha512-zY+3VRN5TvpM8twlphYtXw0tzJL2VgzeK7ufhL1BixVqOdRxwP13TprYIhqwGt9EW/SyJZUiaIu396T89kRX8A==", + "dependencies": { + "@cropper/element": "^2.0.0", + "@cropper/element-canvas": "^2.0.0", + "@cropper/element-image": "^2.0.0", + "@cropper/element-selection": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "node_modules/@cropper/elements": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/elements/-/elements-2.0.0.tgz", + "integrity": "sha512-PQkPo1nUjxLFUQuHYu+6atfHxpX9B41Xribao6wpvmvmNIFML6LQdNqqWYb6LyM7ujsu71CZdBiMT5oetjJVoQ==", + "dependencies": { + "@cropper/element": "^2.0.0", + "@cropper/element-canvas": "^2.0.0", + "@cropper/element-crosshair": "^2.0.0", + "@cropper/element-grid": "^2.0.0", + "@cropper/element-handle": "^2.0.0", + "@cropper/element-image": "^2.0.0", + "@cropper/element-selection": "^2.0.0", + "@cropper/element-shade": "^2.0.0", + "@cropper/element-viewer": "^2.0.0" + } + }, + "node_modules/@cropper/utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/utils/-/utils-2.0.0.tgz", + "integrity": "sha512-cprLYr+7kK3faGgoOsTW9gIn5sefDr2KwOmgyjzIXk+8PLpW8FgFKEg5FoWfRD5zMAmkCBuX6rGKDK3VdUEGrg==" + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz", + "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.3.tgz", + "integrity": "sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.29.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz", + "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz", + "integrity": "sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.15.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.0.tgz", + "integrity": "sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@exodus/schemasafe": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz", + "integrity": "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==", + "dev": true + }, + "node_modules/@floating-ui/core": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.1.tgz", + "integrity": "sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.1.tgz", + "integrity": "sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==", + "dependencies": { + "@floating-ui/core": "^1.7.1", + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==" + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@interactjs/actions": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/actions/-/actions-1.10.27.tgz", + "integrity": "sha512-FCRg5KwB+stkPcAMx/Cn0fgGP6p4LyMX9S/Upcn/W+hpYme31bPi54PCqmOebzz6myTthN6zFf9jMyLOqtI/gg==", + "optionalDependencies": { + "@interactjs/interact": "1.10.27" + }, + "peerDependencies": { + "@interactjs/core": "1.10.27", + "@interactjs/utils": "1.10.27" + } + }, + "node_modules/@interactjs/auto-scroll": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/auto-scroll/-/auto-scroll-1.10.27.tgz", + "integrity": "sha512-zPg5TnVsZv+9Hnt4qnbxLvBMf+rIWHkoJVoSETEbLNaj90C8hIyr0pVwukSUySSgDhCgQ7np0f3pg4INLq9beQ==", + "optionalDependencies": { + "@interactjs/interact": "1.10.27" + }, + "peerDependencies": { + "@interactjs/utils": "1.10.27" + } + }, + "node_modules/@interactjs/auto-start": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/auto-start/-/auto-start-1.10.27.tgz", + "integrity": "sha512-ECLBO/nxmaF1knncJKIE5F7la3KKRgEkn0Cu2JTPOYj9xy/LpfYElo3wkRHsodgOqF651nR70GK2/IzPR2lO9A==", + "optionalDependencies": { + "@interactjs/interact": "1.10.27" + }, + "peerDependencies": { + "@interactjs/core": "1.10.27", + "@interactjs/utils": "1.10.27" + } + }, + "node_modules/@interactjs/core": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/core/-/core-1.10.27.tgz", + "integrity": "sha512-SliUr/3ZbLAdED8LokzYzWHWMdCB5Cq+UnpXuRy+BIod1j97m4IUFf/D1iIKUBBjBcucgXbz28z96WnenVCB7Q==", + "peerDependencies": { + "@interactjs/utils": "1.10.27" + } + }, + "node_modules/@interactjs/dev-tools": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/dev-tools/-/dev-tools-1.10.27.tgz", + "integrity": "sha512-YolmBwRaKH1gWbvyLeV3m5QSwtD38lOZnCBA87PCAlcd9PQAC2gb03fEPeEyD336bE20oLB8f0WZt4Wre+afiw==", + "optionalDependencies": { + "@interactjs/interact": "1.10.27", + "vue": "3" + }, + "peerDependencies": { + "@interactjs/modifiers": "1.10.27", + "@interactjs/utils": "1.10.27" + } + }, + "node_modules/@interactjs/inertia": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/inertia/-/inertia-1.10.27.tgz", + "integrity": "sha512-S/SVj/M0D+wWWPVXHcXN/YUWOK51LFJsEA+CTgVnFhlSU04+1FUvNLwilCZcHgECu1RJxZNKDwZysDATg+r8jQ==", + "dependencies": { + "@interactjs/offset": "1.10.27" + }, + "optionalDependencies": { + "@interactjs/interact": "1.10.27" + }, + "peerDependencies": { + "@interactjs/core": "1.10.27", + "@interactjs/modifiers": "1.10.27", + "@interactjs/utils": "1.10.27" + } + }, + "node_modules/@interactjs/interact": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/interact/-/interact-1.10.27.tgz", + "integrity": "sha512-XdH3A2UUzjEFGGJgFuJlhiz99tE8jB8xNh/DmnoMuL6uOQPxNA+sWRnzEVjG0+zY2P3/dbhEpi4Cn3FLPzydwA==", + "dependencies": { + "@interactjs/core": "1.10.27", + "@interactjs/utils": "1.10.27" + } + }, + "node_modules/@interactjs/interactjs": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/interactjs/-/interactjs-1.10.27.tgz", + "integrity": "sha512-UwhfUZMZVXUY72efPABuKSBz1sUY+r+49v8t6Ku9o5Jq76AKg9mwmdGszIlOn3ppnFDDjvtzK/8TL+Sbd0EQEA==", + "dependencies": { + "@interactjs/actions": "1.10.27", + "@interactjs/auto-scroll": "1.10.27", + "@interactjs/auto-start": "1.10.27", + "@interactjs/core": "1.10.27", + "@interactjs/dev-tools": "1.10.27", + "@interactjs/inertia": "1.10.27", + "@interactjs/interact": "1.10.27", + "@interactjs/modifiers": "1.10.27", + "@interactjs/offset": "1.10.27", + "@interactjs/pointer-events": "1.10.27", + "@interactjs/reflow": "1.10.27", + "@interactjs/utils": "1.10.27" + } + }, + "node_modules/@interactjs/modifiers": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/modifiers/-/modifiers-1.10.27.tgz", + "integrity": "sha512-ei/qfoQ+9/8k6WzNzdNqHI6cWkIV576N4Ap16r5CoqOWwhA6Xzj3OMHf1g0t1O4eSq2HdJsVJn3eLNfw9HsbeQ==", + "dependencies": { + "@interactjs/snappers": "1.10.27" + }, + "optionalDependencies": { + "@interactjs/interact": "1.10.27" + }, + "peerDependencies": { + "@interactjs/core": "1.10.27", + "@interactjs/utils": "1.10.27" + } + }, + "node_modules/@interactjs/offset": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/offset/-/offset-1.10.27.tgz", + "integrity": "sha512-AezsLiuK+Qv4jXdYuRa65HJ2pMFMZPlqiAep6ZRLwhP9HE7O75c0EAm+gfx+dpPrHNHs6J9LaiKSZl+B+A2qAw==", + "optionalDependencies": { + "@interactjs/interact": "1.10.27" + }, + "peerDependencies": { + "@interactjs/core": "1.10.27", + "@interactjs/utils": "1.10.27" + } + }, + "node_modules/@interactjs/pointer-events": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/pointer-events/-/pointer-events-1.10.27.tgz", + "integrity": "sha512-Yo5SS6PhWfC93gHNxnwwW0wvebo5hSYJKGaSnAHO4f9Lh25yibecMnmPBmiEfWVcdMboK/kXrme43mHQaRegVg==", + "optionalDependencies": { + "@interactjs/interact": "1.10.27" + }, + "peerDependencies": { + "@interactjs/core": "1.10.27", + "@interactjs/utils": "1.10.27" + } + }, + "node_modules/@interactjs/reflow": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/reflow/-/reflow-1.10.27.tgz", + "integrity": "sha512-Msm0QdYFr40oSsPFxyCR3dHN/pQx34k7QSkdN1uIsUn/drrm+YSFvrvVOu99DFOwr7gTThr5vNe06Sz4vubTSA==", + "optionalDependencies": { + "@interactjs/interact": "1.10.27" + }, + "peerDependencies": { + "@interactjs/core": "1.10.27", + "@interactjs/utils": "1.10.27" + } + }, + "node_modules/@interactjs/snappers": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/snappers/-/snappers-1.10.27.tgz", + "integrity": "sha512-HZLZ0XSi6HI08OmTv/HKG6AltQoaKAALLQ+KDW92utj3XSgw7oren0KsWUKPhaPg3Av7R1jFQd08s+uafqIlLw==", + "optionalDependencies": { + "@interactjs/interact": "1.10.27" + }, + "peerDependencies": { + "@interactjs/utils": "1.10.27" + } + }, + "node_modules/@interactjs/utils": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/utils/-/utils-1.10.27.tgz", + "integrity": "sha512-+qfLOio2OxQqg1cXSnRaCl+N8MQDQLDS9w+aOGxH8YLAhIMyt7Asxx/46//sT8orgsi16pmlBPtngPHT9s8zKw==" + }, + "node_modules/@intlify/core-base": { + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.1.7.tgz", + "integrity": "sha512-gYiGnQeJVp3kNBeXQ73m1uFOak0ry4av8pn+IkEWigyyPWEMGzB+xFeQdmGMFn49V+oox6294oGVff8bYOhtOw==", + "dependencies": { + "@intlify/message-compiler": "11.1.7", + "@intlify/shared": "11.1.7" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.1.7.tgz", + "integrity": "sha512-0ezkep1AT30NyuKj8QbRlmvMORCCRlOIIu9v8RNU8SwDjjTiFCZzczCORMns2mCH4HZ1nXgrfkKzYUbfjNRmng==", + "dependencies": { + "@intlify/shared": "11.1.7", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.1.7.tgz", + "integrity": "sha512-4yZeMt2Aa/7n5Ehy4KalUlvt3iRLcg1tq9IBVfOgkyWFArN4oygn6WxgGIFibP3svpaH8DarbNaottq+p0gUZQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@noble/ciphers": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", + "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.2.tgz", + "integrity": "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.0.tgz", + "integrity": "sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.0.tgz", + "integrity": "sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.0.tgz", + "integrity": "sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.0.tgz", + "integrity": "sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.0.tgz", + "integrity": "sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.0.tgz", + "integrity": "sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.0.tgz", + "integrity": "sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.0.tgz", + "integrity": "sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.0.tgz", + "integrity": "sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.0.tgz", + "integrity": "sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.0.tgz", + "integrity": "sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.0.tgz", + "integrity": "sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.0.tgz", + "integrity": "sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.0.tgz", + "integrity": "sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.0.tgz", + "integrity": "sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.0.tgz", + "integrity": "sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.0.tgz", + "integrity": "sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.0.tgz", + "integrity": "sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.0.tgz", + "integrity": "sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.0.tgz", + "integrity": "sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" + }, + "node_modules/@sphinxxxx/color-conversion": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz", + "integrity": "sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==" + }, + "node_modules/@transloadit/prettier-bytes": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz", + "integrity": "sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==" + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "node_modules/@types/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@types/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.17.18", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.18.tgz", + "integrity": "sha512-KJ65INaxqxmU6EoCiJmRPZC9H9RVWCRd349tXM2M3O5NA7cY6YL7c0bHAHQ93NOfTObEQ004kd2QVHs/r0+m4g==" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/node": { + "version": "24.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", + "integrity": "sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==", + "dev": true, + "dependencies": { + "undici-types": "~7.8.0" + } + }, + "node_modules/@types/nprogress": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.3.tgz", + "integrity": "sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==", + "dev": true + }, + "node_modules/@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==" + }, + "node_modules/@types/sortablejs": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.8.tgz", + "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==", + "dev": true + }, + "node_modules/@types/svgo": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-2.6.4.tgz", + "integrity": "sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/swagger-schema-official": { + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@types/swagger-schema-official/-/swagger-schema-official-2.0.25.tgz", + "integrity": "sha512-T92Xav+Gf/Ik1uPW581nA+JftmjWPgskw/WBf4TJzxRG/SJ+DfNnNE+WuZ4mrXuzflQMqMkm1LSYjzYW7MB1Cg==", + "dev": true + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz", + "integrity": "sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/type-utils": "8.34.1", + "@typescript-eslint/utils": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.34.1", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz", + "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/typescript-estree": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz", + "integrity": "sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==", + "dev": true, + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.34.1", + "@typescript-eslint/types": "^8.34.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", + "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz", + "integrity": "sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz", + "integrity": "sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.34.1", + "@typescript-eslint/utils": "8.34.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", + "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", + "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", + "dev": true, + "dependencies": { + "@typescript-eslint/project-service": "8.34.1", + "@typescript-eslint/tsconfig-utils": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.1.tgz", + "integrity": "sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/typescript-estree": "8.34.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", + "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.34.1", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@uppy/companion-client": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-2.2.2.tgz", + "integrity": "sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==", + "dependencies": { + "@uppy/utils": "^4.1.2", + "namespace-emitter": "^2.0.1" + } + }, + "node_modules/@uppy/core": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@uppy/core/-/core-2.3.4.tgz", + "integrity": "sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==", + "dependencies": { + "@transloadit/prettier-bytes": "0.0.7", + "@uppy/store-default": "^2.1.1", + "@uppy/utils": "^4.1.3", + "lodash.throttle": "^4.1.1", + "mime-match": "^1.0.2", + "namespace-emitter": "^2.0.1", + "nanoid": "^3.1.25", + "preact": "^10.5.13" + } + }, + "node_modules/@uppy/store-default": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@uppy/store-default/-/store-default-2.1.1.tgz", + "integrity": "sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==" + }, + "node_modules/@uppy/utils": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@uppy/utils/-/utils-4.1.3.tgz", + "integrity": "sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==", + "dependencies": { + "lodash.throttle": "^4.1.1" + } + }, + "node_modules/@uppy/xhr-upload": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz", + "integrity": "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==", + "dependencies": { + "@uppy/companion-client": "^2.2.2", + "@uppy/utils": "^4.1.2", + "nanoid": "^3.1.25" + }, + "peerDependencies": { + "@uppy/core": "^2.3.3" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.17.tgz", + "integrity": "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.27.5", + "@vue/shared": "3.5.17", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.17.tgz", + "integrity": "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.5.17", + "@vue/shared": "3.5.17" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.17.tgz", + "integrity": "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.27.5", + "@vue/compiler-core": "3.5.17", + "@vue/compiler-dom": "3.5.17", + "@vue/compiler-ssr": "3.5.17", + "@vue/shared": "3.5.17", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.17.tgz", + "integrity": "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.5.17", + "@vue/shared": "3.5.17" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "dependencies": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.16.tgz", + "integrity": "sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA==", + "dependencies": { + "@vue/shared": "3.5.16" + } + }, + "node_modules/@vue/reactivity/node_modules/@vue/shared": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz", + "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==" + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.16.tgz", + "integrity": "sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ==", + "dependencies": { + "@vue/reactivity": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "node_modules/@vue/runtime-core/node_modules/@vue/shared": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz", + "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==" + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.16.tgz", + "integrity": "sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww==", + "dependencies": { + "@vue/reactivity": "3.5.16", + "@vue/runtime-core": "3.5.16", + "@vue/shared": "3.5.16", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/runtime-dom/node_modules/@vue/shared": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz", + "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==" + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.16.tgz", + "integrity": "sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg==", + "dependencies": { + "@vue/compiler-ssr": "3.5.16", + "@vue/shared": "3.5.16" + }, + "peerDependencies": { + "vue": "3.5.16" + } + }, + "node_modules/@vue/server-renderer/node_modules/@vue/compiler-core": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.16.tgz", + "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==", + "dependencies": { + "@babel/parser": "^7.27.2", + "@vue/shared": "3.5.16", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/server-renderer/node_modules/@vue/compiler-dom": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz", + "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==", + "dependencies": { + "@vue/compiler-core": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "node_modules/@vue/server-renderer/node_modules/@vue/compiler-ssr": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.16.tgz", + "integrity": "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==", + "dependencies": { + "@vue/compiler-dom": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "node_modules/@vue/server-renderer/node_modules/@vue/shared": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz", + "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==" + }, + "node_modules/@vue/shared": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.17.tgz", + "integrity": "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==", + "dev": true + }, + "node_modules/@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@wangeditor/basic-modules": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz", + "integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==", + "dependencies": { + "is-url": "^1.2.4" + }, + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.throttle": "^4.1.1", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/code-highlight": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz", + "integrity": "sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==", + "dependencies": { + "prismjs": "^1.23.0" + }, + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/core": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@wangeditor/core/-/core-1.1.19.tgz", + "integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==", + "dependencies": { + "@types/event-emitter": "^0.3.3", + "event-emitter": "^0.3.5", + "html-void-elements": "^2.0.0", + "i18next": "^20.4.0", + "scroll-into-view-if-needed": "^2.2.28", + "slate-history": "^0.66.0" + }, + "peerDependencies": { + "@uppy/core": "^2.1.1", + "@uppy/xhr-upload": "^2.0.3", + "dom7": "^3.0.0", + "is-hotkey": "^0.2.0", + "lodash.camelcase": "^4.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "lodash.foreach": "^4.5.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "lodash.toarray": "^4.4.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/editor": { + "version": "5.1.23", + "resolved": "https://registry.npmjs.org/@wangeditor/editor/-/editor-5.1.23.tgz", + "integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==", + "dependencies": { + "@uppy/core": "^2.1.1", + "@uppy/xhr-upload": "^2.0.3", + "@wangeditor/basic-modules": "^1.1.7", + "@wangeditor/code-highlight": "^1.0.3", + "@wangeditor/core": "^1.1.19", + "@wangeditor/list-module": "^1.0.5", + "@wangeditor/table-module": "^1.1.4", + "@wangeditor/upload-image-module": "^1.0.2", + "@wangeditor/video-module": "^1.1.4", + "dom7": "^3.0.0", + "is-hotkey": "^0.2.0", + "lodash.camelcase": "^4.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "lodash.foreach": "^4.5.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "lodash.toarray": "^4.4.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/editor-for-vue": { + "version": "5.1.12", + "resolved": "https://registry.npmjs.org/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz", + "integrity": "sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==", + "peerDependencies": { + "@wangeditor/editor": ">=5.1.0", + "vue": "^3.0.5" + } + }, + "node_modules/@wangeditor/list-module": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@wangeditor/list-module/-/list-module-1.0.5.tgz", + "integrity": "sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==", + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/table-module": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@wangeditor/table-module/-/table-module-1.1.4.tgz", + "integrity": "sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==", + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/upload-image-module": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz", + "integrity": "sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==", + "peerDependencies": { + "@uppy/core": "^2.0.3", + "@uppy/xhr-upload": "^2.0.3", + "@wangeditor/basic-modules": "1.x", + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.foreach": "^4.5.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/video-module": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@wangeditor/video-module/-/video-module-1.1.4.tgz", + "integrity": "sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==", + "peerDependencies": { + "@uppy/core": "^2.1.4", + "@uppy/xhr-upload": "^2.0.7", + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wtto00/html2canvas": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@wtto00/html2canvas/-/html2canvas-1.4.3.tgz", + "integrity": "sha512-jwsb+xL8N+gjrSNABSaFdxmWtE4c7RNFjP20lo1G7gs63Qqo1phhxVBTzxc/apDVh6LgXsU2l5bwKtXd9uz65w==", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ace-builds": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.43.0.tgz", + "integrity": "sha512-iBkvY7owAPCquKCenPCEl4YVDOo9YPRfAZbOuzGcyJlMYhiA5aIEjFPZsYZvX1ZQ1Rq4cfYRhJjixSYcpDPOoQ==" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", + "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/batch-processor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", + "integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/birpc": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.4.0.tgz", + "integrity": "sha512-5IdNxTyhXHv2UlgnPHQ0h+5ypVmkrYHzL8QT+DwFZ//2N/oNV8Ch+BCRmTJ3x6/z9Axo/cXYBc9eprsUVK/Jsg==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/bwip-js": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/bwip-js/-/bwip-js-4.6.0.tgz", + "integrity": "sha512-Djr1aQ3d1N8rpLz5XgbpNW/yrP4owC+rk5/pZTSzkqXY0WvqzJ0yJTxA8JJA6WDxOAP1hP70AcnTxiDvthy+/g==", + "bin": { + "bwip-js": "bin/bwip-js.js" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/canvg": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.11.tgz", + "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dev": true, + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/class-utils/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/claygl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/claygl/-/claygl-1.3.0.tgz", + "integrity": "sha512-+gGtJjT6SSHD2l2yC3MCubW/sCV40tZuSs5opdtn79vFSGUgp/lH139RNEQ6Jy078/L0aV8odCw8RSrUcMfLaQ==" + }, + "node_modules/clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.43.0.tgz", + "integrity": "sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/countup.js": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/countup.js/-/countup.js-2.9.0.tgz", + "integrity": "sha512-llqrvyXztRFPp6+i8jx25phHWcVWhrHO4Nlt0uAOSKHB8778zzQswa4MU3qKBvkXfJKftRYFJuVHez67lyKdHg==" + }, + "node_modules/cropperjs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-2.0.0.tgz", + "integrity": "sha512-TO2j0Qre01kPHbow4FuTrbdEB4jTmGRySxW49jyEIqlJZuEBfrvCTT0vC3eRB2WBXudDfKi1Onako6DKWKxeAQ==", + "dependencies": { + "@cropper/elements": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/css-select/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/css-select/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/dom7": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dom7/-/dom7-3.0.0.tgz", + "integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==", + "dependencies": { + "ssr-window": "^3.0.0-alpha.1" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/dompurify": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.8.tgz", + "integrity": "sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw==", + "optional": true + }, + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/echarts": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz", + "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.6.1" + } + }, + "node_modules/echarts-gl": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/echarts-gl/-/echarts-gl-2.0.9.tgz", + "integrity": "sha512-oKeMdkkkpJGWOzjgZUsF41DOh6cMsyrGGXimbjK2l6Xeq/dBQu4ShG2w2Dzrs/1bD27b2pLTGSaUzouY191gzA==", + "dependencies": { + "claygl": "^1.2.1", + "zrender": "^5.1.1" + }, + "peerDependencies": { + "echarts": "^5.1.2" + } + }, + "node_modules/echarts-wordcloud": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/echarts-wordcloud/-/echarts-wordcloud-2.1.0.tgz", + "integrity": "sha512-Kt1JmbcROgb+3IMI48KZECK2AP5lG6bSsOEs+AsuwaWJxQom31RTNd6NFYI01E/YaI1PFZeueaupjlmzSQasjQ==", + "peerDependencies": { + "echarts": "^5.0.1" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/element-plus": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.10.2.tgz", + "integrity": "sha512-p2KiAa0jEGXrzdlTAfpiS7HQFAhla4gvx6H7RuDf+OO0uC3DGpolxvdHjFR8gt7+vaWyxQNcHa1sAdBkmjqlgA==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.13", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/element-resize-detector": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz", + "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", + "dependencies": { + "batch-processor": "1.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/engine.io-client": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz", + "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.1.1" + } + }, + "node_modules/engine.io-client/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "dev": true + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz", + "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.1", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.29.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.2.0.tgz", + "integrity": "sha512-tl9s+KN3z0hN2b8fV2xSs5ytGl7Esk1oSCxULLwFcdaElhZ8btYYZFrWxvh4En+czrSDtuLCeCOGa8HhEZuBdQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "vue-eslint-parser": "^10.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", + "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", + "dev": true, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==" + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/form-data": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", + "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "dependencies": { + "delegate": "^3.1.2" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + }, + "node_modules/html-void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", + "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "optional": true, + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "node_modules/http2-client": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz", + "integrity": "sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==", + "dev": true + }, + "node_modules/i18next": { + "version": "20.6.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-20.6.1.tgz", + "integrity": "sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==", + "dependencies": { + "@babel/runtime": "^7.12.0" + } + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hotkey": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.2.0.tgz", + "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==" + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" + }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" + }, + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "engines": { + "node": ">=14" + } + }, + "node_modules/js-table2excel": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/js-table2excel/-/js-table2excel-1.1.2.tgz", + "integrity": "sha512-E5QcPLjlF7qcqqF+DgaPxj9b+lQsItMqkwcXKpODtZ8zo5f07huuvem3Ek1WYzOcSOalU7RwEAG/66WQ5PVfWA==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbarcode": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/jsbarcode/-/jsbarcode-3.12.1.tgz", + "integrity": "sha512-QZQSqIknC2Rr/YOUyOkCBqsoiBAOTYK+7yNN3JsqfoUtJtkazxNw1dmPpxuv7VVvqW13kA3/mKiLq+s/e3o9hQ==" + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/json-source-map/-/json-source-map-0.6.1.tgz", + "integrity": "sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsoneditor": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/jsoneditor/-/jsoneditor-10.2.0.tgz", + "integrity": "sha512-vwXKAUYQ0EFBUWTq2+wl9fi+rf4K4f/xdw6nyJdlXeQ374/NnaBobYmZUosuv9nMMPRP4KbfUGhZ3GH1l4QZqg==", + "dependencies": { + "ace-builds": "^1.36.2", + "ajv": "^6.12.6", + "javascript-natural-sort": "^0.7.1", + "jmespath": "^0.16.0", + "json-source-map": "^0.6.1", + "jsonrepair": "^3.8.1", + "picomodal": "^3.0.0", + "vanilla-picker": "^2.12.3" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonrepair": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/jsonrepair/-/jsonrepair-3.12.0.tgz", + "integrity": "sha512-SWfjz8SuQ0wZjwsxtSJ3Zy8vvLg6aO/kxcp9TWNPGwJKgTZVfhNEQBMk/vPOpYCDFWRxD6QWuI6IHR1t615f0w==", + "bin": { + "jsonrepair": "bin/cli.js" + } + }, + "node_modules/jspdf": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.2.tgz", + "integrity": "sha512-myeX9c+p7znDWPk0eTrujCzNjT+CXdXyk7YmJq5nD5V7uLLKmSXnlQ/Jn/kuo3X09Op70Apm0rQSnFWyGK8uEQ==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "fflate": "^0.8.1" + }, + "optionalDependencies": { + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.5.4", + "html2canvas": "^1.0.0-rc.5" + } + }, + "node_modules/jsplumb": { + "version": "2.15.6", + "resolved": "https://registry.npmjs.org/jsplumb/-/jsplumb-2.15.6.tgz", + "integrity": "sha512-sIpbpz5eMVM+vV+MQzFCidlaa1RsknrQs6LOTKYDjYUDdTAi2AN2bFi94TxB33TifcIsRNV1jebcaxg0tCoPzg==" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead." + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + }, + "node_modules/lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==" + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/merge-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", + "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mime-match/-/mime-match-1.0.2.tgz", + "integrity": "sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==", + "dependencies": { + "wildcard": "^1.1.0" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/namespace-emitter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/namespace-emitter/-/namespace-emitter-2.0.1.tgz", + "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "optional": true + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-h2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz", + "integrity": "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==", + "dev": true, + "dependencies": { + "http2-client": "^1.2.5" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-readfiles": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz", + "integrity": "sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==", + "dev": true, + "dependencies": { + "es6-promise": "^3.2.1" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nzh": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/nzh/-/nzh-1.0.14.tgz", + "integrity": "sha512-wKgaqCSZdrySvB4RWop5g+v6IDv2IErsT6rjq06Bg0yiT9hiHYZO12GMGx/xweGVLcO2lDjX5RqWD0S/Jy9z5Q==" + }, + "node_modules/oas-kit-common": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz", + "integrity": "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==", + "dev": true, + "dependencies": { + "fast-safe-stringify": "^2.0.7" + } + }, + "node_modules/oas-linter": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/oas-linter/-/oas-linter-3.2.2.tgz", + "integrity": "sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==", + "dev": true, + "dependencies": { + "@exodus/schemasafe": "^1.0.0-rc.2", + "should": "^13.2.1", + "yaml": "^1.10.0" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-linter/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/oas-resolver": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.6.tgz", + "integrity": "sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==", + "dev": true, + "dependencies": { + "node-fetch-h2": "^2.3.0", + "oas-kit-common": "^1.0.8", + "reftools": "^1.1.9", + "yaml": "^1.10.0", + "yargs": "^17.0.1" + }, + "bin": { + "resolve": "resolve.js" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-resolver/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/oas-schema-walker": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz", + "integrity": "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==", + "dev": true, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-validator": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/oas-validator/-/oas-validator-5.0.8.tgz", + "integrity": "sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==", + "dev": true, + "dependencies": { + "call-me-maybe": "^1.0.1", + "oas-kit-common": "^1.0.8", + "oas-linter": "^3.2.2", + "oas-resolver": "^2.5.6", + "oas-schema-walker": "^1.1.5", + "reftools": "^1.1.9", + "should": "^13.2.1", + "yaml": "^1.10.0" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-validator/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-visit/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.2.0.tgz", + "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", + "dev": true + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/picomodal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/picomodal/-/picomodal-3.0.0.tgz", + "integrity": "sha512-FoR3TDfuLlqUvcEeK5ifpKSVVns6B4BQvc8SDF6THVMuadya6LLtji0QgUDSStw0ZR2J7I6UGi5V2V23rnPWTw==" + }, + "node_modules/pinia": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", + "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-prefix-selector": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.1.tgz", + "integrity": "sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==", + "dev": true, + "peerDependencies": { + "postcss": ">4 <9" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/posthtml": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz", + "integrity": "sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==", + "dev": true, + "dependencies": { + "posthtml-parser": "^0.2.0", + "posthtml-render": "^1.0.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posthtml-parser": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz", + "integrity": "sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==", + "dev": true, + "dependencies": { + "htmlparser2": "^3.8.3", + "isobject": "^2.1.0" + } + }, + "node_modules/posthtml-rename-id": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz", + "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==", + "dev": true, + "dependencies": { + "escape-string-regexp": "1.0.5" + } + }, + "node_modules/posthtml-rename-id/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/posthtml-render": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz", + "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/posthtml-svg-mode": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz", + "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==", + "dev": true, + "dependencies": { + "merge-options": "1.0.1", + "posthtml": "^0.9.2", + "posthtml-parser": "^0.2.1", + "posthtml-render": "^1.0.6" + } + }, + "node_modules/preact": { + "version": "10.26.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.26.9.tgz", + "integrity": "sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.0.tgz", + "integrity": "sha512-ujSB9uXHJKzM/2GBuE0hBOUgC77CN3Bnpqa+g80bkv3T3A93wL/xlzDATHhnhkzifz/UE2SNOvmbTz5hSkDlHw==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/print-js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/print-js/-/print-js-1.6.0.tgz", + "integrity": "sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg==" + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcodejs2-fixes": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/qrcodejs2-fixes/-/qrcodejs2-fixes-0.0.2.tgz", + "integrity": "sha512-wMUXYMOixAEJlLnjk5MbLiFaz0gQObWYm/TIFWB5+j7sTY5gPyr09Cx1EpcLYbsgfFdN3wHjrKAhZofTuCBGhg==" + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reftools": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", + "integrity": "sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==", + "dev": true, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" + }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "engines": { + "node": ">= 0.8.15" + } + }, + "node_modules/rollup": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.0.tgz", + "integrity": "sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.44.0", + "@rollup/rollup-android-arm64": "4.44.0", + "@rollup/rollup-darwin-arm64": "4.44.0", + "@rollup/rollup-darwin-x64": "4.44.0", + "@rollup/rollup-freebsd-arm64": "4.44.0", + "@rollup/rollup-freebsd-x64": "4.44.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.44.0", + "@rollup/rollup-linux-arm-musleabihf": "4.44.0", + "@rollup/rollup-linux-arm64-gnu": "4.44.0", + "@rollup/rollup-linux-arm64-musl": "4.44.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.44.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.44.0", + "@rollup/rollup-linux-riscv64-gnu": "4.44.0", + "@rollup/rollup-linux-riscv64-musl": "4.44.0", + "@rollup/rollup-linux-s390x-gnu": "4.44.0", + "@rollup/rollup-linux-x64-gnu": "4.44.0", + "@rollup/rollup-linux-x64-musl": "4.44.0", + "@rollup/rollup-win32-arm64-msvc": "4.44.0", + "@rollup/rollup-win32-ia32-msvc": "4.44.0", + "@rollup/rollup-win32-x64-msvc": "4.44.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sass": { + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", + "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", + "dev": true, + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/screenfull": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-6.0.2.tgz", + "integrity": "sha512-AQdy8s4WhNvUZ6P8F6PB21tSPIYKniic+Ogx0AacBMjKP1GUHN2E9URxQHtCusiwxudnCKkdy4GrHXPPJSkCCw==", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/scroll-into-view-if-needed": { + "version": "2.2.31", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", + "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", + "dependencies": { + "compute-scroll-into-view": "^1.0.20" + } + }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "dev": true, + "dependencies": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "node_modules/should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dev": true, + "dependencies": { + "should-type": "^1.4.0" + } + }, + "node_modules/should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", + "dev": true, + "dependencies": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "node_modules/should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", + "dev": true + }, + "node_modules/should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "dependencies": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "node_modules/should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slate": { + "version": "0.72.8", + "resolved": "https://registry.npmjs.org/slate/-/slate-0.72.8.tgz", + "integrity": "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==", + "dependencies": { + "immer": "^9.0.6", + "is-plain-object": "^5.0.0", + "tiny-warning": "^1.0.3" + } + }, + "node_modules/slate-history": { + "version": "0.66.0", + "resolved": "https://registry.npmjs.org/slate-history/-/slate-history-0.66.0.tgz", + "integrity": "sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==", + "dependencies": { + "is-plain-object": "^5.0.0" + }, + "peerDependencies": { + "slate": ">=0.65.3" + } + }, + "node_modules/sm-crypto-v2": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/sm-crypto-v2/-/sm-crypto-v2-1.12.0.tgz", + "integrity": "sha512-17QAIFXy9TicPTHpS+eDrZZ8dA/yDo9TxgFQEkfFWYZVHzY6dc9H2LoI2ycb+5AyuAiF2ryLzHjkYaMFWDhDfQ==", + "dependencies": { + "@noble/ciphers": "^1.2.1", + "@noble/curves": "^1.1.0" + } + }, + "node_modules/snabbdom": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.6.2.tgz", + "integrity": "sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==", + "engines": { + "node": ">=12.17.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/socket.io-client": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", + "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sortablejs": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.6.tgz", + "integrity": "sha512-aNfiuwMEpfBM/CN6LY0ibyhxPfPbyFeBTYJKCvzkJ2GkUpazIt3H+QIPAMHwqQ7tMKaHz1Qj+rJJCqljnf4p3A==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/splitpanes": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/splitpanes/-/splitpanes-4.0.4.tgz", + "integrity": "sha512-RbysugZhjbCw5fgplvk3hOXr41stahQDtZhHVkhnnJI6H4wlGDhM2kIpbehy7v92duy9GnMa8zIhHigIV1TWtg==", + "funding": { + "url": "https://github.com/sponsors/antoniandre" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/ssr-window": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-3.0.0.tgz", + "integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svg-baker": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz", + "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "clone": "^2.1.1", + "he": "^1.1.1", + "image-size": "^0.5.1", + "loader-utils": "^1.1.0", + "merge-options": "1.0.1", + "micromatch": "3.1.0", + "postcss": "^5.2.17", + "postcss-prefix-selector": "^1.6.0", + "posthtml-rename-id": "^1.0", + "posthtml-svg-mode": "^1.0.3", + "query-string": "^4.3.2", + "traverse": "^0.6.6" + } + }, + "node_modules/svg-baker/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/chalk/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svg-baker/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svg-baker/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/micromatch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz", + "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.2.2", + "define-property": "^1.0.0", + "extend-shallow": "^2.0.1", + "extglob": "^2.0.2", + "fragment-cache": "^0.2.1", + "kind-of": "^5.0.2", + "nanomatch": "^1.2.1", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/svg-baker/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svg-baker/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/swagger-schema-official": { + "version": "2.0.0-bab6bed", + "resolved": "https://registry.npmjs.org/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz", + "integrity": "sha512-rCC0NWGKr/IJhtRuPq/t37qvZHI/mH4I4sxflVM+qgVe5Z2uOCivzWaVbuioJaB61kvm5UvB7b49E+oBY0M8jA==", + "dev": true + }, + "node_modules/swagger-typescript-api": { + "version": "13.0.28", + "resolved": "https://registry.npmjs.org/swagger-typescript-api/-/swagger-typescript-api-13.0.28.tgz", + "integrity": "sha512-8IwPD6nCFDTtzSl8rS7xlAx0NGMpBUlFfccJwgMV7t8d/nKw1yQWPVdC7h94XDsDPrLFvICd5xAJJm2TK2Pcpw==", + "dev": true, + "dependencies": { + "@types/swagger-schema-official": "^2.0.25", + "citty": "^0.1.6", + "consola": "^3.4.2", + "cosmiconfig": "^9.0.0", + "eta": "^2.2.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "nanoid": "^5.1.5", + "prettier": "~3.5.3", + "swagger-schema-official": "2.0.0-bab6bed", + "swagger2openapi": "^7.0.8", + "typescript": "~5.8.2" + }, + "bin": { + "sta": "dist/cli.js", + "swagger-typescript-api": "dist/cli.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/swagger-typescript-api/node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/swagger-typescript-api/node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/swagger2openapi": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz", + "integrity": "sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==", + "dev": true, + "dependencies": { + "call-me-maybe": "^1.0.1", + "node-fetch": "^2.6.1", + "node-fetch-h2": "^2.3.0", + "node-readfiles": "^0.2.0", + "oas-kit-common": "^1.0.8", + "oas-resolver": "^2.5.6", + "oas-schema-walker": "^1.1.5", + "oas-validator": "^5.0.8", + "reftools": "^1.1.9", + "yaml": "^1.10.0", + "yargs": "^17.0.1" + }, + "bin": { + "boast": "boast.js", + "oas-validate": "oas-validate.js", + "swagger2openapi": "swagger2openapi.js" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/swagger2openapi/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-regex/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/traverse": { + "version": "0.6.11", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.11.tgz", + "integrity": "sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==", + "dev": true, + "dependencies": { + "gopd": "^1.2.0", + "typedarray.prototype.slice": "^1.0.5", + "which-typed-array": "^1.1.18" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray.prototype.slice": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.5.tgz", + "integrity": "sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "math-intrinsics": "^1.1.0", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-offset": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "dev": true + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, + "node_modules/vanilla-picker": { + "version": "2.12.3", + "resolved": "https://registry.npmjs.org/vanilla-picker/-/vanilla-picker-2.12.3.tgz", + "integrity": "sha512-qVkT1E7yMbUsB2mmJNFmaXMWE2hF8ffqzMMwe9zdAikd8u2VfnsVY2HQcOUi2F38bgbxzlJBEdS1UUhOXdF9GQ==", + "dependencies": { + "@sphinxxxx/color-conversion": "^2.2.2" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "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 + } + } + }, + "node_modules/vite-plugin-compression": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz", + "integrity": "sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "debug": "^4.3.3", + "fs-extra": "^10.0.0" + }, + "peerDependencies": { + "vite": ">=2.0.0" + } + }, + "node_modules/vite-plugin-svg-icons": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vite-plugin-svg-icons/-/vite-plugin-svg-icons-2.0.1.tgz", + "integrity": "sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==", + "dev": true, + "dependencies": { + "@types/svgo": "^2.6.1", + "cors": "^2.8.5", + "debug": "^4.3.3", + "etag": "^1.8.1", + "fs-extra": "^10.0.0", + "pathe": "^0.2.0", + "svg-baker": "1.7.0", + "svgo": "^2.8.0" + }, + "peerDependencies": { + "vite": ">=2.0.0" + } + }, + "node_modules/vite-plugin-vue-setup-extend": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.4.0.tgz", + "integrity": "sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==", + "dev": true, + "dependencies": { + "@vue/compiler-sfc": "^3.2.29", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "vite": ">=2.0.0" + } + }, + "node_modules/vite-plugin-vue-setup-extend/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vue": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.16.tgz", + "integrity": "sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w==", + "dependencies": { + "@vue/compiler-dom": "3.5.16", + "@vue/compiler-sfc": "3.5.16", + "@vue/runtime-dom": "3.5.16", + "@vue/server-renderer": "3.5.16", + "@vue/shared": "3.5.16" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-clipboard3": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vue-clipboard3/-/vue-clipboard3-2.0.0.tgz", + "integrity": "sha512-Q9S7dzWGax7LN5iiSPcu/K1GGm2gcBBlYwmMsUc5/16N6w90cbKow3FnPmPs95sungns4yvd9/+JhbAznECS2A==", + "dependencies": { + "clipboard": "^2.0.6" + } + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.1.3.tgz", + "integrity": "sha512-dbCBnd2e02dYWsXoqX5yKUZlOt+ExIpq7hmHKPb5ZqKcjf++Eo0hMseFTZMLKThrUk61m+Uv6A2YSBve6ZvuDQ==", + "dev": true, + "dependencies": { + "debug": "^4.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.6.0", + "lodash": "^4.17.21", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-grid-layout": { + "version": "3.0.0-beta1", + "resolved": "https://registry.npmjs.org/vue-grid-layout/-/vue-grid-layout-3.0.0-beta1.tgz", + "integrity": "sha512-MsW0yfYNtnAO/uDhfZvkP6effxSJxvhAFbIL37x6Rn3vW9xf0WHVefKaSbQMLpSq3mXnR6ut0pg2Cd5lqIIZzg==", + "dependencies": { + "@interactjs/actions": "^1.10.2", + "@interactjs/auto-start": "^1.10.2", + "@interactjs/dev-tools": "^1.10.2", + "@interactjs/interactjs": "^1.10.2", + "@interactjs/modifiers": "^1.10.2", + "element-resize-detector": "^1.2.1", + "mitt": "^2.1.0" + } + }, + "node_modules/vue-grid-layout/node_modules/mitt": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-2.1.0.tgz", + "integrity": "sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==" + }, + "node_modules/vue-i18n": { + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.1.7.tgz", + "integrity": "sha512-CDrU7Cmyh1AxJjerQmipV9nVa//exVBdhTcWGlbfcDCN8bKp/uAe7Le6IoN4//5emIikbsSKe9Uofmf/xXkhOA==", + "dependencies": { + "@intlify/core-base": "11.1.7", + "@intlify/shared": "11.1.7", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-i18n/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + }, + "node_modules/vue-plugin-hiprint": { + "version": "0.0.60", + "resolved": "https://registry.npmjs.org/vue-plugin-hiprint/-/vue-plugin-hiprint-0.0.60.tgz", + "integrity": "sha512-a5uOMn6Nr4qlYYaVNbQKwRZJa8UcNMTflfi6J430/NDtySJB+5ArE8I8+NLjgVV56x3/qdUBs/GWuZCX5Umv1w==", + "dependencies": { + "@claviska/jquery-minicolors": "^2.3.6", + "@wtto00/html2canvas": "^1.4.3", + "bwip-js": "^4.0.0", + "canvg": "^3.0.10", + "jquery": "^3.6.0", + "jsbarcode": "^3.11.5", + "jspdf": "^2.5.1", + "lodash": "^4.17.21", + "nzh": "^1.0.8", + "socket.io-client": "^4.5.1" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/vue-router": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.1.tgz", + "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + }, + "node_modules/vue/node_modules/@vue/compiler-core": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.16.tgz", + "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==", + "dependencies": { + "@babel/parser": "^7.27.2", + "@vue/shared": "3.5.16", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/vue/node_modules/@vue/compiler-dom": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz", + "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==", + "dependencies": { + "@vue/compiler-core": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "node_modules/vue/node_modules/@vue/compiler-sfc": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.16.tgz", + "integrity": "sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==", + "dependencies": { + "@babel/parser": "^7.27.2", + "@vue/compiler-core": "3.5.16", + "@vue/compiler-dom": "3.5.16", + "@vue/compiler-ssr": "3.5.16", + "@vue/shared": "3.5.16", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.3", + "source-map-js": "^1.2.1" + } + }, + "node_modules/vue/node_modules/@vue/compiler-ssr": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.16.tgz", + "integrity": "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==", + "dependencies": { + "@vue/compiler-dom": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "node_modules/vue/node_modules/@vue/shared": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz", + "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==" + }, + "node_modules/vue3-tree-org": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/vue3-tree-org/-/vue3-tree-org-4.2.2.tgz", + "integrity": "sha512-AG2SykyD6dw0jIyqBm8iuF9j9GWli6KrwudxR1RjULCCBTDFsoNm7MmP/weKT7wowN/sPk+e2RsnvEJMw2OJMw==", + "dependencies": { + "core-js": "^3.6.5" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wildcard": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-1.1.2.tgz", + "integrity": "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==" + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zrender": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.1.tgz", + "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", + "dependencies": { + "tslib": "2.3.0" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + } + }, + "@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==" + }, + "@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==" + }, + "@babel/parser": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "requires": { + "@babel/types": "^7.27.3" + } + }, + "@babel/runtime": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==" + }, + "@babel/types": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "requires": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + } + }, + "@claviska/jquery-minicolors": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@claviska/jquery-minicolors/-/jquery-minicolors-2.3.6.tgz", + "integrity": "sha512-8Ro6D4GCrmOl41+6w4NFhEOpx8vjxwVRI69bulXsFDt49uVRKhLU5TnzEV7AmOJrylkVq+ugnYNMiGHBieeKUQ==", + "requires": {} + }, + "@cropper/element": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element/-/element-2.0.0.tgz", + "integrity": "sha512-lsthn0nQq73GExUE7Mg/ss6Q3RXADGDv055hxoLFwvl/wGHgy6ZkYlfLZ/VmgBHC6jDK5IgPBFnqrPqlXWSGBA==", + "requires": { + "@cropper/utils": "^2.0.0" + } + }, + "@cropper/element-canvas": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-canvas/-/element-canvas-2.0.0.tgz", + "integrity": "sha512-GPtGJgSm92crJhhhwUsaMw3rz2KfJWWSz7kRAlufFEV/EHTP5+6r6/Z1BCGRna830i+Avqbm435XLOtA7PVJwA==", + "requires": { + "@cropper/element": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "@cropper/element-crosshair": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-crosshair/-/element-crosshair-2.0.0.tgz", + "integrity": "sha512-KfPfyrdeFvUC31Ws7ATtcalWWSaMtrC6bMoCipZhqbUOE7wZoL4ecDSL6BUOZxPa74awZUqfzirCDjHvheBfyw==", + "requires": { + "@cropper/element": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "@cropper/element-grid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-grid/-/element-grid-2.0.0.tgz", + "integrity": "sha512-i78SQ0IJTLFveKX6P7svkfMYVdgHrQ8ZmmEw8keFy9n1ZVbK+SK0UHK5FNMRNI/gtVhKJOGEnK/zeyjUdj4Iyw==", + "requires": { + "@cropper/element": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "@cropper/element-handle": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-handle/-/element-handle-2.0.0.tgz", + "integrity": "sha512-ZJvW+0MkK9E8xYymGdoruaQn2kwjSHFpNSWinjyq6csuVQiCPxlX5ovAEDldmZ9MWePPtWEi3vLKQOo2Yb0T8g==", + "requires": { + "@cropper/element": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "@cropper/element-image": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-image/-/element-image-2.0.0.tgz", + "integrity": "sha512-9BxiTS/aHRmrjopaFQb9mQQXmx4ruhYHGkDZMVz24AXpMFjUY6OpqrWse/WjzD9tfhMFvEdu17b3VAekcAgpeg==", + "requires": { + "@cropper/element": "^2.0.0", + "@cropper/element-canvas": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "@cropper/element-selection": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-selection/-/element-selection-2.0.0.tgz", + "integrity": "sha512-ensNnbIfJsJ8bhbJTH/RXtk2URFvTOO4TvfRk461n2FPEC588D7rwBmUJxQg74IiTi4y1JbCI+6j+4LyzYBLCQ==", + "requires": { + "@cropper/element": "^2.0.0", + "@cropper/element-canvas": "^2.0.0", + "@cropper/element-image": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "@cropper/element-shade": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-shade/-/element-shade-2.0.0.tgz", + "integrity": "sha512-jv/2bbNZnhU4W+T4G0c8ADocLIZvQFTXgCf2RFDNhI5UVxurzWBnDdb8Mx8LnVplnkTqO+xUmHZYve0CwgWo+Q==", + "requires": { + "@cropper/element": "^2.0.0", + "@cropper/element-canvas": "^2.0.0", + "@cropper/element-selection": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "@cropper/element-viewer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/element-viewer/-/element-viewer-2.0.0.tgz", + "integrity": "sha512-zY+3VRN5TvpM8twlphYtXw0tzJL2VgzeK7ufhL1BixVqOdRxwP13TprYIhqwGt9EW/SyJZUiaIu396T89kRX8A==", + "requires": { + "@cropper/element": "^2.0.0", + "@cropper/element-canvas": "^2.0.0", + "@cropper/element-image": "^2.0.0", + "@cropper/element-selection": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "@cropper/elements": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/elements/-/elements-2.0.0.tgz", + "integrity": "sha512-PQkPo1nUjxLFUQuHYu+6atfHxpX9B41Xribao6wpvmvmNIFML6LQdNqqWYb6LyM7ujsu71CZdBiMT5oetjJVoQ==", + "requires": { + "@cropper/element": "^2.0.0", + "@cropper/element-canvas": "^2.0.0", + "@cropper/element-crosshair": "^2.0.0", + "@cropper/element-grid": "^2.0.0", + "@cropper/element-handle": "^2.0.0", + "@cropper/element-image": "^2.0.0", + "@cropper/element-selection": "^2.0.0", + "@cropper/element-shade": "^2.0.0", + "@cropper/element-viewer": "^2.0.0" + } + }, + "@cropper/utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@cropper/utils/-/utils-2.0.0.tgz", + "integrity": "sha512-cprLYr+7kK3faGgoOsTW9gIn5sefDr2KwOmgyjzIXk+8PLpW8FgFKEg5FoWfRD5zMAmkCBuX6rGKDK3VdUEGrg==" + }, + "@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==" + }, + "@element-plus/icons-vue": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "requires": {} + }, + "@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.4.3" + } + }, + "@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true + }, + "@eslint/config-array": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz", + "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==", + "dev": true, + "requires": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "@eslint/config-helpers": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.3.tgz", + "integrity": "sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==", + "dev": true + }, + "@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.15" + } + }, + "@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "@eslint/js": { + "version": "9.29.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz", + "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==", + "dev": true + }, + "@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true + }, + "@eslint/plugin-kit": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz", + "integrity": "sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==", + "dev": true, + "requires": { + "@eslint/core": "^0.15.0", + "levn": "^0.4.1" + }, + "dependencies": { + "@eslint/core": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.0.tgz", + "integrity": "sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.15" + } + } + } + }, + "@exodus/schemasafe": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz", + "integrity": "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==", + "dev": true + }, + "@floating-ui/core": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.1.tgz", + "integrity": "sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==", + "requires": { + "@floating-ui/utils": "^0.2.9" + } + }, + "@floating-ui/dom": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.1.tgz", + "integrity": "sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==", + "requires": { + "@floating-ui/core": "^1.7.1", + "@floating-ui/utils": "^0.2.9" + } + }, + "@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==" + }, + "@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true + }, + "@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "requires": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "dependencies": { + "@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true + } + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true + }, + "@interactjs/actions": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/actions/-/actions-1.10.27.tgz", + "integrity": "sha512-FCRg5KwB+stkPcAMx/Cn0fgGP6p4LyMX9S/Upcn/W+hpYme31bPi54PCqmOebzz6myTthN6zFf9jMyLOqtI/gg==", + "requires": { + "@interactjs/interact": "1.10.27" + } + }, + "@interactjs/auto-scroll": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/auto-scroll/-/auto-scroll-1.10.27.tgz", + "integrity": "sha512-zPg5TnVsZv+9Hnt4qnbxLvBMf+rIWHkoJVoSETEbLNaj90C8hIyr0pVwukSUySSgDhCgQ7np0f3pg4INLq9beQ==", + "requires": { + "@interactjs/interact": "1.10.27" + } + }, + "@interactjs/auto-start": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/auto-start/-/auto-start-1.10.27.tgz", + "integrity": "sha512-ECLBO/nxmaF1knncJKIE5F7la3KKRgEkn0Cu2JTPOYj9xy/LpfYElo3wkRHsodgOqF651nR70GK2/IzPR2lO9A==", + "requires": { + "@interactjs/interact": "1.10.27" + } + }, + "@interactjs/core": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/core/-/core-1.10.27.tgz", + "integrity": "sha512-SliUr/3ZbLAdED8LokzYzWHWMdCB5Cq+UnpXuRy+BIod1j97m4IUFf/D1iIKUBBjBcucgXbz28z96WnenVCB7Q==", + "requires": {} + }, + "@interactjs/dev-tools": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/dev-tools/-/dev-tools-1.10.27.tgz", + "integrity": "sha512-YolmBwRaKH1gWbvyLeV3m5QSwtD38lOZnCBA87PCAlcd9PQAC2gb03fEPeEyD336bE20oLB8f0WZt4Wre+afiw==", + "requires": { + "@interactjs/interact": "1.10.27", + "vue": "3" + } + }, + "@interactjs/inertia": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/inertia/-/inertia-1.10.27.tgz", + "integrity": "sha512-S/SVj/M0D+wWWPVXHcXN/YUWOK51LFJsEA+CTgVnFhlSU04+1FUvNLwilCZcHgECu1RJxZNKDwZysDATg+r8jQ==", + "requires": { + "@interactjs/interact": "1.10.27", + "@interactjs/offset": "1.10.27" + } + }, + "@interactjs/interact": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/interact/-/interact-1.10.27.tgz", + "integrity": "sha512-XdH3A2UUzjEFGGJgFuJlhiz99tE8jB8xNh/DmnoMuL6uOQPxNA+sWRnzEVjG0+zY2P3/dbhEpi4Cn3FLPzydwA==", + "requires": { + "@interactjs/core": "1.10.27", + "@interactjs/utils": "1.10.27" + } + }, + "@interactjs/interactjs": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/interactjs/-/interactjs-1.10.27.tgz", + "integrity": "sha512-UwhfUZMZVXUY72efPABuKSBz1sUY+r+49v8t6Ku9o5Jq76AKg9mwmdGszIlOn3ppnFDDjvtzK/8TL+Sbd0EQEA==", + "requires": { + "@interactjs/actions": "1.10.27", + "@interactjs/auto-scroll": "1.10.27", + "@interactjs/auto-start": "1.10.27", + "@interactjs/core": "1.10.27", + "@interactjs/dev-tools": "1.10.27", + "@interactjs/inertia": "1.10.27", + "@interactjs/interact": "1.10.27", + "@interactjs/modifiers": "1.10.27", + "@interactjs/offset": "1.10.27", + "@interactjs/pointer-events": "1.10.27", + "@interactjs/reflow": "1.10.27", + "@interactjs/utils": "1.10.27" + } + }, + "@interactjs/modifiers": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/modifiers/-/modifiers-1.10.27.tgz", + "integrity": "sha512-ei/qfoQ+9/8k6WzNzdNqHI6cWkIV576N4Ap16r5CoqOWwhA6Xzj3OMHf1g0t1O4eSq2HdJsVJn3eLNfw9HsbeQ==", + "requires": { + "@interactjs/interact": "1.10.27", + "@interactjs/snappers": "1.10.27" + } + }, + "@interactjs/offset": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/offset/-/offset-1.10.27.tgz", + "integrity": "sha512-AezsLiuK+Qv4jXdYuRa65HJ2pMFMZPlqiAep6ZRLwhP9HE7O75c0EAm+gfx+dpPrHNHs6J9LaiKSZl+B+A2qAw==", + "requires": { + "@interactjs/interact": "1.10.27" + } + }, + "@interactjs/pointer-events": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/pointer-events/-/pointer-events-1.10.27.tgz", + "integrity": "sha512-Yo5SS6PhWfC93gHNxnwwW0wvebo5hSYJKGaSnAHO4f9Lh25yibecMnmPBmiEfWVcdMboK/kXrme43mHQaRegVg==", + "requires": { + "@interactjs/interact": "1.10.27" + } + }, + "@interactjs/reflow": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/reflow/-/reflow-1.10.27.tgz", + "integrity": "sha512-Msm0QdYFr40oSsPFxyCR3dHN/pQx34k7QSkdN1uIsUn/drrm+YSFvrvVOu99DFOwr7gTThr5vNe06Sz4vubTSA==", + "requires": { + "@interactjs/interact": "1.10.27" + } + }, + "@interactjs/snappers": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/snappers/-/snappers-1.10.27.tgz", + "integrity": "sha512-HZLZ0XSi6HI08OmTv/HKG6AltQoaKAALLQ+KDW92utj3XSgw7oren0KsWUKPhaPg3Av7R1jFQd08s+uafqIlLw==", + "requires": { + "@interactjs/interact": "1.10.27" + } + }, + "@interactjs/utils": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/utils/-/utils-1.10.27.tgz", + "integrity": "sha512-+qfLOio2OxQqg1cXSnRaCl+N8MQDQLDS9w+aOGxH8YLAhIMyt7Asxx/46//sT8orgsi16pmlBPtngPHT9s8zKw==" + }, + "@intlify/core-base": { + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.1.7.tgz", + "integrity": "sha512-gYiGnQeJVp3kNBeXQ73m1uFOak0ry4av8pn+IkEWigyyPWEMGzB+xFeQdmGMFn49V+oox6294oGVff8bYOhtOw==", + "requires": { + "@intlify/message-compiler": "11.1.7", + "@intlify/shared": "11.1.7" + } + }, + "@intlify/message-compiler": { + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.1.7.tgz", + "integrity": "sha512-0ezkep1AT30NyuKj8QbRlmvMORCCRlOIIu9v8RNU8SwDjjTiFCZzczCORMns2mCH4HZ1nXgrfkKzYUbfjNRmng==", + "requires": { + "@intlify/shared": "11.1.7", + "source-map-js": "^1.0.2" + } + }, + "@intlify/shared": { + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.1.7.tgz", + "integrity": "sha512-4yZeMt2Aa/7n5Ehy4KalUlvt3iRLcg1tq9IBVfOgkyWFArN4oygn6WxgGIFibP3svpaH8DarbNaottq+p0gUZQ==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "@noble/ciphers": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", + "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==" + }, + "@noble/curves": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.2.tgz", + "integrity": "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==", + "requires": { + "@noble/hashes": "1.8.0" + } + }, + "@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "optional": true, + "requires": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1", + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + } + }, + "@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "dev": true, + "optional": true + }, + "@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "dev": true, + "optional": true + }, + "@popperjs/core": { + "version": "npm:@sxzz/popperjs-es@2.11.7", + "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==" + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.0.tgz", + "integrity": "sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.0.tgz", + "integrity": "sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.0.tgz", + "integrity": "sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.0.tgz", + "integrity": "sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-freebsd-arm64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.0.tgz", + "integrity": "sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-freebsd-x64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.0.tgz", + "integrity": "sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.0.tgz", + "integrity": "sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.0.tgz", + "integrity": "sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.0.tgz", + "integrity": "sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.0.tgz", + "integrity": "sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.0.tgz", + "integrity": "sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.0.tgz", + "integrity": "sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.0.tgz", + "integrity": "sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-musl": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.0.tgz", + "integrity": "sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.0.tgz", + "integrity": "sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.0.tgz", + "integrity": "sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.0.tgz", + "integrity": "sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.0.tgz", + "integrity": "sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.0.tgz", + "integrity": "sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.0.tgz", + "integrity": "sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==", + "dev": true, + "optional": true + }, + "@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" + }, + "@sphinxxxx/color-conversion": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz", + "integrity": "sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==" + }, + "@transloadit/prettier-bytes": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz", + "integrity": "sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==" + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "@types/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@types/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==" + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/lodash": { + "version": "4.17.18", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.18.tgz", + "integrity": "sha512-KJ65INaxqxmU6EoCiJmRPZC9H9RVWCRd349tXM2M3O5NA7cY6YL7c0bHAHQ93NOfTObEQ004kd2QVHs/r0+m4g==" + }, + "@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "requires": { + "@types/lodash": "*" + } + }, + "@types/node": { + "version": "24.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", + "integrity": "sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==", + "dev": true, + "requires": { + "undici-types": "~7.8.0" + } + }, + "@types/nprogress": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.3.tgz", + "integrity": "sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==", + "dev": true + }, + "@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==" + }, + "@types/sortablejs": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.8.tgz", + "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==", + "dev": true + }, + "@types/svgo": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-2.6.4.tgz", + "integrity": "sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/swagger-schema-official": { + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@types/swagger-schema-official/-/swagger-schema-official-2.0.25.tgz", + "integrity": "sha512-T92Xav+Gf/Ik1uPW581nA+JftmjWPgskw/WBf4TJzxRG/SJ+DfNnNE+WuZ4mrXuzflQMqMkm1LSYjzYW7MB1Cg==", + "dev": true + }, + "@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" + }, + "@typescript-eslint/eslint-plugin": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz", + "integrity": "sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/type-utils": "8.34.1", + "@typescript-eslint/utils": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + } + }, + "@typescript-eslint/parser": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz", + "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/typescript-estree": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/project-service": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz", + "integrity": "sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==", + "dev": true, + "requires": { + "@typescript-eslint/tsconfig-utils": "^8.34.1", + "@typescript-eslint/types": "^8.34.1", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", + "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1" + } + }, + "@typescript-eslint/tsconfig-utils": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz", + "integrity": "sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==", + "dev": true, + "requires": {} + }, + "@typescript-eslint/type-utils": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz", + "integrity": "sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "8.34.1", + "@typescript-eslint/utils": "8.34.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + } + }, + "@typescript-eslint/types": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", + "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", + "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", + "dev": true, + "requires": { + "@typescript-eslint/project-service": "8.34.1", + "@typescript-eslint/tsconfig-utils": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + } + }, + "@typescript-eslint/utils": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.1.tgz", + "integrity": "sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/typescript-estree": "8.34.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", + "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.34.1", + "eslint-visitor-keys": "^4.2.1" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true + } + } + }, + "@uppy/companion-client": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-2.2.2.tgz", + "integrity": "sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==", + "requires": { + "@uppy/utils": "^4.1.2", + "namespace-emitter": "^2.0.1" + } + }, + "@uppy/core": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@uppy/core/-/core-2.3.4.tgz", + "integrity": "sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==", + "requires": { + "@transloadit/prettier-bytes": "0.0.7", + "@uppy/store-default": "^2.1.1", + "@uppy/utils": "^4.1.3", + "lodash.throttle": "^4.1.1", + "mime-match": "^1.0.2", + "namespace-emitter": "^2.0.1", + "nanoid": "^3.1.25", + "preact": "^10.5.13" + } + }, + "@uppy/store-default": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@uppy/store-default/-/store-default-2.1.1.tgz", + "integrity": "sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==" + }, + "@uppy/utils": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@uppy/utils/-/utils-4.1.3.tgz", + "integrity": "sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==", + "requires": { + "lodash.throttle": "^4.1.1" + } + }, + "@uppy/xhr-upload": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz", + "integrity": "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==", + "requires": { + "@uppy/companion-client": "^2.2.2", + "@uppy/utils": "^4.1.2", + "nanoid": "^3.1.25" + } + }, + "@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "requires": {} + }, + "@vue/compiler-core": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.17.tgz", + "integrity": "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==", + "dev": true, + "requires": { + "@babel/parser": "^7.27.5", + "@vue/shared": "3.5.17", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "@vue/compiler-dom": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.17.tgz", + "integrity": "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==", + "dev": true, + "requires": { + "@vue/compiler-core": "3.5.17", + "@vue/shared": "3.5.17" + } + }, + "@vue/compiler-sfc": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.17.tgz", + "integrity": "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==", + "dev": true, + "requires": { + "@babel/parser": "^7.27.5", + "@vue/compiler-core": "3.5.17", + "@vue/compiler-dom": "3.5.17", + "@vue/compiler-ssr": "3.5.17", + "@vue/shared": "3.5.17", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "@vue/compiler-ssr": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.17.tgz", + "integrity": "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==", + "dev": true, + "requires": { + "@vue/compiler-dom": "3.5.17", + "@vue/shared": "3.5.17" + } + }, + "@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "requires": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "requires": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "requires": { + "rfdc": "^1.4.1" + } + }, + "@vue/reactivity": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.16.tgz", + "integrity": "sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA==", + "requires": { + "@vue/shared": "3.5.16" + }, + "dependencies": { + "@vue/shared": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz", + "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==" + } + } + }, + "@vue/runtime-core": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.16.tgz", + "integrity": "sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ==", + "requires": { + "@vue/reactivity": "3.5.16", + "@vue/shared": "3.5.16" + }, + "dependencies": { + "@vue/shared": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz", + "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==" + } + } + }, + "@vue/runtime-dom": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.16.tgz", + "integrity": "sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww==", + "requires": { + "@vue/reactivity": "3.5.16", + "@vue/runtime-core": "3.5.16", + "@vue/shared": "3.5.16", + "csstype": "^3.1.3" + }, + "dependencies": { + "@vue/shared": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz", + "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==" + } + } + }, + "@vue/server-renderer": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.16.tgz", + "integrity": "sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg==", + "requires": { + "@vue/compiler-ssr": "3.5.16", + "@vue/shared": "3.5.16" + }, + "dependencies": { + "@vue/compiler-core": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.16.tgz", + "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==", + "requires": { + "@babel/parser": "^7.27.2", + "@vue/shared": "3.5.16", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "@vue/compiler-dom": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz", + "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==", + "requires": { + "@vue/compiler-core": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "@vue/compiler-ssr": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.16.tgz", + "integrity": "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==", + "requires": { + "@vue/compiler-dom": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "@vue/shared": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz", + "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==" + } + } + }, + "@vue/shared": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.17.tgz", + "integrity": "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==", + "dev": true + }, + "@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "requires": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + } + }, + "@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==" + }, + "@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "requires": { + "vue-demi": "*" + } + }, + "@wangeditor/basic-modules": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz", + "integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==", + "requires": { + "is-url": "^1.2.4" + } + }, + "@wangeditor/code-highlight": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz", + "integrity": "sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==", + "requires": { + "prismjs": "^1.23.0" + } + }, + "@wangeditor/core": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@wangeditor/core/-/core-1.1.19.tgz", + "integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==", + "requires": { + "@types/event-emitter": "^0.3.3", + "event-emitter": "^0.3.5", + "html-void-elements": "^2.0.0", + "i18next": "^20.4.0", + "scroll-into-view-if-needed": "^2.2.28", + "slate-history": "^0.66.0" + } + }, + "@wangeditor/editor": { + "version": "5.1.23", + "resolved": "https://registry.npmjs.org/@wangeditor/editor/-/editor-5.1.23.tgz", + "integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==", + "requires": { + "@uppy/core": "^2.1.1", + "@uppy/xhr-upload": "^2.0.3", + "@wangeditor/basic-modules": "^1.1.7", + "@wangeditor/code-highlight": "^1.0.3", + "@wangeditor/core": "^1.1.19", + "@wangeditor/list-module": "^1.0.5", + "@wangeditor/table-module": "^1.1.4", + "@wangeditor/upload-image-module": "^1.0.2", + "@wangeditor/video-module": "^1.1.4", + "dom7": "^3.0.0", + "is-hotkey": "^0.2.0", + "lodash.camelcase": "^4.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "lodash.foreach": "^4.5.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "lodash.toarray": "^4.4.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "@wangeditor/editor-for-vue": { + "version": "5.1.12", + "resolved": "https://registry.npmjs.org/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz", + "integrity": "sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==", + "requires": {} + }, + "@wangeditor/list-module": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@wangeditor/list-module/-/list-module-1.0.5.tgz", + "integrity": "sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==", + "requires": {} + }, + "@wangeditor/table-module": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@wangeditor/table-module/-/table-module-1.1.4.tgz", + "integrity": "sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==", + "requires": {} + }, + "@wangeditor/upload-image-module": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz", + "integrity": "sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==", + "requires": {} + }, + "@wangeditor/video-module": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@wangeditor/video-module/-/video-module-1.1.4.tgz", + "integrity": "sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==", + "requires": {} + }, + "@wtto00/html2canvas": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@wtto00/html2canvas/-/html2canvas-1.4.3.tgz", + "integrity": "sha512-jwsb+xL8N+gjrSNABSaFdxmWtE4c7RNFjP20lo1G7gs63Qqo1phhxVBTzxc/apDVh6LgXsU2l5bwKtXd9uz65w==", + "requires": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + } + }, + "ace-builds": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.43.0.tgz", + "integrity": "sha512-iBkvY7owAPCquKCenPCEl4YVDOo9YPRfAZbOuzGcyJlMYhiA5aIEjFPZsYZvX1ZQ1Rq4cfYRhJjixSYcpDPOoQ==" + }, + "acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true + }, + "array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + } + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true + }, + "arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true + }, + "async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true + }, + "async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true + }, + "async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "requires": { + "possible-typed-array-names": "^1.0.0" + } + }, + "axios": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", + "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", + "requires": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } + } + }, + "base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==" + }, + "batch-processor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", + "integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "birpc": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.4.0.tgz", + "integrity": "sha512-5IdNxTyhXHv2UlgnPHQ0h+5ypVmkrYHzL8QT+DwFZ//2N/oNV8Ch+BCRmTJ3x6/z9Axo/cXYBc9eprsUVK/Jsg==" + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" + }, + "bwip-js": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/bwip-js/-/bwip-js-4.6.0.tgz", + "integrity": "sha512-Djr1aQ3d1N8rpLz5XgbpNW/yrP4owC+rk5/pZTSzkqXY0WvqzJ0yJTxA8JJA6WDxOAP1hP70AcnTxiDvthy+/g==" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } + } + }, + "call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + } + }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, + "call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "canvg": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.11.tgz", + "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==", + "requires": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "requires": { + "readdirp": "^4.0.1" + } + }, + "citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dev": true, + "requires": { + "consola": "^3.2.3" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } + } + }, + "claygl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/claygl/-/claygl-1.3.0.tgz", + "integrity": "sha512-+gGtJjT6SSHD2l2yC3MCubW/sCV40tZuSs5opdtn79vFSGUgp/lH139RNEQ6Jy078/L0aV8odCw8RSrUcMfLaQ==" + }, + "clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true + }, + "compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true + }, + "copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "requires": { + "is-what": "^4.1.8" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true + }, + "core-js": { + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.43.0.tgz", + "integrity": "sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "requires": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + } + }, + "countup.js": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/countup.js/-/countup.js-2.9.0.tgz", + "integrity": "sha512-llqrvyXztRFPp6+i8jx25phHWcVWhrHO4Nlt0uAOSKHB8778zzQswa4MU3qKBvkXfJKftRYFJuVHez67lyKdHg==" + }, + "cropperjs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-2.0.0.tgz", + "integrity": "sha512-TO2j0Qre01kPHbow4FuTrbdEB4jTmGRySxW49jyEIqlJZuEBfrvCTT0vC3eRB2WBXudDfKi1Onako6DKWKxeAQ==", + "requires": { + "@cropper/elements": "^2.0.0", + "@cropper/utils": "^2.0.0" + } + }, + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "requires": { + "utrie": "^1.0.2" + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "dependencies": { + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "requires": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + } + }, + "data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + } + }, + "data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + } + }, + "data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, + "debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "optional": true + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "dom7": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dom7/-/dom7-3.0.0.tgz", + "integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==", + "requires": { + "ssr-window": "^3.0.0-alpha.1" + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "dompurify": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.8.tgz", + "integrity": "sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw==", + "optional": true + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "dev": true + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "echarts": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz", + "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", + "requires": { + "tslib": "2.3.0", + "zrender": "5.6.1" + } + }, + "echarts-gl": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/echarts-gl/-/echarts-gl-2.0.9.tgz", + "integrity": "sha512-oKeMdkkkpJGWOzjgZUsF41DOh6cMsyrGGXimbjK2l6Xeq/dBQu4ShG2w2Dzrs/1bD27b2pLTGSaUzouY191gzA==", + "requires": { + "claygl": "^1.2.1", + "zrender": "^5.1.1" + } + }, + "echarts-wordcloud": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/echarts-wordcloud/-/echarts-wordcloud-2.1.0.tgz", + "integrity": "sha512-Kt1JmbcROgb+3IMI48KZECK2AP5lG6bSsOEs+AsuwaWJxQom31RTNd6NFYI01E/YaI1PFZeueaupjlmzSQasjQ==", + "requires": {} + }, + "ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, + "element-plus": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.10.2.tgz", + "integrity": "sha512-p2KiAa0jEGXrzdlTAfpiS7HQFAhla4gvx6H7RuDf+OO0uC3DGpolxvdHjFR8gt7+vaWyxQNcHa1sAdBkmjqlgA==", + "requires": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.13", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + } + }, + "element-resize-detector": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz", + "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", + "requires": { + "batch-processor": "1.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "engine.io-client": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz", + "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.1.1" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "requires": { + "ms": "^2.1.3" + } + } + } + }, + "engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==" + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + } + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "requires": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + } + }, + "es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "dev": true + }, + "es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "requires": { + "d": "^1.0.2", + "ext": "^1.7.0" + } + }, + "esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "9.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz", + "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.1", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.29.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true + }, + "ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "eslint-plugin-vue": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.2.0.tgz", + "integrity": "sha512-tl9s+KN3z0hN2b8fV2xSs5ytGl7Esk1oSCxULLwFcdaElhZ8btYYZFrWxvh4En+czrSDtuLCeCOGa8HhEZuBdQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "xml-name-validator": "^4.0.0" + } + }, + "eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + } + }, + "espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "requires": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true + } + } + }, + "esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "eta": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", + "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "requires": { + "type": "^2.7.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==" + }, + "file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "requires": { + "flat-cache": "^4.0.0" + } + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + } + }, + "flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==" + }, + "for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "requires": { + "is-callable": "^1.2.7" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true + }, + "form-data": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", + "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "requires": { + "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": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, + "get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true + }, + "globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "requires": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "requires": { + "delegate": "^3.1.2" + } + }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + } + } + }, + "has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "requires": { + "has-symbols": "^1.0.3" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + }, + "html-void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", + "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==" + }, + "html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "optional": true, + "requires": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + } + } + }, + "http2-client": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz", + "integrity": "sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==", + "dev": true + }, + "i18next": { + "version": "20.6.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-20.6.1.tgz", + "integrity": "sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==", + "requires": { + "@babel/runtime": "^7.12.0" + } + }, + "ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true + }, + "immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==" + }, + "immutable": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "requires": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + } + }, + "is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "requires": { + "has-bigints": "^1.0.2" + } + }, + "is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + } + }, + "is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + } + }, + "is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "requires": { + "call-bound": "^1.0.3" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hotkey": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.2.0.tgz", + "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==" + }, + "is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, + "is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "requires": { + "call-bound": "^1.0.3" + } + }, + "is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + } + }, + "is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + } + }, + "is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.16" + } + }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true + }, + "is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "requires": { + "call-bound": "^1.0.3" + } + }, + "is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + } + }, + "is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" + }, + "jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==" + }, + "jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" + }, + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==" + }, + "js-table2excel": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/js-table2excel/-/js-table2excel-1.1.2.tgz", + "integrity": "sha512-E5QcPLjlF7qcqqF+DgaPxj9b+lQsItMqkwcXKpODtZ8zo5f07huuvem3Ek1WYzOcSOalU7RwEAG/66WQ5PVfWA==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbarcode": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/jsbarcode/-/jsbarcode-3.12.1.tgz", + "integrity": "sha512-QZQSqIknC2Rr/YOUyOkCBqsoiBAOTYK+7yNN3JsqfoUtJtkazxNw1dmPpxuv7VVvqW13kA3/mKiLq+s/e3o9hQ==" + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/json-source-map/-/json-source-map-0.6.1.tgz", + "integrity": "sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsoneditor": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/jsoneditor/-/jsoneditor-10.2.0.tgz", + "integrity": "sha512-vwXKAUYQ0EFBUWTq2+wl9fi+rf4K4f/xdw6nyJdlXeQ374/NnaBobYmZUosuv9nMMPRP4KbfUGhZ3GH1l4QZqg==", + "requires": { + "ace-builds": "^1.36.2", + "ajv": "^6.12.6", + "javascript-natural-sort": "^0.7.1", + "jmespath": "^0.16.0", + "json-source-map": "^0.6.1", + "jsonrepair": "^3.8.1", + "picomodal": "^3.0.0", + "vanilla-picker": "^2.12.3" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonrepair": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/jsonrepair/-/jsonrepair-3.12.0.tgz", + "integrity": "sha512-SWfjz8SuQ0wZjwsxtSJ3Zy8vvLg6aO/kxcp9TWNPGwJKgTZVfhNEQBMk/vPOpYCDFWRxD6QWuI6IHR1t615f0w==" + }, + "jspdf": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.2.tgz", + "integrity": "sha512-myeX9c+p7znDWPk0eTrujCzNjT+CXdXyk7YmJq5nD5V7uLLKmSXnlQ/Jn/kuo3X09Op70Apm0rQSnFWyGK8uEQ==", + "requires": { + "@babel/runtime": "^7.23.2", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.5.4", + "fflate": "^0.8.1", + "html2canvas": "^1.0.0-rc.5" + } + }, + "jsplumb": { + "version": "2.15.6", + "resolved": "https://registry.npmjs.org/jsplumb/-/jsplumb-2.15.6.tgz", + "integrity": "sha512-sIpbpz5eMVM+vV+MQzFCidlaa1RsknrQs6LOTKYDjYUDdTAi2AN2bFi94TxB33TifcIsRNV1jebcaxg0tCoPzg==" + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "requires": {} + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==" + }, + "magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "merge-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", + "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", + "dev": true, + "requires": { + "is-plain-obj": "^1.1" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mime-match/-/mime-match-1.0.2.tgz", + "integrity": "sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==", + "requires": { + "wildcard": "^1.1.0" + } + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "namespace-emitter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/namespace-emitter/-/namespace-emitter-2.0.1.tgz", + "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==" + }, + "nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "optional": true + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-fetch-h2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz", + "integrity": "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==", + "dev": true, + "requires": { + "http2-client": "^1.2.5" + } + }, + "node-readfiles": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz", + "integrity": "sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==", + "dev": true, + "requires": { + "es6-promise": "^3.2.1" + } + }, + "normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" + }, + "nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "nzh": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/nzh/-/nzh-1.0.14.tgz", + "integrity": "sha512-wKgaqCSZdrySvB4RWop5g+v6IDv2IErsT6rjq06Bg0yiT9hiHYZO12GMGx/xweGVLcO2lDjX5RqWD0S/Jy9z5Q==" + }, + "oas-kit-common": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz", + "integrity": "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==", + "dev": true, + "requires": { + "fast-safe-stringify": "^2.0.7" + } + }, + "oas-linter": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/oas-linter/-/oas-linter-3.2.2.tgz", + "integrity": "sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==", + "dev": true, + "requires": { + "@exodus/schemasafe": "^1.0.0-rc.2", + "should": "^13.2.1", + "yaml": "^1.10.0" + }, + "dependencies": { + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } + } + }, + "oas-resolver": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.6.tgz", + "integrity": "sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==", + "dev": true, + "requires": { + "node-fetch-h2": "^2.3.0", + "oas-kit-common": "^1.0.8", + "reftools": "^1.1.9", + "yaml": "^1.10.0", + "yargs": "^17.0.1" + }, + "dependencies": { + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } + } + }, + "oas-schema-walker": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz", + "integrity": "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==", + "dev": true + }, + "oas-validator": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/oas-validator/-/oas-validator-5.0.8.tgz", + "integrity": "sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "oas-kit-common": "^1.0.8", + "oas-linter": "^3.2.2", + "oas-resolver": "^2.5.6", + "oas-schema-walker": "^1.1.5", + "reftools": "^1.1.9", + "should": "^13.2.1", + "yaml": "^1.10.0" + }, + "dependencies": { + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "requires": { + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } + } + }, + "object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } + } + }, + "optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + } + }, + "own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "pathe": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.2.0.tgz", + "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", + "dev": true + }, + "perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "picomodal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/picomodal/-/picomodal-3.0.0.tgz", + "integrity": "sha512-FoR3TDfuLlqUvcEeK5ifpKSVVns6B4BQvc8SDF6THVMuadya6LLtji0QgUDSStw0ZR2J7I6UGi5V2V23rnPWTw==" + }, + "pinia": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", + "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", + "requires": { + "@vue/devtools-api": "^7.7.2" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true + }, + "possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true + }, + "postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "requires": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + }, + "postcss-prefix-selector": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.1.tgz", + "integrity": "sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==", + "dev": true, + "requires": {} + }, + "postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "posthtml": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz", + "integrity": "sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==", + "dev": true, + "requires": { + "posthtml-parser": "^0.2.0", + "posthtml-render": "^1.0.5" + } + }, + "posthtml-parser": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz", + "integrity": "sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==", + "dev": true, + "requires": { + "htmlparser2": "^3.8.3", + "isobject": "^2.1.0" + } + }, + "posthtml-rename-id": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz", + "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + } + } + }, + "posthtml-render": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz", + "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==", + "dev": true + }, + "posthtml-svg-mode": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz", + "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==", + "dev": true, + "requires": { + "merge-options": "1.0.1", + "posthtml": "^0.9.2", + "posthtml-parser": "^0.2.1", + "posthtml-render": "^1.0.6" + } + }, + "preact": { + "version": "10.26.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.26.9.tgz", + "integrity": "sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==" + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.0.tgz", + "integrity": "sha512-ujSB9uXHJKzM/2GBuE0hBOUgC77CN3Bnpqa+g80bkv3T3A93wL/xlzDATHhnhkzifz/UE2SNOvmbTz5hSkDlHw==", + "dev": true + }, + "print-js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/print-js/-/print-js-1.6.0.tgz", + "integrity": "sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg==" + }, + "prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==" + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + }, + "qrcodejs2-fixes": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/qrcodejs2-fixes/-/qrcodejs2-fixes-0.0.2.tgz", + "integrity": "sha512-wMUXYMOixAEJlLnjk5MbLiFaz0gQObWYm/TIFWB5+j7sTY5gPyr09Cx1EpcLYbsgfFdN3wHjrKAhZofTuCBGhg==" + }, + "qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "requires": { + "side-channel": "^1.1.0" + } + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "requires": { + "performance-now": "^2.1.0" + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true + }, + "reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + } + }, + "reftools": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", + "integrity": "sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } + } + }, + "regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + } + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true + }, + "rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" + }, + "rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==" + }, + "rollup": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.0.tgz", + "integrity": "sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==", + "dev": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.44.0", + "@rollup/rollup-android-arm64": "4.44.0", + "@rollup/rollup-darwin-arm64": "4.44.0", + "@rollup/rollup-darwin-x64": "4.44.0", + "@rollup/rollup-freebsd-arm64": "4.44.0", + "@rollup/rollup-freebsd-x64": "4.44.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.44.0", + "@rollup/rollup-linux-arm-musleabihf": "4.44.0", + "@rollup/rollup-linux-arm64-gnu": "4.44.0", + "@rollup/rollup-linux-arm64-musl": "4.44.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.44.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.44.0", + "@rollup/rollup-linux-riscv64-gnu": "4.44.0", + "@rollup/rollup-linux-riscv64-musl": "4.44.0", + "@rollup/rollup-linux-s390x-gnu": "4.44.0", + "@rollup/rollup-linux-x64-gnu": "4.44.0", + "@rollup/rollup-linux-x64-musl": "4.44.0", + "@rollup/rollup-win32-arm64-msvc": "4.44.0", + "@rollup/rollup-win32-ia32-msvc": "4.44.0", + "@rollup/rollup-win32-x64-msvc": "4.44.0", + "@types/estree": "1.0.8", + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + } + }, + "sass": { + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", + "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", + "dev": true, + "requires": { + "@parcel/watcher": "^2.4.1", + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "screenfull": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-6.0.2.tgz", + "integrity": "sha512-AQdy8s4WhNvUZ6P8F6PB21tSPIYKniic+Ogx0AacBMjKP1GUHN2E9URxQHtCusiwxudnCKkdy4GrHXPPJSkCCw==" + }, + "scroll-into-view-if-needed": { + "version": "2.2.31", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", + "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", + "requires": { + "compute-scroll-into-view": "^1.0.20" + } + }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" + }, + "semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + } + }, + "set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "dev": true, + "requires": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dev": true, + "requires": { + "should-type": "^1.4.0" + } + }, + "should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", + "dev": true, + "requires": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", + "dev": true + }, + "should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "requires": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "dev": true + }, + "side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + } + }, + "slate": { + "version": "0.72.8", + "resolved": "https://registry.npmjs.org/slate/-/slate-0.72.8.tgz", + "integrity": "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==", + "requires": { + "immer": "^9.0.6", + "is-plain-object": "^5.0.0", + "tiny-warning": "^1.0.3" + } + }, + "slate-history": { + "version": "0.66.0", + "resolved": "https://registry.npmjs.org/slate-history/-/slate-history-0.66.0.tgz", + "integrity": "sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==", + "requires": { + "is-plain-object": "^5.0.0" + } + }, + "sm-crypto-v2": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/sm-crypto-v2/-/sm-crypto-v2-1.12.0.tgz", + "integrity": "sha512-17QAIFXy9TicPTHpS+eDrZZ8dA/yDo9TxgFQEkfFWYZVHzY6dc9H2LoI2ycb+5AyuAiF2ryLzHjkYaMFWDhDfQ==", + "requires": { + "@noble/ciphers": "^1.2.1", + "@noble/curves": "^1.1.0" + } + }, + "snabbdom": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.6.2.tgz", + "integrity": "sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io-client": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", + "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "requires": { + "ms": "^2.1.3" + } + } + } + }, + "socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "requires": { + "ms": "^2.1.3" + } + } + } + }, + "sortablejs": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.6.tgz", + "integrity": "sha512-aNfiuwMEpfBM/CN6LY0ibyhxPfPbyFeBTYJKCvzkJ2GkUpazIt3H+QIPAMHwqQ7tMKaHz1Qj+rJJCqljnf4p3A==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } + } + }, + "splitpanes": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/splitpanes/-/splitpanes-4.0.4.tgz", + "integrity": "sha512-RbysugZhjbCw5fgplvk3hOXr41stahQDtZhHVkhnnJI6H4wlGDhM2kIpbehy7v92duy9GnMa8zIhHigIV1TWtg==", + "requires": {} + }, + "ssr-window": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-3.0.0.tgz", + "integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==" + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + } + } + }, + "stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + } + }, + "string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "requires": { + "copy-anything": "^3.0.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "svg-baker": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz", + "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "clone": "^2.1.1", + "he": "^1.1.1", + "image-size": "^0.5.1", + "loader-utils": "^1.1.0", + "merge-options": "1.0.1", + "micromatch": "3.1.0", + "postcss": "^5.2.17", + "postcss-prefix-selector": "^1.6.0", + "posthtml-rename-id": "^1.0", + "posthtml-svg-mode": "^1.0.3", + "query-string": "^4.3.2", + "traverse": "^0.6.6" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "micromatch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz", + "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.2.2", + "define-property": "^1.0.0", + "extend-shallow": "^2.0.1", + "extglob": "^2.0.2", + "fragment-cache": "^0.2.1", + "kind-of": "^5.0.2", + "nanomatch": "^1.2.1", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==" + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + }, + "swagger-schema-official": { + "version": "2.0.0-bab6bed", + "resolved": "https://registry.npmjs.org/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz", + "integrity": "sha512-rCC0NWGKr/IJhtRuPq/t37qvZHI/mH4I4sxflVM+qgVe5Z2uOCivzWaVbuioJaB61kvm5UvB7b49E+oBY0M8jA==", + "dev": true + }, + "swagger-typescript-api": { + "version": "13.0.28", + "resolved": "https://registry.npmjs.org/swagger-typescript-api/-/swagger-typescript-api-13.0.28.tgz", + "integrity": "sha512-8IwPD6nCFDTtzSl8rS7xlAx0NGMpBUlFfccJwgMV7t8d/nKw1yQWPVdC7h94XDsDPrLFvICd5xAJJm2TK2Pcpw==", + "dev": true, + "requires": { + "@types/swagger-schema-official": "^2.0.25", + "citty": "^0.1.6", + "consola": "^3.4.2", + "cosmiconfig": "^9.0.0", + "eta": "^2.2.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "nanoid": "^5.1.5", + "prettier": "~3.5.3", + "swagger-schema-official": "2.0.0-bab6bed", + "swagger2openapi": "^7.0.8", + "typescript": "~5.8.2" + }, + "dependencies": { + "nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "dev": true + }, + "prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true + } + } + }, + "swagger2openapi": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz", + "integrity": "sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "node-fetch": "^2.6.1", + "node-fetch-h2": "^2.3.0", + "node-readfiles": "^0.2.0", + "oas-kit-common": "^1.0.8", + "oas-resolver": "^2.5.6", + "oas-schema-walker": "^1.1.5", + "oas-validator": "^5.0.8", + "reftools": "^1.1.9", + "yaml": "^1.10.0", + "yargs": "^17.0.1" + }, + "dependencies": { + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } + } + }, + "text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "requires": { + "utrie": "^1.0.2" + } + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "requires": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "dependencies": { + "fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "requires": {} + }, + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true + } + } + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "traverse": { + "version": "0.6.11", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.11.tgz", + "integrity": "sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==", + "dev": true, + "requires": { + "gopd": "^1.2.0", + "typedarray.prototype.slice": "^1.0.5", + "which-typed-array": "^1.1.18" + } + }, + "ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "requires": {} + }, + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + } + }, + "typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + } + }, + "typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + } + }, + "typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + } + }, + "typedarray.prototype.slice": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.5.tgz", + "integrity": "sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "math-intrinsics": "^1.1.0", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-offset": "^1.0.4" + } + }, + "typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true + }, + "unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + } + }, + "undici-types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "requires": { + "base64-arraybuffer": "^1.0.2" + } + }, + "vanilla-picker": { + "version": "2.12.3", + "resolved": "https://registry.npmjs.org/vanilla-picker/-/vanilla-picker-2.12.3.tgz", + "integrity": "sha512-qVkT1E7yMbUsB2mmJNFmaXMWE2hF8ffqzMMwe9zdAikd8u2VfnsVY2HQcOUi2F38bgbxzlJBEdS1UUhOXdF9GQ==", + "requires": { + "@sphinxxxx/color-conversion": "^2.2.2" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dev": true, + "requires": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "fsevents": "~2.3.3", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "dependencies": { + "fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "requires": {} + }, + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true + } + } + }, + "vite-plugin-compression": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz", + "integrity": "sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "debug": "^4.3.3", + "fs-extra": "^10.0.0" + } + }, + "vite-plugin-svg-icons": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vite-plugin-svg-icons/-/vite-plugin-svg-icons-2.0.1.tgz", + "integrity": "sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==", + "dev": true, + "requires": { + "@types/svgo": "^2.6.1", + "cors": "^2.8.5", + "debug": "^4.3.3", + "etag": "^1.8.1", + "fs-extra": "^10.0.0", + "pathe": "^0.2.0", + "svg-baker": "1.7.0", + "svgo": "^2.8.0" + } + }, + "vite-plugin-vue-setup-extend": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.4.0.tgz", + "integrity": "sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==", + "dev": true, + "requires": { + "@vue/compiler-sfc": "^3.2.29", + "magic-string": "^0.25.7" + }, + "dependencies": { + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + } + } + }, + "vue": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.16.tgz", + "integrity": "sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w==", + "requires": { + "@vue/compiler-dom": "3.5.16", + "@vue/compiler-sfc": "3.5.16", + "@vue/runtime-dom": "3.5.16", + "@vue/server-renderer": "3.5.16", + "@vue/shared": "3.5.16" + }, + "dependencies": { + "@vue/compiler-core": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.16.tgz", + "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==", + "requires": { + "@babel/parser": "^7.27.2", + "@vue/shared": "3.5.16", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "@vue/compiler-dom": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz", + "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==", + "requires": { + "@vue/compiler-core": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "@vue/compiler-sfc": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.16.tgz", + "integrity": "sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==", + "requires": { + "@babel/parser": "^7.27.2", + "@vue/compiler-core": "3.5.16", + "@vue/compiler-dom": "3.5.16", + "@vue/compiler-ssr": "3.5.16", + "@vue/shared": "3.5.16", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.3", + "source-map-js": "^1.2.1" + } + }, + "@vue/compiler-ssr": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.16.tgz", + "integrity": "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==", + "requires": { + "@vue/compiler-dom": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "@vue/shared": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz", + "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==" + } + } + }, + "vue-clipboard3": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vue-clipboard3/-/vue-clipboard3-2.0.0.tgz", + "integrity": "sha512-Q9S7dzWGax7LN5iiSPcu/K1GGm2gcBBlYwmMsUc5/16N6w90cbKow3FnPmPs95sungns4yvd9/+JhbAznECS2A==", + "requires": { + "clipboard": "^2.0.6" + } + }, + "vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "requires": {} + }, + "vue-eslint-parser": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.1.3.tgz", + "integrity": "sha512-dbCBnd2e02dYWsXoqX5yKUZlOt+ExIpq7hmHKPb5ZqKcjf++Eo0hMseFTZMLKThrUk61m+Uv6A2YSBve6ZvuDQ==", + "dev": true, + "requires": { + "debug": "^4.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.6.0", + "lodash": "^4.17.21", + "semver": "^7.6.3" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true + } + } + }, + "vue-grid-layout": { + "version": "3.0.0-beta1", + "resolved": "https://registry.npmjs.org/vue-grid-layout/-/vue-grid-layout-3.0.0-beta1.tgz", + "integrity": "sha512-MsW0yfYNtnAO/uDhfZvkP6effxSJxvhAFbIL37x6Rn3vW9xf0WHVefKaSbQMLpSq3mXnR6ut0pg2Cd5lqIIZzg==", + "requires": { + "@interactjs/actions": "^1.10.2", + "@interactjs/auto-start": "^1.10.2", + "@interactjs/dev-tools": "^1.10.2", + "@interactjs/interactjs": "^1.10.2", + "@interactjs/modifiers": "^1.10.2", + "element-resize-detector": "^1.2.1", + "mitt": "^2.1.0" + }, + "dependencies": { + "mitt": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-2.1.0.tgz", + "integrity": "sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==" + } + } + }, + "vue-i18n": { + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.1.7.tgz", + "integrity": "sha512-CDrU7Cmyh1AxJjerQmipV9nVa//exVBdhTcWGlbfcDCN8bKp/uAe7Le6IoN4//5emIikbsSKe9Uofmf/xXkhOA==", + "requires": { + "@intlify/core-base": "11.1.7", + "@intlify/shared": "11.1.7", + "@vue/devtools-api": "^6.5.0" + }, + "dependencies": { + "@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + } + } + }, + "vue-plugin-hiprint": { + "version": "0.0.60", + "resolved": "https://registry.npmjs.org/vue-plugin-hiprint/-/vue-plugin-hiprint-0.0.60.tgz", + "integrity": "sha512-a5uOMn6Nr4qlYYaVNbQKwRZJa8UcNMTflfi6J430/NDtySJB+5ArE8I8+NLjgVV56x3/qdUBs/GWuZCX5Umv1w==", + "requires": { + "@claviska/jquery-minicolors": "^2.3.6", + "@wtto00/html2canvas": "^1.4.3", + "bwip-js": "^4.0.0", + "canvg": "^3.0.10", + "jquery": "^3.6.0", + "jsbarcode": "^3.11.5", + "jspdf": "^2.5.1", + "lodash": "^4.17.21", + "nzh": "^1.0.8", + "socket.io-client": "^4.5.1" + } + }, + "vue-router": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.1.tgz", + "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==", + "requires": { + "@vue/devtools-api": "^6.6.4" + }, + "dependencies": { + "@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + } + } + }, + "vue3-tree-org": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/vue3-tree-org/-/vue3-tree-org-4.2.2.tgz", + "integrity": "sha512-AG2SykyD6dw0jIyqBm8iuF9j9GWli6KrwudxR1RjULCCBTDFsoNm7MmP/weKT7wowN/sPk+e2RsnvEJMw2OJMw==", + "requires": { + "core-js": "^3.6.5" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "requires": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + } + }, + "which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "requires": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + } + }, + "which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + } + }, + "wildcard": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-1.1.2.tgz", + "integrity": "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==" + }, + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "requires": {} + }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "dev": true, + "optional": true, + "peer": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + }, + "zrender": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.1.tgz", + "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", + "requires": { + "tslib": "2.3.0" + } + } + } +} diff --git a/zhontai.ui.admin.vue3/package.json b/zhontai.ui.admin.vue3/package.json new file mode 100644 index 0000000..f19dcf7 --- /dev/null +++ b/zhontai.ui.admin.vue3/package.json @@ -0,0 +1,97 @@ +{ + "name": "zhontai.ui.admin.vue3", + "version": "9.1.2", + "description": "vue3 vite admin plus", + "author": "", + "license": "MIT", + "type": "module", + "scripts": { + "dev": "vite --force", + "build": "vite build", + "lint-fix": "eslint --fix --ext .js --ext .jsx --ext .vue src/", + "format": "npx prettier --write .", + "install:pkg": "pnpm install", + "gen:api": "node ./gen/gen-api" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "axios": "^1.10.0", + "countup.js": "^2.9.0", + "cropperjs": "^2.0.0", + "dayjs": "^1.11.13", + "echarts": "^5.6.0", + "echarts-gl": "^2.0.9", + "echarts-wordcloud": "^2.1.0", + "element-plus": "2.10.2", + "js-cookie": "^3.0.5", + "js-table2excel": "^1.1.2", + "jsplumb": "^2.15.6", + "jsoneditor": "^10.2.0", + "lodash-es": "^4.17.21", + "mitt": "^3.0.1", + "nprogress": "^0.2.0", + "pinia": "^3.0.3", + "print-js": "^1.6.0", + "qrcodejs2-fixes": "^0.0.2", + "qs": "^6.14.0", + "screenfull": "^6.0.2", + "sm-crypto-v2": "^1.12.0", + "sortablejs": "^1.15.6", + "splitpanes": "^4.0.4", + "vue": "3.5.16", + "vue-clipboard3": "^2.0.0", + "vue-demi": "^0.14.10", + "vue-grid-layout": "^3.0.0-beta1", + "vue-i18n": "^11.1.5", + "vue-plugin-hiprint": "^0.0.60", + "vue-router": "^4.5.1", + "vue3-tree-org": "^4.2.2" + }, + "devDependencies": { + "@types/lodash-es": "^4.17.12", + "@types/node": "^24.0.3", + "@types/nprogress": "^0.2.3", + "@types/sortablejs": "^1.15.8", + "@typescript-eslint/eslint-plugin": "^8.34.1", + "@typescript-eslint/parser": "^8.34.1", + "@vitejs/plugin-vue": "^5.2.4", + "@vue/compiler-sfc": "^3.5.16", + "dotenv": "16.5.0", + "ejs": "^3.1.10", + "eslint": "^9.29.0", + "eslint-plugin-vue": "^10.2.0", + "prettier": "^3.5.3", + "sass": "^1.89.2", + "swagger-typescript-api": "13.0.28", + "typescript": "^5.8.3", + "vite": "^6.3.5", + "vite-plugin-compression": "0.5.1", + "vite-plugin-svg-icons": "^2.0.1", + "vite-plugin-vue-setup-extend": "^0.4.0", + "vue-eslint-parser": "^10.1.3" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ], + "bugs": { + "url": "https://github.com/zhontai/admin.ui.plus/issues" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">= 7.0.0" + }, + "keywords": [ + "vue3", + "element-plus", + "zhontai", + "admin" + ], + "repository": { + "type": "git", + "url": "https://github.com/zhontai/admin.ui.plus/git" + } +} diff --git a/zhontai.ui.admin.vue3/public/favicon.ico b/zhontai.ui.admin.vue3/public/favicon.ico new file mode 100644 index 0000000..8e6593a Binary files /dev/null and b/zhontai.ui.admin.vue3/public/favicon.ico differ diff --git a/zhontai.ui.admin.vue3/public/print-lock.css b/zhontai.ui.admin.vue3/public/print-lock.css new file mode 100644 index 0000000..3128ca4 --- /dev/null +++ b/zhontai.ui.admin.vue3/public/print-lock.css @@ -0,0 +1,356 @@ +@media print { + body { + margin: 0px; + padding: 0px; + } +} + +@page { + margin: 0; +} + +.hiprint-printPaper * { + box-sizing: border-box; + -moz-box-sizing: border-box; /* Firefox */ + -webkit-box-sizing: border-box; /* Safari */ +} + +.hiprint-printPaper *:focus { + outline: -webkit-focus-ring-color auto 0px; +} + +.hiprint-printPaper { + position: relative; + padding: 0 0 0 0; + page-break-after: always; + -webkit-user-select: none; /* Chrome/Safari/Opera */ + -moz-user-select: none; /* Firefox */ + user-select: none; + overflow-x: hidden; + overflow: hidden; +} + +.hiprint-printPaper .hiprint-printPaper-content { + position: relative; +} + +/* 火狐浏览器打印 第一页过后 重叠问题 */ +@-moz-document url-prefix() { + .hiprint-printPaper .hiprint-printPaper-content { + position: relative; + margin-top: 20px; + top: -20px; + } +} + +.hiprint-printPaper.design { + overflow: visible; +} + +.hiprint-printTemplate .hiprint-printPanel { + page-break-after: always; +} + +.hiprint-printPaper, +hiprint-printPanel { + box-sizing: border-box; + border: 0px; +} + +.hiprint-printPanel .hiprint-printPaper:last-child { + page-break-after: avoid; +} + +.hiprint-printTemplate .hiprint-printPanel:last-child { + page-break-after: avoid; +} + +.hiprint-printPaper .hideheaderLinetarget { + border-top: 0px dashed rgb(201, 190, 190) !important; +} + +.hiprint-printPaper .hidefooterLinetarget { + border-top: 0px dashed rgb(201, 190, 190) !important; +} + +.hiprint-printPaper.design { + border: 1px dashed rgba(170, 170, 170, 0.7); +} + +.design .hiprint-printElement-table-content, +.design .hiprint-printElement-longText-content { + overflow: hidden; + box-sizing: border-box; +} + +.design .resize-panel { + box-sizing: border-box; + border: 1px dotted; +} + +.hiprint-printElement-text { + background-color: transparent; + background-repeat: repeat; + padding: 0 0 0 0; + border: 0.75pt none rgb(0, 0, 0); + direction: ltr; + font-family: 'SimSun'; + font-size: 9pt; + font-style: normal; + font-weight: normal; + padding-bottom: 0pt; + padding-left: 0pt; + padding-right: 0pt; + padding-top: 0pt; + text-align: left; + text-decoration: none; + line-height: 9.75pt; + box-sizing: border-box; + word-wrap: break-word; + word-break: break-all; +} + +.design .hiprint-printElement-text-content { + border: 1px dashed rgb(206, 188, 188); + box-sizing: border-box; +} + +.hiprint-printElement-longText { + background-color: transparent; + background-repeat: repeat; + border: 0.75pt none rgb(0, 0, 0); + direction: ltr; + font-family: 'SimSun'; + font-size: 9pt; + font-style: normal; + font-weight: normal; + padding-bottom: 0pt; + padding-left: 0pt; + padding-right: 0pt; + padding-top: 0pt; + text-align: left; + text-decoration: none; + line-height: 9.75pt; + box-sizing: border-box; + word-wrap: break-word; + word-break: break-all; + /*white-space: pre-wrap*/ +} + +.hiprint-printElement-table { + background-color: transparent; + background-repeat: repeat; + color: rgb(0, 0, 0); + border-color: rgb(0, 0, 0); + border-style: none; + direction: ltr; + font-family: 'SimSun'; + font-size: 9pt; + font-style: normal; + font-weight: normal; + padding-bottom: 0pt; + padding-left: 0pt; + padding-right: 0pt; + padding-top: 0pt; + text-align: left; + text-decoration: none; + padding: 0 0 0 0; + box-sizing: border-box; + line-height: 9.75pt; +} + +.hiprint-printElement-table thead { + background: #e8e8e8; + font-weight: 700; +} + +table.hiprint-printElement-tableTarget { + width: 100%; +} + +.hiprint-printElement-tableTarget, +.hiprint-printElement-tableTarget tr, +.hiprint-printElement-tableTarget td { + border-color: rgb(0, 0, 0); + /*border-style: none;*/ + /*border: 1px solid rgb(0, 0, 0);*/ + font-weight: normal; + direction: ltr; + padding-bottom: 0pt; + padding-left: 4pt; + padding-right: 4pt; + padding-top: 0pt; + text-decoration: none; + vertical-align: middle; + box-sizing: border-box; + word-wrap: break-word; + word-break: break-all; + /*line-height: 9.75pt; + font-size: 9pt;*/ +} + +.hiprint-printElement-tableTarget-border-all { + border: 1px solid; +} +.hiprint-printElement-tableTarget-border-none { + border: 0px solid; +} +.hiprint-printElement-tableTarget-border-lr { + border-left: 1px solid; + border-right: 1px solid; +} +.hiprint-printElement-tableTarget-border-left { + border-left: 1px solid; +} +.hiprint-printElement-tableTarget-border-right { + border-right: 1px solid; +} +.hiprint-printElement-tableTarget-border-tb { + border-top: 1px solid; + border-bottom: 1px solid; +} +.hiprint-printElement-tableTarget-border-top { + border-top: 1px solid; +} +.hiprint-printElement-tableTarget-border-bottom { + border-bottom: 1px solid; +} + +.hiprint-printElement-tableTarget-border-td-none td { + border: 0px solid; +} +.hiprint-printElement-tableTarget-border-td-all td:not(:nth-last-child(-n + 2)) { + border-right: 1px solid; +} +.hiprint-printElement-tableTarget-border-td-all td:not(last-child) { + border-right: 1px solid; +} +.hiprint-printElement-tableTarget-border-td-all td:last-child { + border-left: 1px solid; +} +.hiprint-printElement-tableTarget-border-td-all td:last-child:first-child { + border-left: none; +} + +/*.hiprint-printElement-tableTarget tr,*/ +.hiprint-printElement-tableTarget td { + height: 18pt; +} + +.hiprint-printPaper .hiprint-paperNumber { + font-size: 9pt; +} + +.design .hiprint-printElement-table-handle { + position: absolute; + height: 21pt; + width: 21pt; + background: red; + z-index: 1; +} + +.hiprint-printPaper .hiprint-paperNumber-disabled { + float: right !important; + right: 0 !important; + color: gainsboro !important; +} + +.hiprint-printElement-vline, +.hiprint-printElement-hline { + border: 0px none rgb(0, 0, 0); +} + +.hiprint-printElement-vline { + border-left: 0.75pt solid #000; + border-right: 0px none rgb(0, 0, 0) !important; + border-bottom: 0px none rgb(0, 0, 0) !important; + border-top: 0px none rgb(0, 0, 0) !important; +} + +.hiprint-printElement-hline { + border-top: 0.75pt solid #000; + border-right: 0px none rgb(0, 0, 0) !important; + border-bottom: 0px none rgb(0, 0, 0) !important; + border-left: 0px none rgb(0, 0, 0) !important; +} + +.hiprint-printElement-oval, +.hiprint-printElement-rect { + border: 0.75pt solid #000; +} + +.hiprint-text-content-middle { +} + +.hiprint-text-content-middle > div { + display: grid; + align-items: center; +} + +.hiprint-text-content-bottom { +} + +.hiprint-text-content-bottom > div { + display: grid; + align-items: flex-end; +} + +.hiprint-text-content-wrap { +} + +.hiprint-text-content-wrap .hiprint-text-content-wrap-nowrap { + white-space: nowrap; +} + +.hiprint-text-content-wrap .hiprint-text-content-wrap-clip { + white-space: nowrap; + overflow: hidden; + text-overflow: clip; +} + +.hiprint-text-content-wrap .hiprint-text-content-wrap-ellipsis { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +/*hi-grid-row */ +.hi-grid-row { + position: relative; + height: auto; + margin-right: 0; + margin-left: 0; + zoom: 1; + display: block; + box-sizing: border-box; +} + +.hi-grid-row::after, +.hi-grid-row::before { + display: table; + content: ''; + box-sizing: border-box; +} + +.hi-grid-col { + display: block; + box-sizing: border-box; + position: relative; + float: left; + flex: 0 0 auto; +} + +.table-grid-row { + margin-left: -0pt; + margin-right: -0pt; +} + +.tableGridColumnsGutterRow { + padding-left: 0pt; + padding-right: 0pt; +} + +.hiprint-gridColumnsFooter { + text-align: left; + clear: both; +} diff --git a/zhontai.ui.admin.vue3/src/App.vue b/zhontai.ui.admin.vue3/src/App.vue new file mode 100644 index 0000000..fe3646f --- /dev/null +++ b/zhontai.ui.admin.vue3/src/App.vue @@ -0,0 +1,105 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/api/admin.extend/Api.ts b/zhontai.ui.admin.vue3/src/api/admin.extend/Api.ts new file mode 100644 index 0000000..29eaa91 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin.extend/Api.ts @@ -0,0 +1,50 @@ +/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { HttpClient, RequestParams } from '../admin/http-client' + +export class ApiApi extends HttpClient { + /** + * No description + * + * @tags api + * @name GetList + * @summary 获得swagger resources + * @request GET:/swagger-resources + * @secure + */ + getSwaggerResources = (path: string, params: RequestParams = {}) => + this.request({ + path: path, + method: 'GET', + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags api + * @name GetList + * @summary 获得swagger json + * @request GET:/swagger-resources + * @secure + */ + getSwaggerJson = (path: string, params: RequestParams = {}) => + this.request({ + path: path, + method: 'GET', + secure: true, + format: 'json', + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin.extend/enum-contracts.ts b/zhontai.ui.admin.vue3/src/api/admin.extend/enum-contracts.ts new file mode 100644 index 0000000..f62374e --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin.extend/enum-contracts.ts @@ -0,0 +1,32 @@ +/** 组件类型 */ +export const ComponentType = { + Account: { name: 'account', value: 1, desc: '账号' }, + Mobile: { name: 'mobile', value: 2, desc: '手机' }, + Email: { name: 'email', value: 3, desc: '邮箱' }, +} + +/** 平台类型 */ +export const PlatformType = { + Web: { name: 'web', value: 1, desc: 'Web端' }, + App: { name: 'app', value: 2, desc: 'App端' }, + CS: { name: 'cs', value: 3, desc: 'CS端' }, +} + +/** 操作符 */ +export const Operator = { + equal: { label: '等于', value: 'Equal' }, + notEqual: { label: '不等于', value: 'NotEqual' }, + contains: { label: '包含', value: 'Contains' }, + notContains: { label: '不包含', value: 'NotContains' }, + startsWith: { label: '开始以', value: 'StartsWith' }, + notStartsWith: { label: '开始不是以', value: 'NotStartsWith' }, + endsWith: { label: '结束以', value: 'EndsWith' }, + notEndsWith: { label: '结束不是以', value: 'NotEndsWith' }, + lessThan: { label: '小于', value: 'LessThan' }, + lessThanOrEqual: { label: '小于等于', value: 'LessThanOrEqual' }, + greaterThan: { label: '大于', value: 'GreaterThan' }, + greaterThanOrEqual: { label: '大于等于', value: 'GreaterThanOrEqual' }, + dateRange: { label: '时间段', value: 'dateRange' }, + any: { label: '在列表', value: 'Any' }, + notAny: { label: '不在列表', value: 'NotAny' }, +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Api.ts b/zhontai.ui.admin.vue3/src/api/admin/Api.ts new file mode 100644 index 0000000..4aa9309 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Api.ts @@ -0,0 +1,312 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + ApiAddInput, + ApiSetEnableLogInput, + ApiSetEnableParamsInput, + ApiSetEnableResultInput, + ApiSyncInput, + ApiUpdateInput, + PageInputApiGetPageInput, + ResultOutputApiGetOutput, + ResultOutputInt64, + ResultOutputListApiGetListOutput, + ResultOutputListProjectConfig, + ResultOutputPageOutputApiEntity, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class ApiApi extends HttpClient { + /** + * No description + * + * @tags api + * @name Get + * @summary 查询 + * @request GET:/api/admin/api/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/api/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags api + * @name GetList + * @summary 查询列表 + * @request GET:/api/admin/api/get-list + * @secure + */ + getList = ( + query?: { + key?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/api/get-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags api + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/api/get-page + * @secure + */ + getPage = (data: PageInputApiGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/api/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags api + * @name Add + * @summary 添加 + * @request POST:/api/admin/api/add + * @secure + */ + add = (data: ApiAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/api/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags api + * @name Update + * @summary 修改 + * @request PUT:/api/admin/api/update + * @secure + */ + update = (data: ApiUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/api/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags api + * @name SetEnableLog + * @summary 设置启用接口日志 + * @request POST:/api/admin/api/set-enable-log + * @secure + */ + setEnableLog = (data: ApiSetEnableLogInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/api/set-enable-log`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags api + * @name SetEnableParams + * @summary 设置启用请求参数 + * @request POST:/api/admin/api/set-enable-params + * @secure + */ + setEnableParams = (data: ApiSetEnableParamsInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/api/set-enable-params`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags api + * @name SetEnableResult + * @summary 设置启用响应结果 + * @request POST:/api/admin/api/set-enable-result + * @secure + */ + setEnableResult = (data: ApiSetEnableResultInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/api/set-enable-result`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags api + * @name Delete + * @summary 彻底删除 + * @request DELETE:/api/admin/api/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/api/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags api + * @name BatchDelete + * @summary 批量彻底删除 + * @request PUT:/api/admin/api/batch-delete + * @secure + */ + batchDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/api/batch-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags api + * @name SoftDelete + * @summary 删除 + * @request DELETE:/api/admin/api/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/api/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags api + * @name BatchSoftDelete + * @summary 批量删除 + * @request PUT:/api/admin/api/batch-soft-delete + * @secure + */ + batchSoftDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/api/batch-soft-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags api + * @name Sync + * @summary 同步 + * @request POST:/api/admin/api/sync + * @secure + */ + sync = (data: ApiSyncInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/api/sync`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags api + * @name GetProjects + * @summary 获得项目列表 + * @request GET:/api/admin/api/get-projects + * @secure + */ + getProjects = ( + query?: { + /** @default "/swagger" */ + suffix?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/api/get-projects`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Auth.ts b/zhontai.ui.admin.vue3/src/api/admin/Auth.ts new file mode 100644 index 0000000..ddc861c --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Auth.ts @@ -0,0 +1,311 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + AuthChangePasswordByEmailInput, + AuthChangePasswordByMobileInput, + AuthEmailLoginInput, + AuthLoginInput, + AuthMobileLoginInput, + AuthRegByEmailInput, + AuthRegByMobileInput, + ResultOutputAuthGetPasswordEncryptKeyOutput, + ResultOutputAuthGetUserInfoOutput, + ResultOutputAuthGetUserPermissionsOutput, + ResultOutputAuthUserProfileOutput, + ResultOutputBoolean, + ResultOutputListAuthUserMenuOutput, + ResultOutputTokenInfo, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class AuthApi extends HttpClient { + /** + * No description + * + * @tags auth + * @name GetPasswordEncryptKey + * @summary 查询密钥 + * @request GET:/api/admin/auth/get-password-encrypt-key + * @secure + */ + getPasswordEncryptKey = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/auth/get-password-encrypt-key`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags auth + * @name GetUserProfile + * @summary 查询用户个人信息 + * @request GET:/api/admin/auth/get-user-profile + * @secure + */ + getUserProfile = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/auth/get-user-profile`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags auth + * @name GetUserMenus + * @summary 查询用户菜单列表 + * @request GET:/api/admin/auth/get-user-menus + * @secure + */ + getUserMenus = ( + query?: { + /** @default "web" */ + platform?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/auth/get-user-menus`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags auth + * @name GetUserPermissions + * @summary 查询用户权限列表 + * @request GET:/api/admin/auth/get-user-permissions + * @secure + */ + getUserPermissions = ( + query?: { + /** @default "web" */ + platform?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/auth/get-user-permissions`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags auth + * @name GetUserInfo + * @summary 查询用户信息 + * @request GET:/api/admin/auth/get-user-info + * @secure + */ + getUserInfo = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/auth/get-user-info`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags auth + * @name Login + * @summary 登录 + * @request POST:/api/admin/auth/login + * @secure + */ + login = (data: AuthLoginInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/auth/login`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags auth + * @name MobileLogin + * @summary 手机登录 + * @request POST:/api/admin/auth/mobile-login + * @secure + */ + mobileLogin = (data: AuthMobileLoginInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/auth/mobile-login`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags auth + * @name EmailLogin + * @summary 邮箱登录 + * @request POST:/api/admin/auth/email-login + * @secure + */ + emailLogin = (data: AuthEmailLoginInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/auth/email-login`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags auth + * @name ChangePasswordByEmail + * @summary 邮箱更改密码 + * @request POST:/api/admin/auth/change-password-by-email + * @secure + */ + changePasswordByEmail = (data: AuthChangePasswordByEmailInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/auth/change-password-by-email`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags auth + * @name ChangePasswordByMobile + * @summary 手机更改密码 + * @request POST:/api/admin/auth/change-password-by-mobile + * @secure + */ + changePasswordByMobile = (data: AuthChangePasswordByMobileInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/auth/change-password-by-mobile`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags auth + * @name RegByEmail + * @summary 邮箱注册 + * @request POST:/api/admin/auth/reg-by-email + * @secure + */ + regByEmail = (data: AuthRegByEmailInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/auth/reg-by-email`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags auth + * @name RegByMobile + * @summary 手机号注册 + * @request POST:/api/admin/auth/reg-by-mobile + * @secure + */ + regByMobile = (data: AuthRegByMobileInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/auth/reg-by-mobile`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags auth + * @name Refresh + * @summary 刷新Token +以旧换新 + * @request GET:/api/admin/auth/refresh + * @secure + */ + refresh = ( + query: { + token: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/auth/refresh`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags auth + * @name IsCaptcha + * @summary 是否开启验证码 + * @request GET:/api/admin/auth/is-captcha + * @secure + */ + isCaptcha = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/auth/is-captcha`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }) + + samlLogin = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/auth/login-by-saml`, + method: 'Post', + secure: true, + format: 'json', + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Board.ts b/zhontai.ui.admin.vue3/src/api/admin/Board.ts new file mode 100644 index 0000000..ff4a6d5 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Board.ts @@ -0,0 +1,229 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + BoardAddInput, + BoardGetOutput, + BoardGetPageInput, + BoardGetPageOutput, + BoardUpdateInput, + PageInputBoardGetPageInput, + ResultOutputBoardGetOutput, + ResultOutputInt64, + ResultOutputPageOutputBoardGetPageOutput, + BoardGetBoardUserListOutput, + BoardAddBoardUserListInput, + BoardRemoveBoardUserInput, + BoardGetBoardListByUserIdOutput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class BoardApi extends HttpClient { + /** + * No description + * + * @tags board + * @name Get + * @summary 查询 + * @request GET:/api/admin/board/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/board/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags board + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/board/get-page + * @secure + */ + getPage = (data: PageInputBoardGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/board/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags board + * @name Add + * @summary 添加 + * @request POST:/api/admin/board/add + * @secure + */ + add = (data: BoardAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/board/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags board + * @name Update + * @summary 修改 + * @request PUT:/api/admin/board/update + * @secure + */ + update = (data: BoardUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/board/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags board + * @name SoftDelete + * @summary 软删除 + * @request DELETE:/api/admin/board/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/board/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + + // GetBoardListByUserIdAsync + + + + /** + * No description + * + * @tags board + * @name GetBoardUserList + * @summary 获取看板用户列表 + * @request GET:/api/admin/board/get-board-user-list + * @secure + */ + getBoardUserList = ( + query?: { + /** @format int64 */ + BoardId?: number + /** 姓名 */ + Name?: string | null + }, + params: RequestParams = {} + ) => + this.request<{ success?: boolean; data?: BoardGetBoardUserListOutput[] }, any>({ + path: `/api/admin/board/get-board-user-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + + /** + * No description + * + * @tags board + * @name AddBoardUser + * @summary 添加看板用户 + * @request POST:/api/admin/board/add-board-user + * @secure + */ + addBoardUser = (data: BoardAddBoardUserListInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/board/add-board-user`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + + /** + * No description + * + * @tags board + * @name RemoveBoardUser + * @summary 移除看板用户 + * @request POST:/api/admin/board/remove-board-user + * @secure + */ + removeBoardUser = (data: BoardRemoveBoardUserInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/board/remove-board-user`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + + /** + * No description + * + * @tags board + * @name GetBoardListByUserId + * @summary 根据当前用户获取看板列表 + * @request GET:/api/admin/board/get-board-list-by-user-id + * @secure + */ + getBoardListByUserId = ( + query?: { + /** 看板名称 */ + name?: string | null + }, + params: RequestParams = {} + ) => + this.request<{ success?: boolean; data?: BoardGetBoardListByUserIdOutput[] }, any>({ + path: `/api/admin/board/get-board-list-by-user-id`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) +} \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/api/admin/Cache.ts b/zhontai.ui.admin.vue3/src/api/admin/Cache.ts new file mode 100644 index 0000000..4bdb630 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Cache.ts @@ -0,0 +1,58 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { ResultOutputListObject } from './data-contracts' +import { HttpClient, RequestParams } from './http-client' + +export class CacheApi extends HttpClient { + /** + * No description + * + * @tags cache + * @name GetList + * @summary 查询列表 + * @request GET:/api/admin/cache/get-list + * @secure + */ + getList = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/cache/get-list`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags cache + * @name Clear + * @summary 清除缓存 + * @request DELETE:/api/admin/cache/clear + * @secure + */ + clear = ( + query?: { + /** 缓存键 */ + cacheKey?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/cache/clear`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Captcha.ts b/zhontai.ui.admin.vue3/src/api/admin/Captcha.ts new file mode 100644 index 0000000..8d19273 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Captcha.ts @@ -0,0 +1,113 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { + ResultOutputCaptchaData, + ResultOutputString, + ResultOutputValidateResult, + SendEmailCodeInput, + SendSmsCodeInput, + SlideTrack, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class CaptchaApi extends HttpClient { + /** + * No description + * + * @tags captcha + * @name Generate + * @summary 生成 + * @request POST:/api/admin/captcha/generate + * @secure + */ + generate = ( + query?: { + /** 验证码id */ + captchaId?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/captcha/generate`, + method: 'POST', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags captcha + * @name Check + * @summary 验证 + * @request POST:/api/admin/captcha/check + * @secure + */ + check = ( + data: SlideTrack, + query?: { + /** 验证码Id */ + captchaId?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/captcha/check`, + method: 'POST', + query: query, + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags captcha + * @name SendSmsCode + * @summary 发送短信验证码 + * @request POST:/api/admin/captcha/send-sms-code + * @secure + */ + sendSmsCode = (data: SendSmsCodeInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/captcha/send-sms-code`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags captcha + * @name SendEmailCode + * @summary 发送邮件验证码 + * @request POST:/api/admin/captcha/send-email-code + * @secure + */ + sendEmailCode = (data: SendEmailCodeInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/captcha/send-email-code`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/CustomNavigation.ts b/zhontai.ui.admin.vue3/src/api/admin/CustomNavigation.ts new file mode 100644 index 0000000..24ac0d4 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/CustomNavigation.ts @@ -0,0 +1,30 @@ +import { HttpClient, ContentType, RequestParams } from './http-client' +import { CustomNavigationInput } from './data-contracts' + +export class CustomNavigationApi extends HttpClient { + /** + * 保存自定义导航 + * @request POST:/api/user/custom-navigation + */ + save = (data: CustomNavigationInput, params: RequestParams = {}) => + this.request({ + path: '/api/admin/user-custom-navigation/save', + method: 'POST', + body: data, + type: ContentType.Json, + format: 'json', + ...params, + }) + + /** + * 获取自定义导航 + * @request GET:/api/user/custom-navigation + */ + get = (params: RequestParams = {}) => + this.request({ + path: '/api/admin/user-custom-navigation/get', + method: 'GET', + format: 'json', + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Dict.ts b/zhontai.ui.admin.vue3/src/api/admin/Dict.ts new file mode 100644 index 0000000..e19921e --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Dict.ts @@ -0,0 +1,316 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + DictAddInput, + DictUpdateInput, + ExportInput, + PageInputDictGetPageInput, + ResultOutputDictGetOutput, + ResultOutputDictionaryStringListDictGetListOutput, + ResultOutputImportOutput, + ResultOutputInt64, + ResultOutputPageOutputDictGetPageOutput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class DictApi extends HttpClient { + /** + * No description + * + * @tags dict + * @name Get + * @summary 查询 + * @request GET:/api/admin/dict/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/dict/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags dict + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/dict/get-page + * @secure + */ + getPage = (data: PageInputDictGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/dict/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags dict + * @name GetList + * @summary 通过类型编码查询列表 + * @request POST:/api/admin/dict/get-list + * @secure + */ + getList = (data: string[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/dict/get-list`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags dict + * @name GetListByNames + * @summary 通过类型名称查询列表 + * @request POST:/api/admin/dict/get-list-by-names + * @secure + */ + getListByNames = (data: string[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/dict/get-list-by-names`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags dict + * @name DownloadTemplate + * @summary 下载导入模板 + * @request POST:/api/admin/dict/download-template + * @secure + */ + downloadTemplate = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/dict/download-template`, + method: 'POST', + secure: true, + ...params, + }) + /** + * No description + * + * @tags dict + * @name DownloadErrorMark + * @summary 下载错误标记文件 + * @request POST:/api/admin/dict/download-error-mark + * @secure + */ + downloadErrorMark = ( + query?: { + fileId?: string + fileName?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/dict/download-error-mark`, + method: 'POST', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags dict + * @name ExportData + * @summary 导出数据 + * @request POST:/api/admin/dict/export-data + * @secure + */ + exportData = (data: ExportInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/dict/export-data`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags dict + * @name ImportData + * @summary 导入数据 + * @request POST:/api/admin/dict/import-data + * @secure + */ + importData = ( + data: { + /** @format binary */ + file: File + }, + query?: { + /** @format int32 */ + duplicateAction?: number + fileId?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/dict/import-data`, + method: 'POST', + query: query, + body: data, + secure: true, + type: ContentType.FormData, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags dict + * @name Add + * @summary 新增 + * @request POST:/api/admin/dict/add + * @secure + */ + add = (data: DictAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/dict/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags dict + * @name Update + * @summary 修改 + * @request PUT:/api/admin/dict/update + * @secure + */ + update = (data: DictUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/dict/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags dict + * @name Delete + * @summary 彻底删除 + * @request DELETE:/api/admin/dict/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/dict/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags dict + * @name BatchDelete + * @summary 批量彻底删除 + * @request PUT:/api/admin/dict/batch-delete + * @secure + */ + batchDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/dict/batch-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags dict + * @name SoftDelete + * @summary 删除 + * @request DELETE:/api/admin/dict/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/dict/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags dict + * @name BatchSoftDelete + * @summary 批量删除 + * @request PUT:/api/admin/dict/batch-soft-delete + * @secure + */ + batchSoftDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/dict/batch-soft-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/DictType.ts b/zhontai.ui.admin.vue3/src/api/admin/DictType.ts new file mode 100644 index 0000000..6af962a --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/DictType.ts @@ -0,0 +1,187 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + DictTypeAddInput, + DictTypeUpdateInput, + PageInputDictTypeGetPageInput, + ResultOutputDictTypeGetOutput, + ResultOutputInt64, + ResultOutputPageOutputDictTypeGetPageOutput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class DictTypeApi extends HttpClient { + /** + * No description + * + * @tags dict-type + * @name Get + * @summary 查询 + * @request GET:/api/admin/dict-type/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/dict-type/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags dict-type + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/dict-type/get-page + * @secure + */ + getPage = (data: PageInputDictTypeGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/dict-type/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags dict-type + * @name Add + * @summary 新增 + * @request POST:/api/admin/dict-type/add + * @secure + */ + add = (data: DictTypeAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/dict-type/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags dict-type + * @name Update + * @summary 修改 + * @request PUT:/api/admin/dict-type/update + * @secure + */ + update = (data: DictTypeUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/dict-type/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags dict-type + * @name Delete + * @summary 彻底删除 + * @request DELETE:/api/admin/dict-type/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/dict-type/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags dict-type + * @name BatchDelete + * @summary 批量彻底删除 + * @request PUT:/api/admin/dict-type/batch-delete + * @secure + */ + batchDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/dict-type/batch-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags dict-type + * @name SoftDelete + * @summary 删除 + * @request DELETE:/api/admin/dict-type/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/dict-type/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags dict-type + * @name BatchSoftDelete + * @summary 批量删除 + * @request PUT:/api/admin/dict-type/batch-soft-delete + * @secure + */ + batchSoftDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/dict-type/batch-soft-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Doc.ts b/zhontai.ui.admin.vue3/src/api/admin/Doc.ts new file mode 100644 index 0000000..89fe692 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Doc.ts @@ -0,0 +1,387 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + DocAddGroupInput, + DocAddImageInput, + DocAddMenuInput, + DocUpdateContentInput, + DocUpdateGroupInput, + DocUpdateMenuInput, + ResultOutputDocGetContentOutput, + ResultOutputDocGetGroupOutput, + ResultOutputDocGetMenuOutput, + ResultOutputIEnumerableObject, + ResultOutputInt64, + ResultOutputListDocListOutput, + ResultOutputListString, + ResultOutputString, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class DocApi extends HttpClient { + /** + * No description + * + * @tags doc + * @name GetGroup + * @summary 查询分组 + * @request GET:/api/admin/doc/get-group + * @secure + */ + getGroup = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/doc/get-group`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags doc + * @name GetMenu + * @summary 查询菜单 + * @request GET:/api/admin/doc/get-menu + * @secure + */ + getMenu = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/doc/get-menu`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags doc + * @name GetContent + * @summary 查询文档内容 + * @request GET:/api/admin/doc/get-content + * @secure + */ + getContent = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/doc/get-content`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags doc + * @name GetList + * @summary 查询文档列表 + * @request GET:/api/admin/doc/get-list + * @secure + */ + getList = ( + query?: { + key?: string + /** @format date-time */ + start?: string + /** @format date-time */ + end?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/doc/get-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags doc + * @name GetImageList + * @summary 查询图片列表 + * @request GET:/api/admin/doc/get-image-list + * @secure + */ + getImageList = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/doc/get-image-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags doc + * @name AddGroup + * @summary 新增分组 + * @request POST:/api/admin/doc/add-group + * @secure + */ + addGroup = (data: DocAddGroupInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/doc/add-group`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags doc + * @name AddMenu + * @summary 新增菜单 + * @request POST:/api/admin/doc/add-menu + * @secure + */ + addMenu = (data: DocAddMenuInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/doc/add-menu`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags doc + * @name AddImage + * @summary 新增图片 + * @request POST:/api/admin/doc/add-image + * @secure + */ + addImage = (data: DocAddImageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/doc/add-image`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags doc + * @name UpdateGroup + * @summary 修改分组 + * @request PUT:/api/admin/doc/update-group + * @secure + */ + updateGroup = (data: DocUpdateGroupInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/doc/update-group`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags doc + * @name UpdateMenu + * @summary 修改菜单 + * @request PUT:/api/admin/doc/update-menu + * @secure + */ + updateMenu = (data: DocUpdateMenuInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/doc/update-menu`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags doc + * @name UpdateContent + * @summary 修改文档内容 + * @request PUT:/api/admin/doc/update-content + * @secure + */ + updateContent = (data: DocUpdateContentInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/doc/update-content`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags doc + * @name Delete + * @summary 彻底删除文档 + * @request DELETE:/api/admin/doc/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/doc/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags doc + * @name DeleteImage + * @summary 彻底删除图片 + * @request DELETE:/api/admin/doc/delete-image + * @secure + */ + deleteImage = ( + query?: { + /** @format int64 */ + documentId?: number + url?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/doc/delete-image`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags doc + * @name SoftDelete + * @summary 删除文档 + * @request DELETE:/api/admin/doc/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/doc/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags doc + * @name GetPlainList + * @summary 查询精简文档列表 + * @request GET:/api/admin/doc/get-plain-list + * @secure + */ + getPlainList = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/doc/get-plain-list`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags doc + * @name UploadImage + * @summary 上传文档图片 + * @request POST:/api/admin/doc/upload-image + * @secure + */ + uploadImage = ( + data: { + /** + * 上传文件 + * @format binary + */ + File?: File + /** + * 文档编号 + * @format int64 + */ + Id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/doc/upload-image`, + method: 'POST', + body: data, + secure: true, + type: ContentType.FormData, + format: 'json', + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Feedback.ts b/zhontai.ui.admin.vue3/src/api/admin/Feedback.ts new file mode 100644 index 0000000..987426f --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Feedback.ts @@ -0,0 +1,260 @@ +import { AxiosResponse } from 'axios' +import { ContentType, HttpClient, RequestParams } from './http-client' + +// 提交反馈的输入参数 +export interface FeedbackSubmitInput { + title: string + feedbackType: any + feedbackTeam: string + feedbackPersonName: string + feedbackPersonEmail: string + relatedPersons: string + content: string + attachmentPaths: string +} + +// 获取反馈分页的输入参数 +export interface PageInputFeedbackGetPageInput { + currentPage: number + pageSize: number + filter: { + title?: string + feedbackType?: any + feedbackTeam?: string + feedbackPersonName?: string + status?: any + createdTimeStart?: string + createdTimeEnd?: string + } + dynamicFilter?: any +} + +// 反馈列表输出项 +export interface FeedbackGetPageOutput { + id: number + title: string + feedbackType: any + feedbackTypeName: string + feedbackTeam: string + feedbackPersonName: string + feedbackPersonEmail: string + status: any + statusName: string + processorName: string + processTime: string + contentSummary: string + createdTime: string +} + +// 反馈详情输出 +export interface FeedbackGetOutput { + id: number + title: string + feedbackType: any + feedbackTypeName: string + feedbackTeam: string + feedbackPersonName: string + feedbackPersonEmail: string + status: any + statusName: string + processorName: string + processTime: string + contentSummary: string + createdTime: string + content: string + relatedPersons: string + attachmentPaths: string + processRemark: string + createdUserId: number + createdUserName: string + modifiedTime: string +} + +// 分页输出结果 +export interface PageOutputFeedbackGetPageOutput { + total: number + list: FeedbackGetPageOutput[] +} + +// 结果输出包装 +export interface ResultOutputPageOutputFeedbackGetPageOutput { + success: boolean + code: string + msg: string + data: PageOutputFeedbackGetPageOutput +} + +export interface ResultOutputFeedbackGetOutput { + success: boolean + code: string + msg: string + data: FeedbackGetOutput +} + +export interface ResultOutputInt64 { + success: boolean + code: string + msg: string + data: number +} + +// 标记处理状态的输入参数 +export interface FeedbackMarkInput { + feedbackId: number + processRemark: string +} + +// 团队负责人信息 +export interface TeamProcessorOutput { + id: number + teamName: string + site: string + processorId: number + processorName: string + processorEmail: string + displayName: string +} + +export interface ResultOutputTeamProcessorOutput { + success: boolean + code: string + msg: string + data: TeamProcessorOutput[] +} + +export class FeedbackApi extends HttpClient { + /** + * @name submitFeedback + * @summary 提交意见反馈 + * @request POST:/api/admin/feedback/submit-feedback + * @secure + */ + submitFeedback = (data: FeedbackSubmitInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/feedback/submit-feedback`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + + /** + * @name getPage + * @summary 获取反馈分页列表(用户端) + * @request POST:/api/admin/feedback/get-page + * @secure + */ + getPage = (data: PageInputFeedbackGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/feedback/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + + /** + * @name getPendingPage + * @summary 获取待处理反馈列表(处理人端) + * @request POST:/api/admin/feedback/get-pending-page + * @secure + */ + getPendingPage = (data: PageInputFeedbackGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/feedback/get-pending-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + + /** + * @name get + * @summary 获取反馈详情 + * @request GET:/api/admin/feedback/get + * @secure + */ + get = ( + query?: { + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/feedback/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + + /** + * @name markAsProcessing + * @summary 标记为处理中 + * @request POST:/api/admin/feedback/mark-as-processing + * @secure + */ + markAsProcessing = (data: FeedbackMarkInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/feedback/mark-as-processing`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + + /** + * @name markAsCompleted + * @summary 标记为已处理 + * @request POST:/api/admin/feedback/mark-as-completed + * @secure + */ + markAsCompleted = (data: FeedbackMarkInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/feedback/mark-as-completed`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + + /** + * @name markAsRejected + * @summary 标记为已驳回 + * @request POST:/api/admin/feedback/mark-as-rejected + * @secure + */ + markAsRejected = (data: FeedbackMarkInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/feedback/mark-as-rejected`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + + /** + * @name getTeamProcessors + * @summary 获取团队负责人列表(用于下拉选择) + * @request GET:/api/admin/feedback/get-team-processors + * @secure + */ + getTeamProcessors = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/feedback/get-team-processors`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }) +} \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/api/admin/File.ts b/zhontai.ui.admin.vue3/src/api/admin/File.ts new file mode 100644 index 0000000..8364ca0 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/File.ts @@ -0,0 +1,140 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + FileDeleteInput, + PageInputFileGetPageInput, + ResultOutputFileEntity, + ResultOutputListFileEntity, + ResultOutputPageOutputFileGetPageOutput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class FileApi extends HttpClient { + /** + * No description + * + * @tags file + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/file/get-page + * @secure + */ + getPage = (data: PageInputFileGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/file/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags file + * @name Delete + * @summary 删除 + * @request POST:/api/admin/file/delete + * @secure + */ + delete = (data: FileDeleteInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/file/delete`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags file + * @name UploadFile + * @summary 上传文件 + * @request POST:/api/admin/file/upload-file + * @secure + */ + uploadFile = ( + data: { + /** + * 文件 + * @format binary + */ + file: File + }, + query?: { + /** + * 文件目录 + * @default "" + */ + fileDirectory?: string + /** + * 文件重命名 + * @default true + */ + fileReName?: boolean + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/file/upload-file`, + method: 'POST', + query: query, + body: data, + secure: true, + type: ContentType.FormData, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags file + * @name UploadFiles + * @summary 上传多文件 + * @request POST:/api/admin/file/upload-files + * @secure + */ + uploadFiles = ( + data: { + /** 文件列表 */ + files: File[] + }, + query?: { + /** + * 文件目录 + * @default "" + */ + fileDirectory?: string + /** + * 文件重命名 + * @default true + */ + fileReName?: boolean + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/file/upload-files`, + method: 'POST', + query: query, + body: data, + secure: true, + type: ContentType.FormData, + format: 'json', + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/LoginLog.ts b/zhontai.ui.admin.vue3/src/api/admin/LoginLog.ts new file mode 100644 index 0000000..6b8defd --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/LoginLog.ts @@ -0,0 +1,55 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { LoginLogAddInput, PageInputLoginLogGetPageInput, ResultOutputInt64, ResultOutputPageOutputLoginLogGetPageOutput } from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class LoginLogApi extends HttpClient { + /** + * No description + * + * @tags login-log + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/login-log/get-page + * @secure + */ + getPage = (data: PageInputLoginLogGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/login-log/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags login-log + * @name Add + * @summary 新增 + * @request POST:/api/admin/login-log/add + * @secure + */ + add = (data: LoginLogAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/login-log/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Msg.ts b/zhontai.ui.admin.vue3/src/api/admin/Msg.ts new file mode 100644 index 0000000..b4f0677 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Msg.ts @@ -0,0 +1,254 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + MsgAddInput, + MsgAddMsgUserListInput, + MsgUpdateInput, + PageInputMsgGetPageInput, + ResultOutputInt64, + ResultOutputListMsgGetMsgUserListOutput, + ResultOutputMsgGetOutput, + ResultOutputPageOutputMsgGetPageOutput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class MsgApi extends HttpClient { + /** + * No description + * + * @tags msg + * @name Get + * @summary 查询 + * @request GET:/api/admin/msg/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/msg/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags msg + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/msg/get-page + * @secure + */ + getPage = (data: PageInputMsgGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/msg/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags msg + * @name GetMsgUserList + * @summary 查询消息用户列表 + * @request GET:/api/admin/msg/get-msg-user-list + * @secure + */ + getMsgUserList = ( + query?: { + /** + * 消息Id + * @format int64 + */ + MsgId?: number + /** 姓名 */ + Name?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/msg/get-msg-user-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags msg + * @name AddMsgUser + * @summary 添加消息用户 + * @request POST:/api/admin/msg/add-msg-user + * @secure + */ + addMsgUser = (data: MsgAddMsgUserListInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/msg/add-msg-user`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags msg + * @name RemoveMsgUser + * @summary 移除消息用户 + * @request POST:/api/admin/msg/remove-msg-user + * @secure + */ + removeMsgUser = (data: MsgAddMsgUserListInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/msg/remove-msg-user`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags msg + * @name Add + * @summary 新增 + * @request POST:/api/admin/msg/add + * @secure + */ + add = (data: MsgAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/msg/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags msg + * @name Update + * @summary 修改 + * @request PUT:/api/admin/msg/update + * @secure + */ + update = (data: MsgUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/msg/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags msg + * @name Delete + * @summary 彻底删除 + * @request DELETE:/api/admin/msg/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/msg/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags msg + * @name BatchDelete + * @summary 批量彻底删除 + * @request PUT:/api/admin/msg/batch-delete + * @secure + */ + batchDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/msg/batch-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags msg + * @name SoftDelete + * @summary 删除 + * @request DELETE:/api/admin/msg/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/msg/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags msg + * @name BatchSoftDelete + * @summary 批量删除 + * @request PUT:/api/admin/msg/batch-soft-delete + * @secure + */ + batchSoftDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/msg/batch-soft-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/MsgType.ts b/zhontai.ui.admin.vue3/src/api/admin/MsgType.ts new file mode 100644 index 0000000..9ae08cd --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/MsgType.ts @@ -0,0 +1,191 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + MsgTypeAddInput, + MsgTypeUpdateInput, + ResultOutputInt64, + ResultOutputListMsgTypeGetListOutput, + ResultOutputMsgTypeGetOutput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class MsgTypeApi extends HttpClient { + /** + * No description + * + * @tags msg-type + * @name Get + * @summary 查询 + * @request GET:/api/admin/msg-type/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/msg-type/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags msg-type + * @name GetList + * @summary 查询列表 + * @request GET:/api/admin/msg-type/get-list + * @secure + */ + getList = ( + query?: { + /** 名称 */ + Name?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/msg-type/get-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags msg-type + * @name Add + * @summary 新增 + * @request POST:/api/admin/msg-type/add + * @secure + */ + add = (data: MsgTypeAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/msg-type/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags msg-type + * @name Update + * @summary 修改 + * @request PUT:/api/admin/msg-type/update + * @secure + */ + update = (data: MsgTypeUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/msg-type/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags msg-type + * @name Delete + * @summary 彻底删除 + * @request DELETE:/api/admin/msg-type/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/msg-type/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags msg-type + * @name BatchDelete + * @summary 批量彻底删除 + * @request PUT:/api/admin/msg-type/batch-delete + * @secure + */ + batchDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/msg-type/batch-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags msg-type + * @name SoftDelete + * @summary 删除 + * @request DELETE:/api/admin/msg-type/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/msg-type/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags msg-type + * @name BatchSoftDelete + * @summary 批量删除 + * @request PUT:/api/admin/msg-type/batch-soft-delete + * @secure + */ + batchSoftDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/msg-type/batch-soft-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Online.ts b/zhontai.ui.admin.vue3/src/api/admin/Online.ts new file mode 100644 index 0000000..f761c13 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Online.ts @@ -0,0 +1,148 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + OnlineAddInput, + OnlineUpdateInput, + PageInputOnlineGetPageInput, + ResultOutputOnlineGetOutput, + ResultOutputPageOutputOnlineGetPageOutput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class OnlineApi extends HttpClient { + /** + * No description + * + * @tags online + * @name Get + * @summary 查询在线教程 + * @request GET:/api/admin/online/get + * @secure + */ + get = ( + query?: { + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/online/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + + /** + * No description + * + * @tags online + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/online/get-page + * @secure + */ + getPage = (data: PageInputOnlineGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/online/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + + /** + * No description + * + * @tags online + * @name GetList + * @summary + * @request POST:/api/admin/online/get-list + * @secure + */ + getList = (data: string[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/online/get-list`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + + /** + * No description + * + * @tags online + * @name Add + * @summary 新增 + * @request POST:/api/admin/online/add + * @secure + */ + add = (data: OnlineAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/online/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + + /** + * No description + * + * @tags online + * @name Update + * @summary 修改 + * @request PUT:/api/admin/online/update + * @secure + */ + update = (data: OnlineUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/online/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + + /** + * No description + * + * @tags online + * @name Delete + * @summary 删除 + * @request DELETE:/api/admin/online/delete + * @secure + */ + delete = ( + query: { + id: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/online/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/OperationLog.ts b/zhontai.ui.admin.vue3/src/api/admin/OperationLog.ts new file mode 100644 index 0000000..c117cc7 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/OperationLog.ts @@ -0,0 +1,60 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { + OperationLogAddInput, + PageInputOperationLogGetPageInput, + ResultOutputInt64, + ResultOutputPageOutputOperationLogGetPageOutput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class OperationLogApi extends HttpClient { + /** + * No description + * + * @tags operation-log + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/operation-log/get-page + * @secure + */ + getPage = (data: PageInputOperationLogGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/operation-log/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags operation-log + * @name Add + * @summary 新增 + * @request POST:/api/admin/operation-log/add + * @secure + */ + add = (data: OperationLogAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/operation-log/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Org.ts b/zhontai.ui.admin.vue3/src/api/admin/Org.ts new file mode 100644 index 0000000..27f7f4d --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Org.ts @@ -0,0 +1,172 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + OrgAddInput, + OrgUpdateInput, + ResultOutputInt64, + ResultOutputListOrgGetListOutput, + ResultOutputListOrgGetSimpleListWithPathOutput, + ResultOutputOrgGetOutput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class OrgApi extends HttpClient { + /** + * No description + * + * @tags org + * @name Get + * @summary 查询 + * @request GET:/api/admin/org/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/org/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags org + * @name GetList + * @summary 查询列表 + * @request GET:/api/admin/org/get-list + * @secure + */ + getList = ( + query?: { + key?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/org/get-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags org + * @name GetSimpleListWithPath + * @summary 获取部门路径列表 + * @request GET:/api/admin/org/get-simple-list-with-path + * @secure + */ + getSimpleListWithPath = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/org/get-simple-list-with-path`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags org + * @name Add + * @summary 新增 + * @request POST:/api/admin/org/add + * @secure + */ + add = (data: OrgAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/org/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags org + * @name Update + * @summary 修改 + * @request PUT:/api/admin/org/update + * @secure + */ + update = (data: OrgUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/org/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags org + * @name Delete + * @summary 彻底删除 + * @request DELETE:/api/admin/org/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/org/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags org + * @name SoftDelete + * @summary 删除 + * @request DELETE:/api/admin/org/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/org/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Permission.ts b/zhontai.ui.admin.vue3/src/api/admin/Permission.ts new file mode 100644 index 0000000..1fd514a --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Permission.ts @@ -0,0 +1,350 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + PermissionAddDotInput, + PermissionAddGroupInput, + PermissionAddMenuInput, + PermissionAssignInput, + PermissionGetListInput, + PermissionUpdateDotInput, + PermissionUpdateGroupInput, + PermissionUpdateMenuInput, + ResultOutputInt64, + ResultOutputListInt64, + ResultOutputListPermissionGetListOutput, + ResultOutputListPermissionGetPermissionListOutput, + ResultOutputPermissionGetDotOutput, + ResultOutputPermissionGetGroupOutput, + ResultOutputPermissionGetMenuOutput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class PermissionApi extends HttpClient { + /** + * No description + * + * @tags permission + * @name GetGroup + * @summary 查询分组 + * @request GET:/api/admin/permission/get-group + * @secure + */ + getGroup = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/permission/get-group`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags permission + * @name GetMenu + * @summary 查询菜单 + * @request GET:/api/admin/permission/get-menu + * @secure + */ + getMenu = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/permission/get-menu`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags permission + * @name GetDot + * @summary 查询权限点 + * @request GET:/api/admin/permission/get-dot + * @secure + */ + getDot = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/permission/get-dot`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags permission + * @name GetList + * @summary 查询权限列表 + * @request POST:/api/admin/permission/get-list + * @secure + */ + getList = (data: PermissionGetListInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/permission/get-list`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags permission + * @name GetPermissionList + * @summary 查询授权权限列表 + * @request GET:/api/admin/permission/get-permission-list + * @secure + */ + getPermissionList = ( + query?: { + platform?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/permission/get-permission-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags permission + * @name GetRolePermissionList + * @summary 查询角色权限列表 + * @request GET:/api/admin/permission/get-role-permission-list + * @secure + */ + getRolePermissionList = ( + query?: { + /** + * @format int64 + * @default 0 + */ + roleId?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/permission/get-role-permission-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags permission + * @name AddGroup + * @summary 新增分组 + * @request POST:/api/admin/permission/add-group + * @secure + */ + addGroup = (data: PermissionAddGroupInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/permission/add-group`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags permission + * @name AddMenu + * @summary 新增菜单 + * @request POST:/api/admin/permission/add-menu + * @secure + */ + addMenu = (data: PermissionAddMenuInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/permission/add-menu`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags permission + * @name AddDot + * @summary 新增权限点 + * @request POST:/api/admin/permission/add-dot + * @secure + */ + addDot = (data: PermissionAddDotInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/permission/add-dot`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags permission + * @name UpdateGroup + * @summary 修改分组 + * @request PUT:/api/admin/permission/update-group + * @secure + */ + updateGroup = (data: PermissionUpdateGroupInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/permission/update-group`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags permission + * @name UpdateMenu + * @summary 修改菜单 + * @request PUT:/api/admin/permission/update-menu + * @secure + */ + updateMenu = (data: PermissionUpdateMenuInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/permission/update-menu`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags permission + * @name UpdateDot + * @summary 修改权限点 + * @request PUT:/api/admin/permission/update-dot + * @secure + */ + updateDot = (data: PermissionUpdateDotInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/permission/update-dot`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags permission + * @name Delete + * @summary 彻底删除 + * @request DELETE:/api/admin/permission/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/permission/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags permission + * @name SoftDelete + * @summary 删除 + * @request DELETE:/api/admin/permission/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/permission/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags permission + * @name Assign + * @summary 保存角色权限 + * @request POST:/api/admin/permission/assign + * @secure + */ + assign = (data: PermissionAssignInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/permission/assign`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Pkg.ts b/zhontai.ui.admin.vue3/src/api/admin/Pkg.ts new file mode 100644 index 0000000..a12c471 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Pkg.ts @@ -0,0 +1,347 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + PageInputPkgGetPageInput, + PageInputPkgGetPkgTenantListInput, + PkgAddInput, + PkgAddPkgTenantListInput, + PkgSetPkgPermissionsInput, + PkgUpdateInput, + ResultOutputInt64, + ResultOutputListInt64, + ResultOutputListPkgGetListOutput, + ResultOutputListPkgGetPkgTenantListOutput, + ResultOutputPageOutputPkgGetPageOutput, + ResultOutputPageOutputPkgGetPkgTenantListOutput, + ResultOutputPkgGetOutput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class PkgApi extends HttpClient { + /** + * No description + * + * @tags pkg + * @name Get + * @summary 查询 + * @request GET:/api/admin/pkg/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/pkg/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags pkg + * @name GetList + * @summary 查询列表 + * @request GET:/api/admin/pkg/get-list + * @secure + */ + getList = ( + query?: { + /** 名称 */ + Name?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/pkg/get-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags pkg + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/pkg/get-page + * @secure + */ + getPage = (data: PageInputPkgGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/pkg/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags pkg + * @name GetPkgTenantList + * @summary 查询套餐租户列表 + * @request GET:/api/admin/pkg/get-pkg-tenant-list + * @secure + */ + getPkgTenantList = ( + query?: { + /** 租户名 */ + TenantName?: string + /** + * 套餐Id + * @format int64 + */ + PkgId?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/pkg/get-pkg-tenant-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags pkg + * @name GetPkgTenantPage + * @summary 查询套餐租户分页 + * @request POST:/api/admin/pkg/get-pkg-tenant-page + * @secure + */ + getPkgTenantPage = (data: PageInputPkgGetPkgTenantListInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/pkg/get-pkg-tenant-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags pkg + * @name GetPkgPermissionList + * @summary 查询套餐权限列表 + * @request GET:/api/admin/pkg/get-pkg-permission-list + * @secure + */ + getPkgPermissionList = ( + query?: { + /** + * 套餐编号 + * @format int64 + */ + pkgId?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/pkg/get-pkg-permission-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags pkg + * @name SetPkgPermissions + * @summary 设置套餐权限 + * @request POST:/api/admin/pkg/set-pkg-permissions + * @secure + */ + setPkgPermissions = (data: PkgSetPkgPermissionsInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/pkg/set-pkg-permissions`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags pkg + * @name AddPkgTenant + * @summary 添加套餐租户 + * @request POST:/api/admin/pkg/add-pkg-tenant + * @secure + */ + addPkgTenant = (data: PkgAddPkgTenantListInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/pkg/add-pkg-tenant`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags pkg + * @name RemovePkgTenant + * @summary 移除套餐租户 + * @request POST:/api/admin/pkg/remove-pkg-tenant + * @secure + */ + removePkgTenant = (data: PkgAddPkgTenantListInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/pkg/remove-pkg-tenant`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags pkg + * @name Add + * @summary 新增 + * @request POST:/api/admin/pkg/add + * @secure + */ + add = (data: PkgAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/pkg/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags pkg + * @name Update + * @summary 修改 + * @request PUT:/api/admin/pkg/update + * @secure + */ + update = (data: PkgUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/pkg/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags pkg + * @name Delete + * @summary 彻底删除 + * @request DELETE:/api/admin/pkg/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/pkg/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags pkg + * @name BatchDelete + * @summary 批量彻底删除 + * @request PUT:/api/admin/pkg/batch-delete + * @secure + */ + batchDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/pkg/batch-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags pkg + * @name SoftDelete + * @summary 删除 + * @request DELETE:/api/admin/pkg/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/pkg/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags pkg + * @name BatchSoftDelete + * @summary 批量删除 + * @request PUT:/api/admin/pkg/batch-soft-delete + * @secure + */ + batchSoftDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/pkg/batch-soft-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/PrintTemplate.ts b/zhontai.ui.admin.vue3/src/api/admin/PrintTemplate.ts new file mode 100644 index 0000000..bf0b367 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/PrintTemplate.ts @@ -0,0 +1,250 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + PageInputPrintTemplateGetPageInput, + PrintTemplateAddInput, + PrintTemplateSetEnableInput, + PrintTemplateUpdateInput, + PrintTemplateUpdateTemplateInput, + ResultOutputInt64, + ResultOutputPageOutputPrintTemplateGetPageOutput, + ResultOutputPrintTemplateGetOutput, + ResultOutputPrintTemplateGetUpdateTemplateOutput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class PrintTemplateApi extends HttpClient { + /** + * No description + * + * @tags print-template + * @name Get + * @summary 查询 + * @request GET:/api/admin/print-template/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/print-template/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags print-template + * @name GetUpdateTemplate + * @summary 查询修改模板 + * @request GET:/api/admin/print-template/get-update-template + * @secure + */ + getUpdateTemplate = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/print-template/get-update-template`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags print-template + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/print-template/get-page + * @secure + */ + getPage = (data: PageInputPrintTemplateGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/print-template/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags print-template + * @name Add + * @summary 新增 + * @request POST:/api/admin/print-template/add + * @secure + */ + add = (data: PrintTemplateAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/print-template/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags print-template + * @name Update + * @summary 修改 + * @request PUT:/api/admin/print-template/update + * @secure + */ + update = (data: PrintTemplateUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/print-template/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags print-template + * @name UpdateTemplate + * @summary 修改模板 + * @request PUT:/api/admin/print-template/update-template + * @secure + */ + updateTemplate = (data: PrintTemplateUpdateTemplateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/print-template/update-template`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags print-template + * @name SetEnable + * @summary 设置启用 + * @request POST:/api/admin/print-template/set-enable + * @secure + */ + setEnable = (data: PrintTemplateSetEnableInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/print-template/set-enable`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags print-template + * @name Delete + * @summary 彻底删除 + * @request DELETE:/api/admin/print-template/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/print-template/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags print-template + * @name BatchDelete + * @summary 批量彻底删除 + * @request PUT:/api/admin/print-template/batch-delete + * @secure + */ + batchDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/print-template/batch-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags print-template + * @name SoftDelete + * @summary 删除 + * @request DELETE:/api/admin/print-template/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/print-template/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags print-template + * @name BatchSoftDelete + * @summary 批量删除 + * @request PUT:/api/admin/print-template/batch-soft-delete + * @secure + */ + batchSoftDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/print-template/batch-soft-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Region.ts b/zhontai.ui.admin.vue3/src/api/admin/Region.ts new file mode 100644 index 0000000..5ad7cd1 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Region.ts @@ -0,0 +1,229 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + PageInputRegionGetPageInput, + RegionAddInput, + RegionGetListInput, + RegionLevel, + RegionSetEnableInput, + RegionSetHotInput, + RegionUpdateInput, + ResultOutputInt64, + ResultOutputListRegionGetChildListOutput, + ResultOutputPageOutputRegionGetPageOutput, + ResultOutputRegionGetOutput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class RegionApi extends HttpClient { + /** + * No description + * + * @tags region + * @name Get + * @summary 查询 + * @request GET:/api/admin/region/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/region/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags region + * @name GetChildList + * @summary 查询下级列表 + * @request POST:/api/admin/region/get-child-list + * @secure + */ + getChildList = (data: RegionGetListInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/region/get-child-list`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags region + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/region/get-page + * @secure + */ + getPage = (data: PageInputRegionGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/region/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags region + * @name Add + * @summary 新增 + * @request POST:/api/admin/region/add + * @secure + */ + add = (data: RegionAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/region/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags region + * @name Update + * @summary 修改 + * @request PUT:/api/admin/region/update + * @secure + */ + update = (data: RegionUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/region/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags region + * @name Delete + * @summary 彻底删除 + * @request DELETE:/api/admin/region/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/region/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags region + * @name SoftDelete + * @summary 删除 + * @request DELETE:/api/admin/region/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/region/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags region + * @name SetEnable + * @summary 设置启用 + * @request POST:/api/admin/region/set-enable + * @secure + */ + setEnable = (data: RegionSetEnableInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/region/set-enable`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags region + * @name SetHot + * @summary 设置热门 + * @request POST:/api/admin/region/set-hot + * @secure + */ + setHot = (data: RegionSetHotInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/region/set-hot`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags region + * @name SyncData + * @summary 同步数据 + * @request POST:/api/admin/region/sync-data + * @secure + */ + syncData = (data: RegionLevel, params: RequestParams = {}) => + this.request({ + path: `/api/admin/region/sync-data`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Remote.ts b/zhontai.ui.admin.vue3/src/api/admin/Remote.ts new file mode 100644 index 0000000..7d41de6 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Remote.ts @@ -0,0 +1,154 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + RemoteAddInput, + RemoteUpdateInput, + PageInputRemoteGetPageInput, + ResultOutputRemoteGetOutput, + ResultOutputInt64, + ResultOutputPageOutputRemoteGetPageOutput, + RemoteConnectInput, + ResultOutputRemoteConnectOutput +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class RemoteApi extends HttpClient { + /** + * No description + * + * @tags remote + * @name Get + * @summary 查询Remote + * @request GET:/api/admin/remote/get + * @secure + */ + get = ( + query?: { + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/remote/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + + /** + * No description + * + * @tags remote + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/remote/get-page + * @secure + */ + getPage = (data: PageInputRemoteGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/remote/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + + /** + * No description + * + * @tags remote + * @name Add + * @summary 新增 + * @request POST:/api/admin/remote/add + * @secure + */ + add = (data: RemoteAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/remote/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + + /** + * No description + * + * @tags remote + * @name Update + * @summary 修改 + * @request PUT:/api/admin/remote/update + * @secure + */ + update = (data: RemoteUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/remote/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + + /** + * No description + * + * @tags remote + * @name Delete + * @summary 删除 + * @request DELETE:/api/admin/remote/delete + * @secure + */ + delete = ( + query?: { + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/remote/delete`, + method: 'DELETE', + query: query, + secure: true, + format: 'json', + ...params, + }) + + /** + * No description + * + * @tags remote + * @name Connect + * @summary 连接远程设备 + * @request POST:/api/admin/remote/connect + * @secure + */ + connect = (data: RemoteConnectInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/remote/remote-connect`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) +} \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/api/admin/Role.ts b/zhontai.ui.admin.vue3/src/api/admin/Role.ts new file mode 100644 index 0000000..58e2a37 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Role.ts @@ -0,0 +1,298 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + PageInputRoleGetPageInput, + ResultOutputInt64, + ResultOutputListRoleGetListOutput, + ResultOutputListRoleGetRoleUserListOutput, + ResultOutputPageOutputRoleGetPageOutput, + ResultOutputRoleGetOutput, + RoleAddInput, + RoleAddRoleUserListInput, + RoleSetDataScopeInput, + RoleUpdateInput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class RoleApi extends HttpClient { + /** + * No description + * + * @tags role + * @name Get + * @summary 查询 + * @request GET:/api/admin/role/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/role/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags role + * @name GetList + * @summary 查询列表 + * @request GET:/api/admin/role/get-list + * @secure + */ + getList = ( + query?: { + /** 名称 */ + Name?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/role/get-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags role + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/role/get-page + * @secure + */ + getPage = (data: PageInputRoleGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/role/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags role + * @name GetRoleUserList + * @summary 查询角色用户列表 + * @request GET:/api/admin/role/get-role-user-list + * @secure + */ + getRoleUserList = ( + query?: { + /** 姓名 */ + Name?: string + /** + * 角色Id + * @format int64 + */ + RoleId?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/role/get-role-user-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags role + * @name AddRoleUser + * @summary 添加角色用户 + * @request POST:/api/admin/role/add-role-user + * @secure + */ + addRoleUser = (data: RoleAddRoleUserListInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/role/add-role-user`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags role + * @name RemoveRoleUser + * @summary 移除角色用户 + * @request POST:/api/admin/role/remove-role-user + * @secure + */ + removeRoleUser = (data: RoleAddRoleUserListInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/role/remove-role-user`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags role + * @name Add + * @summary 新增 + * @request POST:/api/admin/role/add + * @secure + */ + add = (data: RoleAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/role/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags role + * @name Update + * @summary 修改 + * @request PUT:/api/admin/role/update + * @secure + */ + update = (data: RoleUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/role/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags role + * @name Delete + * @summary 彻底删除 + * @request DELETE:/api/admin/role/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/role/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags role + * @name BatchDelete + * @summary 批量彻底删除 + * @request PUT:/api/admin/role/batch-delete + * @secure + */ + batchDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/role/batch-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags role + * @name SoftDelete + * @summary 删除 + * @request DELETE:/api/admin/role/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/role/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags role + * @name BatchSoftDelete + * @summary 批量删除 + * @request PUT:/api/admin/role/batch-soft-delete + * @secure + */ + batchSoftDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/role/batch-soft-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags role + * @name SetDataScope + * @summary 设置数据权限 + * @request POST:/api/admin/role/set-data-scope + * @secure + */ + setDataScope = (data: RoleSetDataScopeInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/role/set-data-scope`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/SearchTemplate.ts b/zhontai.ui.admin.vue3/src/api/admin/SearchTemplate.ts new file mode 100644 index 0000000..e282909 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/SearchTemplate.ts @@ -0,0 +1,113 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + ResultOutputInt64, + ResultOutputListSearchTemplateGetListOutput, + ResultOutputSearchTemplateGetUpdateOutput, + SearchTemplateSaveInput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class SearchTemplateApi extends HttpClient { + /** + * No description + * + * @tags search-template + * @name Get + * @summary 查询 + * @request GET:/api/admin/search-template/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/search-template/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags search-template + * @name GetList + * @summary 查询列表 + * @request GET:/api/admin/search-template/get-list + * @secure + */ + getList = ( + query?: { + /** @format int64 */ + moduleId?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/search-template/get-list`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags search-template + * @name Save + * @summary 保存 + * @request POST:/api/admin/search-template/save + * @secure + */ + save = (data: SearchTemplateSaveInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/search-template/save`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags search-template + * @name Delete + * @summary 彻底删除 + * @request DELETE:/api/admin/search-template/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/search-template/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/SiteMsg.ts b/zhontai.ui.admin.vue3/src/api/admin/SiteMsg.ts new file mode 100644 index 0000000..4a3bad6 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/SiteMsg.ts @@ -0,0 +1,181 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + PageInputSiteMsgGetPageInput, + ResultOutputBoolean, + ResultOutputPageOutputSiteMsgGetPageOutput, + ResultOutputSiteMsgGetContentOutput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class SiteMsgApi extends HttpClient { + /** + * No description + * + * @tags site-msg + * @name GetContent + * @summary 获得内容 + * @request GET:/api/admin/site-msg/get-content + * @secure + */ + getContent = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/site-msg/get-content`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags site-msg + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/site-msg/get-page + * @secure + */ + getPage = (data: PageInputSiteMsgGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/site-msg/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags site-msg + * @name IsUnread + * @summary 是否未读 + * @request GET:/api/admin/site-msg/is-unread + * @secure + */ + isUnread = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/site-msg/is-unread`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags site-msg + * @name SetAllRead + * @summary 全部标为已读 + * @request POST:/api/admin/site-msg/set-all-read + * @secure + */ + setAllRead = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/site-msg/set-all-read`, + method: 'POST', + secure: true, + ...params, + }) + /** + * No description + * + * @tags site-msg + * @name SetRead + * @summary 标为已读 + * @request POST:/api/admin/site-msg/set-read + * @secure + */ + setRead = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/site-msg/set-read`, + method: 'POST', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags site-msg + * @name BatchSetRead + * @summary 批量标为已读 + * @request POST:/api/admin/site-msg/batch-set-read + * @secure + */ + batchSetRead = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/site-msg/batch-set-read`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags site-msg + * @name SoftDelete + * @summary 删除 + * @request DELETE:/api/admin/site-msg/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/site-msg/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags site-msg + * @name BatchSoftDelete + * @summary 批量删除 + * @request POST:/api/admin/site-msg/batch-soft-delete + * @secure + */ + batchSoftDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/site-msg/batch-soft-delete`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/Task.ts b/zhontai.ui.admin.vue3/src/api/admin/Task.ts new file mode 100644 index 0000000..6770eca --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Task.ts @@ -0,0 +1,287 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + PageInputTaskGetPageInput, + ResultOutputPageOutputTaskGetPageOutput, + ResultOutputString, + ResultOutputTaskGetOutput, + TaskAddInput, + TaskUpdateInput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class TaskApi extends HttpClient { + /** + * No description + * + * @tags task + * @name GetAlerEmail + * @summary 查询报警邮件 + * @request GET:/api/admin/task/get-aler-email + * @secure + */ + getAlerEmail = ( + query?: { + id?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/task/get-aler-email`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags task + * @name Get + * @summary 查询 + * @request GET:/api/admin/task/get + * @secure + */ + get = ( + query?: { + id?: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/task/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags task + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/task/get-page + * @secure + */ + getPage = (data: PageInputTaskGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/task/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags task + * @name Add + * @summary 新增 + * @request POST:/api/admin/task/add + * @secure + */ + add = (data: TaskAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/task/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags task + * @name Update + * @summary 修改 + * @request PUT:/api/admin/task/update + * @secure + */ + update = (data: TaskUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/task/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags task + * @name Pause + * @summary 暂停任务 + * @request POST:/api/admin/task/pause + * @secure + */ + pause = ( + query: { + id: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/task/pause`, + method: 'POST', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags task + * @name Resume + * @summary 启动任务 + * @request POST:/api/admin/task/resume + * @secure + */ + resume = ( + query: { + id: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/task/resume`, + method: 'POST', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags task + * @name Run + * @summary 执行任务 + * @request POST:/api/admin/task/run + * @secure + */ + run = ( + query: { + id: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/task/run`, + method: 'POST', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags task + * @name Delete + * @summary 删除任务 + * @request DELETE:/api/admin/task/delete + * @secure + */ + delete = ( + query: { + id: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/task/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags task + * @name BatchRun + * @summary 批量执行任务 + * @request PUT:/api/admin/task/batch-run + * @secure + */ + batchRun = (data: string[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/task/batch-run`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags task + * @name BatchPause + * @summary 批量暂停任务 + * @request PUT:/api/admin/task/batch-pause + * @secure + */ + batchPause = (data: string[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/task/batch-pause`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags task + * @name BatchResume + * @summary 批量启动任务 + * @request PUT:/api/admin/task/batch-resume + * @secure + */ + batchResume = (data: string[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/task/batch-resume`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags task + * @name BatchDelete + * @summary 批量删除任务 + * @request PUT:/api/admin/task/batch-delete + * @secure + */ + batchDelete = (data: string[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/task/batch-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/TaskLog.ts b/zhontai.ui.admin.vue3/src/api/admin/TaskLog.ts new file mode 100644 index 0000000..2220c62 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/TaskLog.ts @@ -0,0 +1,36 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { PageInputTaskLogGetPageInput, ResultOutputPageOutputTaskLog } from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class TaskLogApi extends HttpClient { + /** + * No description + * + * @tags task-log + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/task-log/get-page + * @secure + */ + getPage = (data: PageInputTaskLogGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/task-log/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/TemplateCenter.ts b/zhontai.ui.admin.vue3/src/api/admin/TemplateCenter.ts new file mode 100644 index 0000000..01ae4df --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/TemplateCenter.ts @@ -0,0 +1,152 @@ +/* eslint-disable */ +/* tslint:disable */ +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class TemplateCenterApi extends HttpClient { + /** + * 获取文件夹和文件树形结构列表 + * + * @tags 模板中心 + * @name GetTree + * @request GET:/api/admin/template-center/get-tree + */ + getTree = (params: RequestParams = {}) => + this.request, any>({ + path: `/api/admin/template-center/get-tree`, + method: 'GET', + ...params, + }) + + /** + * 新增文件夹或文件 + * + * @tags 模板中心 + * @name Add + * @request POST:/api/admin/template-center/add + */ + add = (data: TemplateCenterAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/template-center/add`, + method: 'POST', + body: data, + type: ContentType.Json, + ...params, + }) + + /** + * 修改文件夹或文件 + * + * @tags 模板中心 + * @name Update + * @request PUT:/api/admin/template-center/update + */ + update = (data: TemplateCenterUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/template-center/update`, + method: 'PUT', + body: data, + type: ContentType.Json, + ...params, + }) + + /** + * 删除文件夹或文件 + * + * @tags 模板中心 + * @name Delete + * @request DELETE:/api/admin/template-center/delete + */ + delete = (params: { id: number }, requestParams: RequestParams = {}) => + this.request({ + path: `/api/admin/template-center/delete`, + method: 'DELETE', + query: params, + ...requestParams, + }) + + /** + * 读取共享文件夹内容并添加到指定父级下 + * + * @tags 模板中心 + * @name GetSharedFolderContent + * @request GET:/api/admin/template-center/get-shared-folder-content + */ + getSharedFolderContent = ( + params: { + folderPath?: string + parentId?: number + includeSubfolders?: boolean + }, + requestParams: RequestParams = {} + ) => + this.request({ + path: `/api/admin/template-center/get-shared-folder-content`, + method: 'GET', + query: params, + ...requestParams, + }) +} + +/** API返回结果 */ +export interface ApiResult { + success?: boolean + code?: string + msg?: string + data?: T +} + +/** 模板中心树形结构输出 */ +export interface TemplateCenterGetTreeOutput { + id?: number + parentId?: number + name?: string + type?: number // 1=文件夹, 2=文件 + contactPerson?: string + functionIntro?: string + keywords?: string + site?: string + filePath?: string + fileKeword?: string + fileUrl?: string + createdTime?: string + modifiedTime?: string + children?: TemplateCenterGetTreeOutput[] +} + +/** 新增文件夹或文件输入 */ +export interface TemplateCenterAddInput { + parentId?: number + name?: string + type?: number // 1=文件夹, 2=文件 + contactPerson?: string + functionIntro?: string + keywords?: string + site?: string + filePath?: string + fileKeword?: string + fileUrl?: string +} + +/** 更新文件夹或文件输入 */ +export interface TemplateCenterUpdateInput { + id?: number + parentId?: number + name?: string + type?: number // 1=文件夹, 2=文件 + contactPerson?: string + functionIntro?: string + keywords?: string + site?: string + filePath?: string + fileKeword?: string + fileUrl?: string +} \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/api/admin/Tenant.ts b/zhontai.ui.admin.vue3/src/api/admin/Tenant.ts new file mode 100644 index 0000000..8a0f5dd --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/Tenant.ts @@ -0,0 +1,213 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + PageInputTenantGetPageInput, + ResultOutputInt64, + ResultOutputPageOutputTenantGetPageOutput, + ResultOutputTenantGetOutput, + ResultOutputTokenInfo, + TenantAddInput, + TenantSetEnableInput, + TenantUpdateInput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class TenantApi extends HttpClient { + /** + * No description + * + * @tags tenant + * @name Get + * @summary 查询 + * @request GET:/api/admin/tenant/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/tenant/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags tenant + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/tenant/get-page + * @secure + */ + getPage = (data: PageInputTenantGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/tenant/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags tenant + * @name Add + * @summary 新增 + * @request POST:/api/admin/tenant/add + * @secure + */ + add = (data: TenantAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/tenant/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags tenant + * @name Update + * @summary 修改 + * @request PUT:/api/admin/tenant/update + * @secure + */ + update = (data: TenantUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/tenant/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags tenant + * @name Delete + * @summary 彻底删除 + * @request DELETE:/api/admin/tenant/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/tenant/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags tenant + * @name SoftDelete + * @summary 删除 + * @request DELETE:/api/admin/tenant/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/tenant/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags tenant + * @name BatchSoftDelete + * @summary 批量删除 + * @request PUT:/api/admin/tenant/batch-soft-delete + * @secure + */ + batchSoftDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/tenant/batch-soft-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags tenant + * @name SetEnable + * @summary 设置启用 + * @request POST:/api/admin/tenant/set-enable + * @secure + */ + setEnable = (data: TenantSetEnableInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/tenant/set-enable`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags tenant + * @name OneClickLogin + * @summary 一键登录 + * @request POST:/api/admin/tenant/one-click-login + * @secure + */ + oneClickLogin = ( + query?: { + /** @format int64 */ + tenantId?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/tenant/one-click-login`, + method: 'POST', + query: query, + secure: true, + format: 'json', + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/User.ts b/zhontai.ui.admin.vue3/src/api/admin/User.ts new file mode 100644 index 0000000..dd5f41e --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/User.ts @@ -0,0 +1,495 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + PageInput, + PageInputUserGetPageInput, + ResultOutputInt64, + ResultOutputPageOutputUserGetDeletedUserPageOutput, + ResultOutputPageOutputUserGetPageOutput, + ResultOutputString, + ResultOutputTokenInfo, + ResultOutputUserGetBasicOutput, + ResultOutputUserGetOutput, + ResultOutputUserGetPermissionOutput, + UserAddInput, + UserAddMemberInput, + UserBatchSetOrgInput, + UserChangePasswordInput, + UserResetPasswordInput, + UserRestoreInput, + UserSetEnableInput, + UserSetManagerInput, + UserUpdateBasicInput, + UserUpdateInput, + UserUpdateMemberInput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class UserApi extends HttpClient { + /** + * No description + * + * @tags user + * @name Get + * @summary 查询用户 + * @request GET:/api/admin/user/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/user/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags user + * @name GetPage + * @summary 查询分页 + * @request POST:/api/admin/user/get-page + * @secure + */ + getPage = (data: PageInputUserGetPageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/get-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags user + * @name GetDeletedPage + * @summary 查询已删除分页列表 + * @request POST:/api/admin/user/get-deleted-page + * @secure + */ + getDeletedPage = (data: PageInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/get-deleted-page`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags user + * @name GetBasic + * @summary 查询用户基本信息 + * @request GET:/api/admin/user/get-basic + * @secure + */ + getBasic = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/get-basic`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags user + * @name GetPermission + * @summary 查询用户权限信息 + * @request GET:/api/admin/user/get-permission + * @secure + */ + getPermission = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/get-permission`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags user + * @name Add + * @summary 新增用户 + * @request POST:/api/admin/user/add + * @secure + */ + add = (data: UserAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags user + * @name Update + * @summary 修改用户 + * @request PUT:/api/admin/user/update + * @secure + */ + update = (data: UserUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags user + * @name AddMember + * @summary 新增会员 + * @request POST:/api/admin/user/add-member + * @secure + */ + addMember = (data: UserAddMemberInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/add-member`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags user + * @name UpdateMember + * @summary 修改会员 + * @request PUT:/api/admin/user/update-member + * @secure + */ + updateMember = (data: UserUpdateMemberInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/update-member`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags user + * @name UpdateBasic + * @summary 更新用户基本信息 + * @request PUT:/api/admin/user/update-basic + * @secure + */ + updateBasic = (data: UserUpdateBasicInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/update-basic`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags user + * @name ChangePassword + * @summary 修改用户密码 + * @request PUT:/api/admin/user/change-password + * @secure + */ + changePassword = (data: UserChangePasswordInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/change-password`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags user + * @name ResetPassword + * @summary 重置密码 + * @request POST:/api/admin/user/reset-password + * @secure + */ + resetPassword = (data: UserResetPasswordInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/reset-password`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags user + * @name SetManager + * @summary 设置主管 + * @request POST:/api/admin/user/set-manager + * @secure + */ + setManager = (data: UserSetManagerInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/set-manager`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags user + * @name SetEnable + * @summary 设置启用 + * @request POST:/api/admin/user/set-enable + * @secure + */ + setEnable = (data: UserSetEnableInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/set-enable`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags user + * @name Restore + * @summary 恢复 + * @request POST:/api/admin/user/restore + * @secure + */ + restore = (data: UserRestoreInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/restore`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags user + * @name BatchSetOrg + * @summary 批量设置部门 + * @request PUT:/api/admin/user/batch-set-org + * @secure + */ + batchSetOrg = (data: UserBatchSetOrgInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/batch-set-org`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags user + * @name Delete + * @summary 彻底删除用户 + * @request DELETE:/api/admin/user/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/user/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags user + * @name BatchDelete + * @summary 批量彻底删除用户 + * @request PUT:/api/admin/user/batch-delete + * @secure + */ + batchDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/batch-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags user + * @name SoftDelete + * @summary 删除用户 + * @request DELETE:/api/admin/user/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/user/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags user + * @name BatchSoftDelete + * @summary 批量删除用户 + * @request PUT:/api/admin/user/batch-soft-delete + * @secure + */ + batchSoftDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/user/batch-soft-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags user + * @name AvatarUpload + * @summary 上传头像 + * @request POST:/api/admin/user/avatar-upload + * @secure + */ + avatarUpload = ( + data: { + /** @format binary */ + file?: File + }, + query?: { + /** @default false */ + autoUpdate?: boolean + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/user/avatar-upload`, + method: 'POST', + query: query, + body: data, + secure: true, + type: ContentType.FormData, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags user + * @name OneClickLogin + * @summary 一键登录用户 + * @request GET:/api/admin/user/one-click-login + * @secure + */ + oneClickLogin = ( + query: { + userName: string + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/user/one-click-login`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags user + * @name ForceOffline + * @summary 强制用户下线 + * @request POST:/api/admin/user/force-offline + * @secure + */ + forceOffline = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/user/force-offline`, + method: 'POST', + query: query, + secure: true, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/UserClick.ts b/zhontai.ui.admin.vue3/src/api/admin/UserClick.ts new file mode 100644 index 0000000..1899035 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/UserClick.ts @@ -0,0 +1,65 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { ContentType, HttpClient, RequestParams } from './http-client' +import { ResultOutputListTopClickedWebsiteOutput } from './data-contracts' + +export class UserClickApi extends HttpClient { + /** + * No description + * + * @tags user-click + * @name RecordClick + * @summary 记录用户点击 + * @request POST:/api/admin/user-click/record-click + * @secure + */ + recordClick = ( + data: { + /** 网页类型 1:在线应用 3:模板中心 5:在线看板 */ + webType: number + /** 网页Id */ + webId: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/user-click/record-click`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + + /** + * No description + * + * @tags user-click + * @name GetTopClickedWebsites + * @summary 获取热门点击网站 + * @request POST:/api/admin/user-click/get-top-clicked-websites + * @secure + */ + getTopClickedWebsites = ( + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/user-click/get-top-clicked-websites`, + method: 'POST', + secure: true, + format: 'json', + ...params, + }) +} \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/api/admin/View.ts b/zhontai.ui.admin.vue3/src/api/admin/View.ts new file mode 100644 index 0000000..ca7309e --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/View.ts @@ -0,0 +1,206 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { AxiosResponse } from 'axios' +import { + ResultOutputInt64, + ResultOutputListViewGetListOutput, + ResultOutputViewGetOutput, + ViewAddInput, + ViewGetListInput, + ViewSyncInput, + ViewUpdateInput, +} from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class ViewApi extends HttpClient { + /** + * No description + * + * @tags view + * @name Get + * @summary 查询 + * @request GET:/api/admin/view/get + * @secure + */ + get = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/view/get`, + method: 'GET', + query: query, + secure: true, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags view + * @name GetList + * @summary 查询列表 + * @request POST:/api/admin/view/get-list + * @secure + */ + getList = (data: ViewGetListInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/view/get-list`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags view + * @name Add + * @summary 新增 + * @request POST:/api/admin/view/add + * @secure + */ + add = (data: ViewAddInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/view/add`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags view + * @name Update + * @summary 修改 + * @request PUT:/api/admin/view/update + * @secure + */ + update = (data: ViewUpdateInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/view/update`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags view + * @name Delete + * @summary 彻底删除 + * @request DELETE:/api/admin/view/delete + * @secure + */ + delete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/view/delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags view + * @name BatchDelete + * @summary 批量彻底删除 + * @request PUT:/api/admin/view/batch-delete + * @secure + */ + batchDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/view/batch-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags view + * @name SoftDelete + * @summary 删除 + * @request DELETE:/api/admin/view/soft-delete + * @secure + */ + softDelete = ( + query?: { + /** @format int64 */ + id?: number + }, + params: RequestParams = {} + ) => + this.request({ + path: `/api/admin/view/soft-delete`, + method: 'DELETE', + query: query, + secure: true, + ...params, + }) + /** + * No description + * + * @tags view + * @name BatchSoftDelete + * @summary 批量删除 + * @request PUT:/api/admin/view/batch-soft-delete + * @secure + */ + batchSoftDelete = (data: number[], params: RequestParams = {}) => + this.request({ + path: `/api/admin/view/batch-soft-delete`, + method: 'PUT', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) + /** + * No description + * + * @tags view + * @name Sync + * @summary 同步 + * @request POST:/api/admin/view/sync + * @secure + */ + sync = (data: ViewSyncInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/view/sync`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/WebSocket.ts b/zhontai.ui.admin.vue3/src/api/admin/WebSocket.ts new file mode 100644 index 0000000..7b38369 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/WebSocket.ts @@ -0,0 +1,53 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import { ResultOutputBoolean, ResultOutputObject, WebSocketPreConnectInput } from './data-contracts' +import { ContentType, HttpClient, RequestParams } from './http-client' + +export class WebSocketApi extends HttpClient { + /** + * No description + * + * @tags web-socket + * @name PreConnect + * @summary 获取websocket分区 + * @request POST:/api/admin/web-socket/pre-connect + * @secure + */ + preConnect = (data: WebSocketPreConnectInput, params: RequestParams = {}) => + this.request({ + path: `/api/admin/web-socket/pre-connect`, + method: 'POST', + body: data, + secure: true, + type: ContentType.Json, + format: 'json', + ...params, + }) + /** + * No description + * + * @tags web-socket + * @name IsUseIm + * @summary 是否使用im + * @request GET:/api/admin/web-socket/is-use-im + * @secure + */ + isUseIm = (params: RequestParams = {}) => + this.request({ + path: `/api/admin/web-socket/is-use-im`, + method: 'GET', + secure: true, + format: 'json', + ...params, + }) +} diff --git a/zhontai.ui.admin.vue3/src/api/admin/data-contracts.ts b/zhontai.ui.admin.vue3/src/api/admin/data-contracts.ts new file mode 100644 index 0000000..41a7ebc --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/data-contracts.ts @@ -0,0 +1,7140 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +/** + * 账号类型:UserName=1,Mobile=2,Email=3 + * @format int32 + */ +export type AccountType = 1 | 2 | 3 + +/** 添加 */ +export interface ApiAddInput { + /** + * 所属模块 + * @format int64 + */ + parentId?: number | null + /** 接口名称 */ + label?: string | null + /** 接口地址 */ + path?: string | null + /** 接口提交方法 */ + httpMethods?: string | null + /** 说明 */ + description?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean +} + +/** 接口管理 */ +export interface ApiEntity { + /** + * 主键Id + * @format int64 + */ + id?: number + /** + * 创建者用户Id + * @format int64 + */ + createdUserId?: number | null + /** + * 创建者用户名 + * @maxLength 60 + */ + createdUserName?: string | null + /** + * 创建者姓名 + * @maxLength 60 + */ + createdUserRealName?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** + * 修改者用户Id + * @format int64 + */ + modifiedUserId?: number | null + /** + * 修改者用户名 + * @maxLength 60 + */ + modifiedUserName?: string | null + /** + * 修改者姓名 + * @maxLength 60 + */ + modifiedUserRealName?: string | null + /** + * 修改时间 + * @format date-time + */ + modifiedTime?: string | null + /** 是否删除 */ + isDeleted?: boolean + /** + * 所属模块 + * @format int64 + */ + parentId?: number + /** 接口命名 */ + name?: string | null + /** 接口名称 */ + label?: string | null + /** 接口地址 */ + path?: string | null + /** 接口提交方法 */ + httpMethods?: string | null + /** 启用接口日志 */ + enabledLog?: boolean + /** 启用请求参数 */ + enabledParams?: boolean + /** 启用响应结果 */ + enabledResult?: boolean + /** 说明 */ + description?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean + childs?: ApiEntity[] | null + permissions?: PermissionEntity[] | null +} + +/** 接口列表 */ +export interface ApiGetListOutput { + /** + * 接口Id + * @format int64 + */ + id?: number + /** + * 接口父级 + * @format int64 + */ + parentId?: number | null + /** 接口命名 */ + name?: string | null + /** 接口名称 */ + label?: string | null + /** 接口地址 */ + path?: string | null + /** 接口提交方法 */ + httpMethods?: string | null + /** 启用操作日志 */ + enabledLog?: boolean + /** 启用请求参数 */ + enabledParams?: boolean + /** 启用响应结果 */ + enabledResult?: boolean + /** 说明 */ + description?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean +} + +/** 接口 */ +export interface ApiGetOutput { + /** + * 所属模块 + * @format int64 + */ + parentId?: number | null + /** 接口名称 */ + label?: string | null + /** 接口地址 */ + path?: string | null + /** 接口提交方法 */ + httpMethods?: string | null + /** 说明 */ + description?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean + /** + * 接口Id + * @format int64 + */ + id: number +} + +/** 查询分页 */ +export interface ApiGetPageInput { + /** 接口名称 */ + label?: string | null +} + +/** 接口 */ +export interface ApiModel { + /** 请求方法 */ + httpMethods?: string | null + /** 请求地址 */ + path?: string | null +} + +/** 设置启用请求日志 */ +export interface ApiSetEnableLogInput { + /** + * 接口Id + * @format int64 + */ + apiId?: number + /** 是否启用请求参数 */ + enabledLog?: boolean +} + +/** 设置启用请求参数 */ +export interface ApiSetEnableParamsInput { + /** + * 接口Id + * @format int64 + */ + apiId?: number + /** 是否启用请求参数 */ + enabledParams?: boolean +} + +/** 设置启用请求参数 */ +export interface ApiSetEnableResultInput { + /** + * 接口Id + * @format int64 + */ + apiId?: number + /** 是否启用响应结果 */ + enabledResult?: boolean +} + +/** 接口同步 */ +export interface ApiSyncInput { + /** 接口同步列表 */ + apis?: ApiSyncModel[] | null +} + +/** 接口同步模型 */ +export interface ApiSyncModel { + /** 接口名称 */ + label?: string | null + /** 接口地址 */ + path?: string | null + /** 父级路径 */ + parentPath?: string | null + /** 接口提交方法 */ + httpMethods?: string | null +} + +/** 修改 */ +export interface ApiUpdateInput { + /** + * 所属模块 + * @format int64 + */ + parentId?: number | null + /** 接口名称 */ + label?: string | null + /** 接口地址 */ + path?: string | null + /** 接口提交方法 */ + httpMethods?: string | null + /** 说明 */ + description?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean + /** + * 接口Id + * @format int64 + */ + id: number +} + +/** 邮箱更改密码 */ +export interface AuthChangePasswordByEmailInput { + /** + * 邮箱地址 + * @minLength 1 + */ + email: string + /** + * 验证码 + * @minLength 1 + */ + code: string + /** + * 验证码Id + * @minLength 1 + */ + codeId: string + /** + * 新密码 + * @minLength 1 + */ + newPassword: string + /** 确认新密码 */ + confirmPassword?: string | null +} + +/** 手机更改密码 */ +export interface AuthChangePasswordByMobileInput { + /** + * 手机号 + * @minLength 1 + */ + mobile: string + /** + * 验证码 + * @minLength 1 + */ + code: string + /** + * 验证码Id + * @minLength 1 + */ + codeId: string + /** + * 新密码 + * @minLength 1 + */ + newPassword: string + /** 确认新密码 */ + confirmPassword?: string | null +} + +/** 邮箱登录信息 */ +export interface AuthEmailLoginInput { + /** + * 邮箱地址 + * @minLength 1 + */ + email: string + /** + * 验证码 + * @minLength 1 + */ + code: string + /** + * 验证码Id + * @minLength 1 + */ + codeId: string +} + +/** 查询密钥 */ +export interface AuthGetPasswordEncryptKeyOutput { + /** 缓存键 */ + key?: string | null + /** 密码加密密钥 */ + encryptKey?: string | null + /** 密码加密向量 */ + iv?: string | null +} + +/** 用户信息 */ +export interface AuthGetUserInfoOutput { + /** 用户个人信息 */ + user?: AuthUserProfileOutput + /** 用户菜单列表 */ + menus?: AuthUserMenuOutput[] | null + /** 用户权限列表 */ + permissions?: string[] | null +} + +/** 用户权限 */ +export interface AuthGetUserPermissionsOutput { + /** 用户权限列表 */ + permissions?: string[] | null +} + +/** 登录信息 */ +export interface AuthLoginInput { + /** 用户名 */ + userName?: string | null + /** 手机号 */ + mobile?: string | null + /** 邮箱地址 */ + email?: string | null + /** 账号类型:UserName=1,Mobile=2,Email=3 */ + accountType?: AccountType + /** + * 密码 + * @minLength 1 + */ + password: string + /** 密码键 */ + passwordKey?: string | null + /** 验证码Id */ + captchaId?: string | null + /** 验证码数据 */ + captchaData?: string | null +} + +/** 手机号登录信息 */ +export interface AuthMobileLoginInput { + /** + * 手机号 + * @minLength 1 + */ + mobile: string + /** + * 验证码 + * @minLength 1 + */ + code: string + /** + * 验证码Id + * @minLength 1 + */ + codeId: string +} + +/** 邮箱注册 */ +export interface AuthRegByEmailInput { + /** + * 邮箱地址 + * @minLength 1 + */ + email: string + /** + * 验证码 + * @minLength 1 + */ + code: string + /** + * 验证码Id + * @minLength 1 + */ + codeId: string + /** + * 密码 + * @minLength 1 + */ + password: string + /** + * 企业名称 + * @minLength 1 + */ + corpName: string +} + +/** 手机号注册 */ +export interface AuthRegByMobileInput { + /** + * 手机号 + * @minLength 1 + */ + mobile: string + /** + * 验证码 + * @minLength 1 + */ + code: string + /** + * 验证码Id + * @minLength 1 + */ + codeId: string + /** + * 密码 + * @minLength 1 + */ + password: string + /** + * 企业名称 + * @minLength 1 + */ + corpName: string +} + +/** 用户菜单 */ +export interface AuthUserMenuOutput { + /** + * 权限Id + * @format int64 + */ + id?: number + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** 路由地址 */ + path?: string | null + /** 路由命名 */ + name?: string | null + /** 视图地址 */ + viewPath?: string | null + /** 重定向地址 */ + redirect?: string | null + /** 权限名称 */ + label?: string | null + /** 图标 */ + icon?: string | null + /** 打开 */ + opened?: boolean | null + /** 隐藏 */ + hidden?: boolean + /** 打开新窗口 */ + newWindow?: boolean | null + /** 链接外显 */ + external?: boolean | null + /** 是否缓存 */ + isKeepAlive?: boolean + /** 是否固定 */ + isAffix?: boolean + /** 链接地址 */ + link?: string | null + /** 是否内嵌窗口 */ + isIframe?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number | null +} + +/** 用户个人信息 */ +export interface AuthUserProfileOutput { + /** 用户ID */ + id?: number | null + /** 账号 */ + userName?: string | null + /** 姓名 */ + name?: string | null + /** 手机号 */ + mobile?: string | null + /** 昵称 */ + nickName?: string | null + /** 头像 */ + avatar?: string | null + /** 企业 */ + corpName?: string | null + /** 职位 */ + position?: string | null + /** 主属部门 */ + deptName?: string | null + /** 水印文案 */ + watermarkText?: string | null +} + +export interface CaptchaData { + id?: string | null + backgroundImage?: string | null + sliderImage?: string | null +} + +/** + * 数据范围:All=1,DeptWithChild=2,Dept=3,Self=4,Custom=5 + * @format int32 + */ +export type DataScope = 1 | 2 | 3 | 4 | 5 + +/** + * MySql=0,SqlServer=1,PostgreSQL=2,Oracle=3,Sqlite=4,OdbcOracle=5,OdbcSqlServer=6,OdbcMySql=7,OdbcPostgreSQL=8,Odbc=9,MsAccess=11,Dameng=12,ShenTong=14,KingbaseES=15,Firebird=16,Custom=17,ClickHouse=18,GBase=19,QuestDb=20,Xugu=21,CustomOracle=22,CustomSqlServer=23,CustomMySql=24,CustomPostgreSQL=25,DuckDB=26,TDengine=27 + * @format int32 + */ +export type DataType = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 + +/** 添加字典 */ +export interface DictAddInput { + /** + * 字典类型Id + * @format int64 + */ + dictTypeId?: number + /** + * 字典名称 + * @minLength 1 + */ + name: string + /** 字典编码 */ + code?: string | null + /** 字典值 */ + value?: string | null + /** 说明 */ + description?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number | null +} + +/** 字典列表 */ +export interface DictGetListOutput { + /** 字典类型编码 */ + dictTypeCode?: string | null + /** 字典类型名称 */ + dictTypeName?: string | null + /** + * 主键Id + * @format int64 + */ + id?: number + /** 字典名称 */ + name?: string | null + /** 字典编码 */ + code?: string | null + /** 字典值 */ + value?: string | null +} + +/** 字典 */ +export interface DictGetOutput { + /** + * 字典类型Id + * @format int64 + */ + dictTypeId?: number + /** + * 字典名称 + * @minLength 1 + */ + name: string + /** 字典编码 */ + code?: string | null + /** 字典值 */ + value?: string | null + /** 说明 */ + description?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number | null + /** + * 主键Id + * @format int64 + */ + id: number +} + +/** 字典分页请求 */ +export interface DictGetPageInput { + /** + * 字典类型Id + * @format int64 + */ + dictTypeId?: number + /** 字典名称 */ + name?: string | null +} + +/** 字典分页响应 */ +export interface DictGetPageOutput { + /** + * 主键Id + * @format int64 + */ + id?: number + /** 字典名称 */ + name?: string | null + /** 字典编码 */ + code?: string | null + /** 字典值 */ + value?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number +} + +/** 字典类型 */ +export interface DictTypeAddInput { + /** + * 上级Id + * @format int64 + */ + parentId?: number + /** + * 字典类型名称 + * @minLength 1 + */ + name: string + /** 字典类型编码 */ + code?: string | null + /** 描述 */ + description?: string | null + /** 启用 */ + enabled?: boolean + /** 是否树形 */ + isTree?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number +} + +/** 字典类型 */ +export interface DictTypeGetOutput { + /** + * 上级Id + * @format int64 + */ + parentId?: number + /** + * 字典类型名称 + * @minLength 1 + */ + name: string + /** 字典类型编码 */ + code?: string | null + /** 描述 */ + description?: string | null + /** 启用 */ + enabled?: boolean + /** 是否树形 */ + isTree?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** + * 主键Id + * @format int64 + */ + id: number +} + +/** 字典类型分页请求 */ +export interface DictTypeGetPageInput { + /** 字典名称 */ + name?: string | null +} + +/** 字典类型分页响应 */ +export interface DictTypeGetPageOutput { + /** + * 主键Id + * @format int64 + */ + id?: number + /** 字典名称 */ + name?: string | null + /** 字典编码 */ + code?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number +} + +/** 修改 */ +export interface DictTypeUpdateInput { + /** + * 上级Id + * @format int64 + */ + parentId?: number + /** + * 字典类型名称 + * @minLength 1 + */ + name: string + /** 字典类型编码 */ + code?: string | null + /** 描述 */ + description?: string | null + /** 启用 */ + enabled?: boolean + /** 是否树形 */ + isTree?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** + * 主键Id + * @format int64 + */ + id: number +} + +/** 修改 */ +export interface DictUpdateInput { + /** + * 字典类型Id + * @format int64 + */ + dictTypeId?: number + /** + * 字典名称 + * @minLength 1 + */ + name: string + /** 字典编码 */ + code?: string | null + /** 字典值 */ + value?: string | null + /** 说明 */ + description?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number | null + /** + * 主键Id + * @format int64 + */ + id: number +} + +/** 添加分组 */ +export interface DocAddGroupInput { + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** 文档类型:Group=1,Markdown=2 */ + type?: DocType + /** 名称 */ + label?: string | null + /** 命名 */ + name?: string | null + /** 打开 */ + opened?: boolean | null +} + +/** 添加图片 */ +export interface DocAddImageInput { + /** + * 用户Id + * @format int64 + */ + documentId?: number + /** 请求路径 */ + url?: string | null +} + +/** 添加菜单 */ +export interface DocAddMenuInput { + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** 文档类型:Group=1,Markdown=2 */ + type?: DocType + /** 命名 */ + name?: string | null + /** 名称 */ + label?: string | null + /** 说明 */ + description?: string | null +} + +/** 文档内容 */ +export interface DocGetContentOutput { + /** + * 编号 + * @format int64 + */ + id?: number + /** 名称 */ + label?: string | null + /** 内容 */ + content?: string | null +} + +/** 文档分组 */ +export interface DocGetGroupOutput { + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** 文档类型:Group=1,Markdown=2 */ + type?: DocType + /** 名称 */ + label?: string | null + /** 命名 */ + name?: string | null + /** 打开 */ + opened?: boolean | null + /** + * 编号 + * @format int64 + */ + id: number +} + +/** 文档菜单 */ +export interface DocGetMenuOutput { + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** 文档类型:Group=1,Markdown=2 */ + type?: DocType + /** 命名 */ + name?: string | null + /** 名称 */ + label?: string | null + /** 说明 */ + description?: string | null + /** + * 编号 + * @format int64 + */ + id: number +} + +/** 文档列表 */ +export interface DocListOutput { + /** + * 编号 + * @format int64 + */ + id?: number + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** 名称 */ + label?: string | null + /** 文档类型:Group=1,Markdown=2 */ + type?: DocType + /** 命名 */ + name?: string | null + /** 描述 */ + description?: string | null + /** 组打开 */ + opened?: boolean | null +} + +/** + * 文档类型:Group=1,Markdown=2 + * @format int32 + */ +export type DocType = 1 | 2 + +/** 更新文档内容 */ +export interface DocUpdateContentInput { + /** + * 编号 + * @format int64 + */ + id: number + /** 名称 */ + label?: string | null + /** 内容 */ + content?: string | null + /** Html */ + html?: string | null +} + +/** 更新分组 */ +export interface DocUpdateGroupInput { + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** 文档类型:Group=1,Markdown=2 */ + type?: DocType + /** 名称 */ + label?: string | null + /** 命名 */ + name?: string | null + /** 打开 */ + opened?: boolean | null + /** + * 编号 + * @format int64 + */ + id: number +} + +/** 更新菜单 */ +export interface DocUpdateMenuInput { + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** 文档类型:Group=1,Markdown=2 */ + type?: DocType + /** 命名 */ + name?: string | null + /** 名称 */ + label?: string | null + /** 说明 */ + description?: string | null + /** + * 编号 + * @format int64 + */ + id: number +} + +export interface DynamicFilterInfo { + field?: string | null + /** Contains=0,StartsWith=1,EndsWith=2,NotContains=3,NotStartsWith=4,NotEndsWith=5,Equal=6,Equals=7,Eq=8,NotEqual=9,GreaterThan=10,GreaterThanOrEqual=11,LessThan=12,LessThanOrEqual=13,Range=14,DateRange=15,Any=16,NotAny=17,Custom=18 */ + operator?: DynamicFilterOperator + value?: any + /** And=0,Or=1 */ + logic?: DynamicFilterLogic + filters?: DynamicFilterInfo[] | null +} + +/** + * And=0,Or=1 + * @format int32 + */ +export type DynamicFilterLogic = 0 | 1 + +/** + * Contains=0,StartsWith=1,EndsWith=2,NotContains=3,NotStartsWith=4,NotEndsWith=5,Equal=6,Equals=7,Eq=8,NotEqual=9,GreaterThan=10,GreaterThanOrEqual=11,LessThan=12,LessThanOrEqual=13,Range=14,DateRange=15,Any=16,NotAny=17,Custom=18 + * @format int32 + */ +export type DynamicFilterOperator = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 + +/** 导出信息输入 */ +export interface ExportInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** 文件名 */ + fileName?: string | null +} + +/** 删除 */ +export interface FileDeleteInput { + /** + * 文件Id + * @format int64 + */ + id: number +} + +/** 文件 */ +export interface FileEntity { + /** + * 主键Id + * @format int64 + */ + id?: number + /** + * 创建者用户Id + * @format int64 + */ + createdUserId?: number | null + /** + * 创建者用户名 + * @maxLength 60 + */ + createdUserName?: string | null + /** + * 创建者姓名 + * @maxLength 60 + */ + createdUserRealName?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** + * 修改者用户Id + * @format int64 + */ + modifiedUserId?: number | null + /** + * 修改者用户名 + * @maxLength 60 + */ + modifiedUserName?: string | null + /** + * 修改者姓名 + * @maxLength 60 + */ + modifiedUserRealName?: string | null + /** + * 修改时间 + * @format date-time + */ + modifiedTime?: string | null + /** 是否删除 */ + isDeleted?: boolean + /** Invalid=0,Minio=1,Aliyun=2,QCloud=3,Qiniu=4,HuaweiCloud=5,BaiduCloud=6,Ctyun=7 */ + provider?: OSSProvider + /** 存储桶名称 */ + bucketName?: string | null + /** 文件目录 */ + fileDirectory?: string | null + /** + * 文件Guid + * @format uuid + */ + fileGuid?: string + /** 保存文件名 */ + saveFileName?: string | null + /** 文件名 */ + fileName?: string | null + /** 文件扩展名 */ + extension?: string | null + /** + * 文件字节长度 + * @format int64 + */ + size?: number + /** 文件大小格式化 */ + sizeFormat?: string | null + /** 链接地址 */ + linkUrl?: string | null + /** md5码,防止上传重复文件 */ + md5?: string | null +} + +/** 文件分页请求 */ +export interface FileGetPageInput { + /** 文件名 */ + fileName?: string | null +} + +/** 文件分页响应 */ +export interface FileGetPageOutput { + /** + * 文件Id + * @format int64 + */ + id?: number + /** OSS供应商 */ + providerName?: string | null + /** 存储桶名称 */ + bucketName?: string | null + /** 文件目录 */ + fileDirectory?: string | null + /** + * 文件Guid + * @format uuid + */ + fileGuid?: string + /** 文件名 */ + fileName?: string | null + /** 文件扩展名 */ + extension?: string | null + /** 文件大小格式化 */ + sizeFormat?: string | null + /** 链接地址 */ + linkUrl?: string | null + /** 创建者 */ + createdUserName?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** 修改者 */ + modifiedUserName?: string | null + /** + * 修改时间 + * @format date-time + */ + modifiedTime?: string | null +} + +/** 导入信息输出 */ +export interface ImportOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** + * 新增数 + * @format int64 + */ + insertCount?: number + /** + * 更新数 + * @format int64 + */ + updateCount?: number +} + +/** 添加 */ +export interface LoginLogAddInput { + /** + * 租户Id + * @format int64 + */ + tenantId?: number | null + /** 姓名 */ + name?: string | null + /** IP */ + ip?: string | null + /** 国家 */ + country?: string | null + /** 省份 */ + province?: string | null + /** 城市 */ + city?: string | null + /** 网络服务商 */ + isp?: string | null + /** + * 耗时(毫秒) + * @format int64 + */ + elapsedMilliseconds?: number + /** 操作状态 */ + status?: boolean | null + /** 操作消息 */ + msg?: string | null + /** + * 创建者用户Id + * @format int64 + */ + createdUserId?: number | null + /** 创建者用户名 */ + createdUserName?: string | null + /** 创建者姓名 */ + createdUserRealName?: string | null +} + +/** 分页请求 */ +export interface LoginLogGetPageInput { + /** 创建者 */ + createdUserName?: string | null + /** 操作状态 */ + status?: boolean | null + /** IP */ + ip?: string | null + /** + * 创建开始时间 + * @format date-time + */ + addStartTime?: string | null + /** + * 创建结束时间 + * @format date-time + */ + addEndTime?: string | null +} + +/** 分页响应 */ +export interface LoginLogGetPageOutput { + /** + * 编号 + * @format int64 + */ + id?: number + /** 昵称 */ + nickName?: string | null + /** 创建者 */ + createdUserName?: string | null + /** IP */ + ip?: string | null + /** 国家 */ + country?: string | null + /** 省份 */ + province?: string | null + /** 城市 */ + city?: string | null + /** 网络服务商 */ + isp?: string | null + /** 浏览器 */ + browser?: string | null + /** 操作系统 */ + os?: string | null + /** 设备 */ + device?: string | null + /** + * 耗时(毫秒) + * @format int64 + */ + elapsedMilliseconds?: number + /** 操作状态 */ + status?: boolean + /** 操作消息 */ + msg?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null +} + +/** 添加 */ +export interface MsgAddInput { + /** 标题 */ + title?: string | null + /** 内容 */ + content?: string | null + /** + * 类型Id + * @format int64 + */ + typeId?: number + /** 类型名称 */ + typeName?: string | null + /** 消息状态:Draft=1,Published=2,Scheduled=3,Revoked=4,Archived=5 */ + status?: MsgStatusEnum +} + +/** 添加消息用户列表 */ +export interface MsgAddMsgUserListInput { + /** + * 消息 + * @format int64 + */ + msgId: number + /** 用户 */ + userIds?: number[] | null +} + +/** 消息用户列表 */ +export interface MsgGetMsgUserListOutput { + /** + * 主键Id + * @format int64 + */ + id?: number + /** 姓名 */ + name?: string | null + /** 手机号 */ + mobile?: string | null + /** 邮箱 */ + email?: string | null + /** 是否已读 */ + isRead?: boolean + /** + * 已读时间 + * @format date-time + */ + readTime?: string | null +} + +/** 消息 */ +export interface MsgGetOutput { + /** 标题 */ + title?: string | null + /** 内容 */ + content?: string | null + /** + * 类型Id + * @format int64 + */ + typeId?: number + /** 类型名称 */ + typeName?: string | null + /** 消息状态:Draft=1,Published=2,Scheduled=3,Revoked=4,Archived=5 */ + status?: MsgStatusEnum + /** + * 消息Id + * @format int64 + */ + id: number +} + +/** 消息分页请求 */ +export interface MsgGetPageInput { + /** 标题 */ + title?: string | null + + /** 来源 */ + source?: number | null +} + +/** 消息分页响应 */ +export interface MsgGetPageOutput { + /** + * 消息Id + * @format int64 + */ + id?: number + /** 标题 */ + title?: string | null + /** + * 类型Id + * @format int64 + */ + typeId?: number + /** 类型名称 */ + typeName?: string | null + /** 消息状态:Draft=1,Published=2,Scheduled=3,Revoked=4,Archived=5 */ + status?: MsgStatusEnum + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null +} + +/** + * 消息状态:Draft=1,Published=2,Scheduled=3,Revoked=4,Archived=5 + * @format int32 + */ +export type MsgStatusEnum = 1 | 2 | 3 | 4 | 5 + +/** 添加 */ +export interface MsgTypeAddInput { + /** + * 父级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 说明 */ + description?: string | null +} + +/** 查询列表响应 */ +export interface MsgTypeGetListOutput { + /** + * 主键 + * @format int64 + */ + id?: number + /** + * 父级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 描述 */ + description?: string | null +} + +/** 消息类型 */ +export interface MsgTypeGetOutput { + /** + * 父级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 说明 */ + description?: string | null + /** + * 消息分类Id + * @format int64 + */ + id: number +} + +/** 修改 */ +export interface MsgTypeUpdateInput { + /** + * 父级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 说明 */ + description?: string | null + /** + * 消息分类Id + * @format int64 + */ + id: number +} + +/** 修改 */ +export interface MsgUpdateInput { + /** 标题 */ + title?: string | null + /** 内容 */ + content?: string | null + /** + * 类型Id + * @format int64 + */ + typeId?: number + /** 类型名称 */ + typeName?: string | null + /** 消息状态:Draft=1,Published=2,Scheduled=3,Revoked=4,Archived=5 */ + status?: MsgStatusEnum + /** + * 消息Id + * @format int64 + */ + id: number +} + +/** + * Invalid=0,Minio=1,Aliyun=2,QCloud=3,Qiniu=4,HuaweiCloud=5,BaiduCloud=6,Ctyun=7 + * @format int32 + */ +export type OSSProvider = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 + +/** 添加 */ +export interface OperationLogAddInput { + /** 姓名 */ + name?: string | null + /** 接口名称 */ + apiLabel?: string | null + /** 接口地址 */ + apiPath?: string | null + /** 接口提交方法 */ + apiMethod?: string | null + /** IP */ + ip?: string | null + /** 国家 */ + country?: string | null + /** 省份 */ + province?: string | null + /** 城市 */ + city?: string | null + /** 网络服务商 */ + isp?: string | null + /** 浏览器 */ + browser?: string | null + /** 操作系统 */ + os?: string | null + /** 设备 */ + device?: string | null + /** 浏览器信息 */ + browserInfo?: string | null + /** + * 耗时(毫秒) + * @format int64 + */ + elapsedMilliseconds?: number + /** 操作状态 */ + status?: boolean | null + /** 操作消息 */ + msg?: string | null + /** 操作参数 */ + params?: string | null + /** + * 状态码 + * @format int32 + */ + statusCode?: number | null + /** 操作结果 */ + result?: string | null +} + +/** 查询分页请求 */ +export interface OperationLogGetPageInput { + /** 创建者 */ + createdUserName?: string | null + /** 操作状态 */ + status?: boolean | null + /** 操作接口 */ + api?: string | null + /** IP */ + ip?: string | null + /** + * 创建开始时间 + * @format date-time + */ + addStartTime?: string | null + /** + * 创建结束时间 + * @format date-time + */ + addEndTime?: string | null +} + +/** 查询分页响应 */ +export interface OperationLogGetPageOutput { + /** + * 编号 + * @format int64 + */ + id?: number + /** 昵称 */ + nickName?: string | null + /** 接口名称 */ + apiLabel?: string | null + /** 接口地址 */ + apiPath?: string | null + /** 接口提交方法 */ + apiMethod?: string | null + /** IP */ + ip?: string | null + /** 国家 */ + country?: string | null + /** 省份 */ + province?: string | null + /** 城市 */ + city?: string | null + /** 网络服务商 */ + isp?: string | null + /** 浏览器 */ + browser?: string | null + /** 操作系统 */ + os?: string | null + /** 设备 */ + device?: string | null + /** + * 耗时(毫秒) + * @format int64 + */ + elapsedMilliseconds?: number + /** 操作状态 */ + status?: boolean + /** + * 状态码 + * @format int32 + */ + statusCode?: number | null + /** 操作消息 */ + msg?: string | null + /** 请求参数 */ + params?: string | null + /** 响应结果 */ + result?: string | null + /** 创建者 */ + createdUserName?: string | null + /** 创建者姓名 */ + createdUserRealName?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null +} + +/** 添加 */ +export interface OrgAddInput { + /** + * 父级 + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 值 */ + value?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 描述 */ + description?: string | null +} + +/** 组织架构 */ +export interface OrgEntity { + /** + * 主键Id + * @format int64 + */ + id?: number + /** + * 创建者用户Id + * @format int64 + */ + createdUserId?: number | null + /** + * 创建者用户名 + * @maxLength 60 + */ + createdUserName?: string | null + /** + * 创建者姓名 + * @maxLength 60 + */ + createdUserRealName?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** + * 修改者用户Id + * @format int64 + */ + modifiedUserId?: number | null + /** + * 修改者用户名 + * @maxLength 60 + */ + modifiedUserName?: string | null + /** + * 修改者姓名 + * @maxLength 60 + */ + modifiedUserRealName?: string | null + /** + * 修改时间 + * @format date-time + */ + modifiedTime?: string | null + /** 是否删除 */ + isDeleted?: boolean + /** + * 租户Id + * @format int64 + */ + tenantId?: number | null + /** + * 父级 + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 值 */ + value?: string | null + /** + * 成员数 + * @format int32 + */ + memberCount?: number + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 描述 */ + description?: string | null + /** 员工列表 */ + staffs?: UserStaffEntity[] | null + /** 用户列表 */ + users?: UserEntity[] | null + /** 角色列表 */ + roles?: RoleEntity[] | null + /** 子级列表 */ + childs?: OrgEntity[] | null +} + +/** 部门列表 */ +export interface OrgGetListOutput { + /** + * 主键Id + * @format int64 + */ + id?: number + /** + * 父级 + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 值 */ + value?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 描述 */ + description?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null +} + +/** 部门 */ +export interface OrgGetOutput { + /** + * 父级 + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 值 */ + value?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 描述 */ + description?: string | null + /** + * 主键Id + * @format int64 + */ + id: number +} + +/** 部门路径列表 */ +export interface OrgGetSimpleListWithPathOutput { + /** + * 部门Id + * @format int64 + */ + id?: number + /** 部门路径 */ + path?: string | null +} + +/** 修改 */ +export interface OrgUpdateInput { + /** + * 父级 + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 值 */ + value?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 描述 */ + description?: string | null + /** + * 主键Id + * @format int64 + */ + id: number +} + +/** 分页信息输入 */ +export interface PageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number +} + +/** 分页信息输入 */ +export interface PageInputApiGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 查询分页 */ + filter?: ApiGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputDictGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 字典分页请求 */ + filter?: DictGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputDictTypeGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 字典类型分页请求 */ + filter?: DictTypeGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputFileGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 文件分页请求 */ + filter?: FileGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputLoginLogGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 分页请求 */ + filter?: LoginLogGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputMsgGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 消息分页请求 */ + filter?: MsgGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputOperationLogGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 查询分页请求 */ + filter?: OperationLogGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputPkgGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 套餐分页请求 */ + filter?: PkgGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputPkgGetPkgTenantListInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 套餐租户列表请求 */ + filter?: PkgGetPkgTenantListInput +} + +/** 分页信息输入 */ +export interface PageInputPrintTemplateGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 分页请求 */ + filter?: PrintTemplateGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputRegionGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 地区分页请求 */ + filter?: RegionGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputRoleGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 角色分页请求 */ + filter?: RoleGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputSiteMsgGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 站点消息分页请求 */ + filter?: SiteMsgGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputTaskGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 任务分页请求 */ + filter?: TaskGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputTaskLogGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 任务日志分页请求 */ + filter?: TaskLogGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputTenantGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 租户分页请求 */ + filter?: TenantGetPageInput +} + +/** 分页信息输入 */ +export interface PageInputUserGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 用户分页查询条件 */ + filter?: UserGetPageInput +} + +/** 分页信息输出 */ +export interface PageOutputApiEntity { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: ApiEntity[] | null +} + +/** 分页信息输出 */ +export interface PageOutputDictGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: DictGetPageOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputDictTypeGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: DictTypeGetPageOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputFileGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: FileGetPageOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputLoginLogGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: LoginLogGetPageOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputMsgGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: MsgGetPageOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputOperationLogGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: OperationLogGetPageOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputPkgGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: PkgGetPageOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputPkgGetPkgTenantListOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: PkgGetPkgTenantListOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputPrintTemplateGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: PrintTemplateGetPageOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputRegionGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: RegionGetPageOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputRoleGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: RoleGetPageOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputSiteMsgGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: SiteMsgGetPageOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputTaskGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: TaskGetPageOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputTaskLog { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: TaskLog[] | null +} + +/** 分页信息输出 */ +export interface PageOutputTenantGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: TenantGetPageOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputUserGetDeletedUserPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: UserGetDeletedUserPageOutput[] | null +} + +/** 分页信息输出 */ +export interface PageOutputUserGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: UserGetPageOutput[] | null +} + +/** + * 密码加密类型:MD5Encrypt32=0,PasswordHasher=1 + * @format int32 + */ +export type PasswordEncryptType = 0 | 1 + +/** 添加权限点 */ +export interface PermissionAddDotInput { + /** 平台 */ + platform?: string | null + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** 关联接口 */ + apiIds?: number[] | null + /** 权限名称 */ + label?: string | null + /** 权限编码 */ + code?: string | null + /** 说明 */ + description?: string | null + /** 图标 */ + icon?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean +} + +/** 条件分组 */ +export interface PermissionAddGroupInput { + /** 平台 */ + platform?: string | null + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** + * 视图 + * @format int64 + */ + viewId?: number | null + /** 路由命名 */ + name?: string | null + /** 访问路由地址 */ + path?: string | null + /** 重定向地址 */ + redirect?: string | null + /** 权限名称 */ + label?: string | null + /** 隐藏 */ + hidden?: boolean + /** 图标 */ + icon?: string | null + /** 展开 */ + opened?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean +} + +/** 添加菜单 */ +export interface PermissionAddMenuInput { + /** 平台 */ + platform?: string | null + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** + * 视图 + * @format int64 + */ + viewId?: number | null + /** 路由命名 */ + name?: string | null + /** 路由地址 */ + path?: string | null + /** 权限名称 */ + label?: string | null + /** 说明 */ + description?: string | null + /** 隐藏 */ + hidden?: boolean + /** 图标 */ + icon?: string | null + /** 打开新窗口 */ + newWindow?: boolean + /** 链接外显 */ + external?: boolean + /** 是否缓存 */ + isKeepAlive?: boolean + /** 是否固定 */ + isAffix?: boolean + /** 链接地址 */ + link?: string | null + /** 是否内嵌窗口 */ + isIframe?: boolean + /** 是否系统权限 */ + isSystem?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean +} + +/** 权限分配 */ +export interface PermissionAssignInput { + /** 平台 */ + platform?: string | null + /** @format int64 */ + roleId: number + permissionIds: number[] +} + +/** 权限 */ +export interface PermissionEntity { + /** + * 主键Id + * @format int64 + */ + id?: number + /** + * 创建者用户Id + * @format int64 + */ + createdUserId?: number | null + /** + * 创建者用户名 + * @maxLength 60 + */ + createdUserName?: string | null + /** + * 创建者姓名 + * @maxLength 60 + */ + createdUserRealName?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** + * 修改者用户Id + * @format int64 + */ + modifiedUserId?: number | null + /** + * 修改者用户名 + * @maxLength 60 + */ + modifiedUserName?: string | null + /** + * 修改者姓名 + * @maxLength 60 + */ + modifiedUserRealName?: string | null + /** + * 修改时间 + * @format date-time + */ + modifiedTime?: string | null + /** 是否删除 */ + isDeleted?: boolean + /** 平台 */ + platform?: string | null + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** 权限名称 */ + label?: string | null + /** 权限编码 */ + code?: string | null + /** 权限类型:Group=1,Menu=2,Dot=3 */ + type?: PermissionType + /** + * 视图Id + * @format int64 + */ + viewId?: number | null + /** 视图管理 */ + view?: ViewEntity + /** 路由命名 */ + name?: string | null + /** 路由地址 */ + path?: string | null + /** 重定向地址 */ + redirect?: string | null + /** 图标 */ + icon?: string | null + /** 隐藏 */ + hidden?: boolean + /** 展开分组 */ + opened?: boolean + /** 打开新窗口 */ + newWindow?: boolean + /** 链接外显 */ + external?: boolean + /** 是否缓存 */ + isKeepAlive?: boolean + /** 是否固定 */ + isAffix?: boolean + /** 链接地址 */ + link?: string | null + /** 是否内嵌窗口 */ + isIframe?: boolean + /** 是否系统权限 */ + isSystem?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 描述 */ + description?: string | null + /** 启用 */ + enabled?: boolean + apis?: ApiEntity[] | null + childs?: PermissionEntity[] | null +} + +/** 权限点 */ +export interface PermissionGetDotOutput { + /** 平台 */ + platform?: string | null + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** 关联接口 */ + apiIds?: number[] | null + /** 权限名称 */ + label?: string | null + /** 权限编码 */ + code?: string | null + /** 说明 */ + description?: string | null + /** 图标 */ + icon?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean + /** + * 权限Id + * @format int64 + */ + id: number +} + +/** 权限分组 */ +export interface PermissionGetGroupOutput { + /** 平台 */ + platform?: string | null + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** + * 视图 + * @format int64 + */ + viewId?: number | null + /** 路由命名 */ + name?: string | null + /** 访问路由地址 */ + path?: string | null + /** 重定向地址 */ + redirect?: string | null + /** 权限名称 */ + label?: string | null + /** 隐藏 */ + hidden?: boolean + /** 图标 */ + icon?: string | null + /** 展开 */ + opened?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean + /** + * 权限Id + * @format int64 + */ + id: number +} + +/** 查询列表 */ +export interface PermissionGetListInput { + /** 平台 */ + platform?: string | null + /** 路由地址 */ + path?: string | null + /** 权限名称 */ + label?: string | null +} + +/** 权限列表 */ +export interface PermissionGetListOutput { + /** + * 权限Id + * @format int64 + */ + id?: number + /** 平台 */ + platform?: string | null + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** 权限名称 */ + label?: string | null + /** 权限类型:Group=1,Menu=2,Dot=3 */ + type?: PermissionType + /** 路由地址 */ + path?: string | null + /** 重定向地址 */ + redirect?: string | null + /** 视图地址 */ + viewPath?: string | null + /** 链接地址 */ + link?: string | null + /** 接口路径 */ + apiPaths?: string | null + /** 图标 */ + icon?: string | null + /** 展开 */ + opened?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number | null + /** 描述 */ + description?: string | null + /** 启用 */ + enabled?: boolean +} + +/** 权限菜单 */ +export interface PermissionGetMenuOutput { + /** 平台 */ + platform?: string | null + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** + * 视图 + * @format int64 + */ + viewId?: number | null + /** 路由命名 */ + name?: string | null + /** 路由地址 */ + path?: string | null + /** 权限名称 */ + label?: string | null + /** 说明 */ + description?: string | null + /** 隐藏 */ + hidden?: boolean + /** 图标 */ + icon?: string | null + /** 打开新窗口 */ + newWindow?: boolean + /** 链接外显 */ + external?: boolean + /** 是否缓存 */ + isKeepAlive?: boolean + /** 是否固定 */ + isAffix?: boolean + /** 链接地址 */ + link?: string | null + /** 是否内嵌窗口 */ + isIframe?: boolean + /** 是否系统权限 */ + isSystem?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean + /** + * 权限Id + * @format int64 + */ + id: number +} + +/** 权限列表 */ +export interface PermissionGetPermissionListOutput { + /** + * 权限Id + * @format int64 + */ + id?: number + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** 权限名称 */ + label?: string | null + /** 行显示 */ + row?: boolean + /** 权限列表 */ + children?: PermissionGetPermissionListOutput[] | null +} + +/** + * 权限类型:Group=1,Menu=2,Dot=3 + * @format int32 + */ +export type PermissionType = 1 | 2 | 3 + +/** 修改权限点 */ +export interface PermissionUpdateDotInput { + /** 平台 */ + platform?: string | null + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** 关联接口 */ + apiIds?: number[] | null + /** 权限名称 */ + label?: string | null + /** 权限编码 */ + code?: string | null + /** 说明 */ + description?: string | null + /** 图标 */ + icon?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean + /** + * 权限Id + * @format int64 + */ + id: number +} + +/** 修改权限分组 */ +export interface PermissionUpdateGroupInput { + /** 平台 */ + platform?: string | null + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** + * 视图 + * @format int64 + */ + viewId?: number | null + /** 路由命名 */ + name?: string | null + /** 访问路由地址 */ + path?: string | null + /** 重定向地址 */ + redirect?: string | null + /** 权限名称 */ + label?: string | null + /** 隐藏 */ + hidden?: boolean + /** 图标 */ + icon?: string | null + /** 展开 */ + opened?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean + /** + * 权限Id + * @format int64 + */ + id: number +} + +/** 修改权限菜单 */ +export interface PermissionUpdateMenuInput { + /** 平台 */ + platform?: string | null + /** + * 父级节点 + * @format int64 + */ + parentId?: number + /** + * 视图 + * @format int64 + */ + viewId?: number | null + /** 路由命名 */ + name?: string | null + /** 路由地址 */ + path?: string | null + /** 权限名称 */ + label?: string | null + /** 说明 */ + description?: string | null + /** 隐藏 */ + hidden?: boolean + /** 图标 */ + icon?: string | null + /** 打开新窗口 */ + newWindow?: boolean + /** 链接外显 */ + external?: boolean + /** 是否缓存 */ + isKeepAlive?: boolean + /** 是否固定 */ + isAffix?: boolean + /** 链接地址 */ + link?: string | null + /** 是否内嵌窗口 */ + isIframe?: boolean + /** 是否系统权限 */ + isSystem?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean + /** + * 权限Id + * @format int64 + */ + id: number +} + +/** 添加 */ +export interface PkgAddInput { + /** + * 父级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 说明 */ + description?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean +} + +/** 添加套餐租户列表 */ +export interface PkgAddPkgTenantListInput { + /** + * 套餐 + * @format int64 + */ + pkgId: number + /** 租户列表 */ + tenantIds?: number[] | null +} + +/** 套餐 */ +export interface PkgEntity { + /** + * 主键Id + * @format int64 + */ + id?: number + /** + * 创建者用户Id + * @format int64 + */ + createdUserId?: number | null + /** + * 创建者用户名 + * @maxLength 60 + */ + createdUserName?: string | null + /** + * 创建者姓名 + * @maxLength 60 + */ + createdUserRealName?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** + * 修改者用户Id + * @format int64 + */ + modifiedUserId?: number | null + /** + * 修改者用户名 + * @maxLength 60 + */ + modifiedUserName?: string | null + /** + * 修改者姓名 + * @maxLength 60 + */ + modifiedUserRealName?: string | null + /** + * 修改时间 + * @format date-time + */ + modifiedTime?: string | null + /** 是否删除 */ + isDeleted?: boolean + /** + * 父级Id + * @format int64 + */ + parentId?: number + /** 子级列表 */ + childs?: PkgEntity[] | null + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 说明 */ + description?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 租户列表 */ + tenants?: TenantEntity[] | null + /** 权限列表 */ + permissions?: PermissionEntity[] | null +} + +/** 套餐列表响应 */ +export interface PkgGetListOutput { + /** + * 主键 + * @format int64 + */ + id?: number + /** + * 父级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** 描述 */ + description?: string | null + /** 启用 */ + enabled?: boolean + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null +} + +/** 套餐 */ +export interface PkgGetOutput { + /** + * 父级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 说明 */ + description?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean + /** + * 套餐Id + * @format int64 + */ + id: number +} + +/** 套餐分页请求 */ +export interface PkgGetPageInput { + /** 名称 */ + name?: string | null +} + +/** 套餐分页响应 */ +export interface PkgGetPageOutput { + /** + * 主键 + * @format int64 + */ + id?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 说明 */ + description?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null +} + +/** 套餐租户列表请求 */ +export interface PkgGetPkgTenantListInput { + /** 租户名 */ + tenantName?: string | null + /** + * 套餐Id + * @format int64 + */ + pkgId?: number | null +} + +/** 套餐租户列表响应 */ +export interface PkgGetPkgTenantListOutput { + /** + * 主键Id + * @format int64 + */ + id?: number + /** 租户名 */ + name?: string | null + /** 租户编码 */ + code?: string | null +} + +/** 设置套餐权限 */ +export interface PkgSetPkgPermissionsInput { + /** 平台 */ + platform?: string | null + /** @format int64 */ + pkgId: number + permissionIds: number[] +} + +/** 修改 */ +export interface PkgUpdateInput { + /** + * 父级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 说明 */ + description?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean + /** + * 套餐Id + * @format int64 + */ + id: number +} + +/** 添加 */ +export interface PrintTemplateAddInput { + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 说明 */ + description?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number +} + +/** 表单响应 */ +export interface PrintTemplateGetOutput { + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 说明 */ + description?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** + * 打印模板Id + * @format int64 + */ + id: number + /** + * 版本 + * @format int64 + */ + version?: number +} + +/** 分页请求 */ +export interface PrintTemplateGetPageInput { + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null +} + +/** 分页响应 */ +export interface PrintTemplateGetPageOutput { + /** + * 打印模板Id + * @format int64 + */ + id?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 说明 */ + description?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** + * 版本 + * @format int64 + */ + version?: number +} + +/** 修改模板响应 */ +export interface PrintTemplateGetUpdateTemplateOutput { + /** + * 打印模板Id + * @format int64 + */ + id: number + /** 模板 */ + template?: string | null + /** 打印数据 */ + printData?: string | null + /** + * 版本 + * @format int64 + */ + version?: number +} + +/** 设置启用 */ +export interface PrintTemplateSetEnableInput { + /** + * 打印模板Id + * @format int64 + */ + printTemplateId?: number + /** 是否启用 */ + enabled?: boolean +} + +/** 修改 */ +export interface PrintTemplateUpdateInput { + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 说明 */ + description?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** + * 打印模板Id + * @format int64 + */ + id: number + /** + * 版本 + * @format int64 + */ + version?: number +} + +/** 修改模板 */ +export interface PrintTemplateUpdateTemplateInput { + /** + * 打印模板Id + * @format int64 + */ + id: number + /** 模板 */ + template?: string | null + /** 打印数据 */ + printData?: string | null + /** + * 版本 + * @format int64 + */ + version?: number +} + +/** 项目配置 */ +export interface ProjectConfig { + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 版本 */ + version?: string | null + /** 描述 */ + description?: string | null +} + +/** 添加 */ +export interface RegionAddInput { + /** + * 上级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 简称 */ + shortName?: string | null + /** 地区级别:Province=1,City=2,County=3,Town(镇/乡)=4,Vilage(村/社区)=5 */ + level?: RegionLevel + /** 代码 */ + code?: string | null + /** 驻地 */ + capital?: string | null + /** + * 人口(万人) + * @format int32 + */ + population?: number | null + /** + * 面积(平方千米) + * @format int32 + */ + area?: number | null + /** 区号 */ + areaCode?: string | null + /** 邮编 */ + zipCode?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number | null + /** 热门 */ + hot?: boolean + /** 启用 */ + enabled?: boolean +} + +/** 下级列表 */ +export interface RegionGetChildListOutput { + /** + * 主键Id + * @format int64 + */ + id?: number + /** 名称 */ + name?: string | null + /** 地区级别:Province=1,City=2,County=3,Town(镇/乡)=4,Vilage(村/社区)=5 */ + level?: RegionLevel + /** 拼音 */ + pinyin?: string | null + /** 拼音首字母 */ + pinyinFirst?: string | null + /** 启用 */ + enabled?: boolean + /** 热门 */ + hot?: boolean + /** 叶子节点 */ + leaf?: boolean +} + +/** 地区列表请求 */ +export interface RegionGetListInput { + /** + * 上级Id + * @format int64 + */ + parentId?: number + /** 热门 */ + hot?: boolean | null + /** 启用 */ + enabled?: boolean | null +} + +/** 地区 */ +export interface RegionGetOutput { + /** + * 上级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 简称 */ + shortName?: string | null + /** 地区级别:Province=1,City=2,County=3,Town(镇/乡)=4,Vilage(村/社区)=5 */ + level?: RegionLevel + /** 代码 */ + code?: string | null + /** 驻地 */ + capital?: string | null + /** + * 人口(万人) + * @format int32 + */ + population?: number | null + /** + * 面积(平方千米) + * @format int32 + */ + area?: number | null + /** 区号 */ + areaCode?: string | null + /** 邮编 */ + zipCode?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number | null + /** 热门 */ + hot?: boolean + /** 启用 */ + enabled?: boolean + /** + * 主键Id + * @format int64 + */ + id: number + /** 上级Id列表 */ + parentIdList?: number[] | null +} + +/** 地区分页请求 */ +export interface RegionGetPageInput { + /** + * 上级Id + * @format int64 + */ + parentId?: number | null + /** 名称 */ + name?: string | null + /** 地区级别:Province=1,City=2,County=3,Town(镇/乡)=4,Vilage(村/社区)=5 */ + level?: RegionLevel + /** 热门 */ + hot?: boolean | null + /** 启用 */ + enabled?: boolean | null +} + +/** 地区分页响应 */ +export interface RegionGetPageOutput { + /** + * 主键Id + * @format int64 + */ + id?: number + /** + * 上级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 简称 */ + shortName?: string | null + /** 地区级别:Province=1,City=2,County=3,Town(镇/乡)=4,Vilage(村/社区)=5 */ + level?: RegionLevel + /** 代码 */ + code?: string | null + /** 拼音 */ + pinyin?: string | null + /** 拼音首字母 */ + pinyinFirst?: string | null + /** 驻地 */ + capital?: string | null + /** + * 人口(万人) + * @format int32 + */ + population?: number | null + /** + * 面积(平方千米) + * @format int32 + */ + area?: number | null + /** 区号 */ + areaCode?: string | null + /** 邮编 */ + zipCode?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number | null + /** 热门 */ + hot?: boolean + /** 启用 */ + enabled?: boolean +} + +/** + * 地区级别:Province=1,City=2,County=3,Town(镇/乡)=4,Vilage(村/社区)=5 + * @format int32 + */ +export type RegionLevel = 1 | 2 | 3 | 4 | 5 + +/** 设置启用 */ +export interface RegionSetEnableInput { + /** + * 地区Id + * @format int64 + */ + regionId?: number + /** 是否启用 */ + enabled?: boolean +} + +/** 设置热门 */ +export interface RegionSetHotInput { + /** + * 地区Id + * @format int64 + */ + regionId?: number + /** 热门 */ + hot?: boolean +} + +/** 修改 */ +export interface RegionUpdateInput { + /** + * 上级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 简称 */ + shortName?: string | null + /** 地区级别:Province=1,City=2,County=3,Town(镇/乡)=4,Vilage(村/社区)=5 */ + level?: RegionLevel + /** 代码 */ + code?: string | null + /** 驻地 */ + capital?: string | null + /** + * 人口(万人) + * @format int32 + */ + population?: number | null + /** + * 面积(平方千米) + * @format int32 + */ + area?: number | null + /** 区号 */ + areaCode?: string | null + /** 邮编 */ + zipCode?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number | null + /** 热门 */ + hot?: boolean + /** 启用 */ + enabled?: boolean + /** + * 主键Id + * @format int64 + */ + id: number +} + +/** 结果输出 */ +export interface ResultOutputApiGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 接口 */ + data?: ApiGetOutput +} + +/** 结果输出 */ +export interface ResultOutputAuthGetPasswordEncryptKeyOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 查询密钥 */ + data?: AuthGetPasswordEncryptKeyOutput +} + +/** 结果输出 */ +export interface ResultOutputAuthGetUserInfoOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 用户信息 */ + data?: AuthGetUserInfoOutput +} + +/** 结果输出 */ +export interface ResultOutputAuthGetUserPermissionsOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 用户权限 */ + data?: AuthGetUserPermissionsOutput +} + +/** 结果输出 */ +export interface ResultOutputAuthUserProfileOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 用户个人信息 */ + data?: AuthUserProfileOutput +} + +/** 结果输出 */ +export interface ResultOutputBoolean { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: boolean +} + +export interface ResultOutputString { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: string +} + +/** 结果输出 */ +export interface ResultOutputCaptchaData { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + data?: CaptchaData +} + +/** 结果输出 */ +export interface ResultOutputDictGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 字典 */ + data?: DictGetOutput +} + +/** 结果输出 */ +export interface ResultOutputDictTypeGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 字典类型 */ + data?: DictTypeGetOutput +} + +/** 结果输出 */ +export interface ResultOutputDictionaryStringListDictGetListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: Record +} + +/** 结果输出 */ +export interface ResultOutputDocGetContentOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 文档内容 */ + data?: DocGetContentOutput +} + +/** 结果输出 */ +export interface ResultOutputDocGetGroupOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 文档分组 */ + data?: DocGetGroupOutput +} + +/** 结果输出 */ +export interface ResultOutputDocGetMenuOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 文档菜单 */ + data?: DocGetMenuOutput +} + +/** 结果输出 */ +export interface ResultOutputFileEntity { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 文件 */ + data?: FileEntity +} + +/** 结果输出 */ +export interface ResultOutputIEnumerableObject { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: any[] | null +} + +/** 结果输出 */ +export interface ResultOutputImportOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 导入信息输出 */ + data?: ImportOutput +} + +/** 结果输出 */ +export interface ResultOutputInt64 { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** + * 数据 + * @format int64 + */ + data?: number +} + +/** 结果输出 */ +export interface ResultOutputListApiGetListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: ApiGetListOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListAuthUserMenuOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: AuthUserMenuOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListDocListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: DocListOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListFileEntity { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: FileEntity[] | null +} + +/** 结果输出 */ +export interface ResultOutputListInt64 { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: number[] | null +} + +/** 结果输出 */ +export interface ResultOutputListMsgGetMsgUserListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: MsgGetMsgUserListOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListMsgTypeGetListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: MsgTypeGetListOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListObject { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: any[] | null +} + +/** 结果输出 */ +export interface ResultOutputListOrgGetListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: OrgGetListOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListOrgGetSimpleListWithPathOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: OrgGetSimpleListWithPathOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListPermissionGetListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: PermissionGetListOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListPermissionGetPermissionListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: PermissionGetPermissionListOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListPkgGetListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: PkgGetListOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListPkgGetPkgTenantListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: PkgGetPkgTenantListOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListProjectConfig { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: ProjectConfig[] | null +} + +/** 结果输出 */ +export interface ResultOutputListRegionGetChildListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: RegionGetChildListOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListRoleGetListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: RoleGetListOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListRoleGetRoleUserListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: RoleGetRoleUserListOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListSearchTemplateGetListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: SearchTemplateGetListOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputListString { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: string[] | null +} + +/** 结果输出 */ +export interface ResultOutputListViewGetListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: ViewGetListOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputMsgGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 消息 */ + data?: MsgGetOutput +} + +/** 结果输出 */ +export interface ResultOutputMsgTypeGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 消息类型 */ + data?: MsgTypeGetOutput +} + +/** 结果输出 */ +export interface ResultOutputObject { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: any +} + +/** 结果输出 */ +export interface ResultOutputOrgGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 部门 */ + data?: OrgGetOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputApiEntity { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputApiEntity +} + +/** 结果输出 */ +export interface ResultOutputPageOutputDictGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputDictGetPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputDictTypeGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputDictTypeGetPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputFileGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputFileGetPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputLoginLogGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputLoginLogGetPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputMsgGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputMsgGetPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputOperationLogGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputOperationLogGetPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputPkgGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputPkgGetPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputPkgGetPkgTenantListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputPkgGetPkgTenantListOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputPrintTemplateGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputPrintTemplateGetPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputRegionGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputRegionGetPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputRoleGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputRoleGetPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputSiteMsgGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputSiteMsgGetPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputTaskGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputTaskGetPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputTaskLog { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputTaskLog +} + +/** 结果输出 */ +export interface ResultOutputPageOutputTenantGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputTenantGetPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputUserGetDeletedUserPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputUserGetDeletedUserPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPageOutputUserGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputUserGetPageOutput +} + +/** 结果输出 */ +export interface ResultOutputPermissionGetDotOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 权限点 */ + data?: PermissionGetDotOutput +} + +/** 结果输出 */ +export interface ResultOutputPermissionGetGroupOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 权限分组 */ + data?: PermissionGetGroupOutput +} + +/** 结果输出 */ +export interface ResultOutputPermissionGetMenuOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 权限菜单 */ + data?: PermissionGetMenuOutput +} + +/** 结果输出 */ +export interface ResultOutputPkgGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 套餐 */ + data?: PkgGetOutput +} + +/** 结果输出 */ +export interface ResultOutputPrintTemplateGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 表单响应 */ + data?: PrintTemplateGetOutput +} + +/** 结果输出 */ +export interface ResultOutputPrintTemplateGetUpdateTemplateOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 修改模板响应 */ + data?: PrintTemplateGetUpdateTemplateOutput +} + +/** 结果输出 */ +export interface ResultOutputRegionGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 地区 */ + data?: RegionGetOutput +} + +/** 结果输出 */ +export interface ResultOutputRoleGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 角色 */ + data?: RoleGetOutput +} + +/** 结果输出 */ +export interface ResultOutputSearchTemplateGetUpdateOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 修改响应 */ + data?: SearchTemplateGetUpdateOutput +} + +/** 结果输出 */ +export interface ResultOutputSiteMsgGetContentOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 消息内容 */ + data?: SiteMsgGetContentOutput +} + +/** 结果输出 */ +export interface ResultOutputString { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: string | null +} + +/** 结果输出 */ +export interface ResultOutputTaskGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 任务 */ + data?: TaskGetOutput +} + +/** 结果输出 */ +export interface ResultOutputTenantGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + data?: TenantGetOutput +} + +/** 结果输出 */ +export interface ResultOutputTokenInfo { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 令牌信息 */ + data?: TokenInfo +} + +/** 结果输出 */ +export interface ResultOutputUserGetBasicOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 用户基本信息 */ + data?: UserGetBasicOutput +} + +/** 结果输出 */ +export interface ResultOutputUserGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 用户 */ + data?: UserGetOutput +} + +/** 结果输出 */ +export interface ResultOutputUserGetPermissionOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 用户权限 */ + data?: UserGetPermissionOutput +} + +/** 结果输出 */ +export interface ResultOutputValidateResult { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + data?: ValidateResult +} + +/** 结果输出 */ +export interface ResultOutputViewGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 视图 */ + data?: ViewGetOutput +} + +/** 添加 */ +export interface RoleAddInput { + /** + * 父级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 角色类型:Group=1,Role=2 */ + type?: RoleType + /** 数据范围:All=1,DeptWithChild=2,Dept=3,Self=4,Custom=5 */ + dataScope?: DataScope + /** 指定部门 */ + orgIds?: number[] | null + /** 部门列表 */ + orgs?: OrgEntity[] | null + /** 说明 */ + description?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number +} + +/** 添加角色用户列表 */ +export interface RoleAddRoleUserListInput { + /** + * 角色 + * @format int64 + */ + roleId: number + /** 用户 */ + userIds?: number[] | null +} + +/** 角色 */ +export interface RoleEntity { + /** + * 主键Id + * @format int64 + */ + id?: number + /** + * 创建者用户Id + * @format int64 + */ + createdUserId?: number | null + /** + * 创建者用户名 + * @maxLength 60 + */ + createdUserName?: string | null + /** + * 创建者姓名 + * @maxLength 60 + */ + createdUserRealName?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** + * 修改者用户Id + * @format int64 + */ + modifiedUserId?: number | null + /** + * 修改者用户名 + * @maxLength 60 + */ + modifiedUserName?: string | null + /** + * 修改者姓名 + * @maxLength 60 + */ + modifiedUserRealName?: string | null + /** + * 修改时间 + * @format date-time + */ + modifiedTime?: string | null + /** 是否删除 */ + isDeleted?: boolean + /** + * 租户Id + * @format int64 + */ + tenantId?: number | null + /** + * 父级Id + * @format int64 + */ + parentId?: number + /** 子级列表 */ + childs?: RoleEntity[] | null + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 角色类型:Group=1,Role=2 */ + type?: RoleType + /** 数据范围:All=1,DeptWithChild=2,Dept=3,Self=4,Custom=5 */ + dataScope?: DataScope + /** 说明 */ + description?: string | null + /** 隐藏 */ + hidden?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 用户列表 */ + users?: UserEntity[] | null + /** 部门列表 */ + orgs?: OrgEntity[] | null + /** 权限列表 */ + permissions?: PermissionEntity[] | null +} + +/** 角色列表响应 */ +export interface RoleGetListOutput { + /** + * 主键 + * @format int64 + */ + id?: number + /** + * 父级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 角色类型:Group=1,Role=2 */ + type?: RoleType + /** + * 排序 + * @format int32 + */ + sort?: number + /** 描述 */ + description?: string | null +} + +/** 角色 */ +export interface RoleGetOutput { + /** + * 父级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 角色类型:Group=1,Role=2 */ + type?: RoleType + /** 数据范围:All=1,DeptWithChild=2,Dept=3,Self=4,Custom=5 */ + dataScope?: DataScope + /** 指定部门 */ + orgIds?: number[] | null + /** 部门列表 */ + orgs?: OrgEntity[] | null + /** 说明 */ + description?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** + * 角色Id + * @format int64 + */ + id: number +} + +/** 角色分页请求 */ +export interface RoleGetPageInput { + /** 名称 */ + name?: string | null +} + +/** 角色分页响应 */ +export interface RoleGetPageOutput { + /** + * 主键 + * @format int64 + */ + id?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 说明 */ + description?: string | null + /** 隐藏 */ + hidden?: boolean + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null +} + +/** 角色用户列表响应 */ +export interface RoleGetRoleUserListOutput { + /** + * 主键Id + * @format int64 + */ + id?: number + /** 姓名 */ + name?: string | null + /** 手机号 */ + mobile?: string | null + /** 邮箱 */ + email?: string | null +} + +/** 设置数据范围 */ +export interface RoleSetDataScopeInput { + /** + * 角色Id + * @format int64 + */ + roleId: number + /** 数据范围:All=1,DeptWithChild=2,Dept=3,Self=4,Custom=5 */ + dataScope?: DataScope + /** 指定部门 */ + orgIds?: number[] | null +} + +/** + * 角色类型:Group=1,Role=2 + * @format int32 + */ +export type RoleType = 1 | 2 + +/** 修改 */ +export interface RoleUpdateInput { + /** + * 父级Id + * @format int64 + */ + parentId?: number + /** 名称 */ + name?: string | null + /** 编码 */ + code?: string | null + /** 角色类型:Group=1,Role=2 */ + type?: RoleType + /** 数据范围:All=1,DeptWithChild=2,Dept=3,Self=4,Custom=5 */ + dataScope?: DataScope + /** 指定部门 */ + orgIds?: number[] | null + /** 部门列表 */ + orgs?: OrgEntity[] | null + /** 说明 */ + description?: string | null + /** + * 排序 + * @format int32 + */ + sort?: number + /** + * 角色Id + * @format int64 + */ + id: number +} + +/** 查询模板列表 */ +export interface SearchTemplateGetListOutput { + /** + * 主键Id + * @format int64 + */ + id?: number + /** 名称 */ + name?: string | null +} + +/** 修改响应 */ +export interface SearchTemplateGetUpdateOutput { + /** + * 模块Id + * @format int64 + */ + moduleId?: number + /** 名称 */ + name?: string | null + /** 模板 */ + template?: string | null + /** + * 版本 + * @format int64 + */ + version?: number +} + +/** 保存请求 */ +export interface SearchTemplateSaveInput { + /** + * 模块Id + * @format int64 + */ + moduleId?: number + /** 名称 */ + name?: string | null + /** 模板 */ + template?: string | null + /** + * 版本 + * @format int64 + */ + version?: number +} + +/** 发送邮箱验证码 */ +export interface SendEmailCodeInput { + /** + * 邮箱地址 + * @minLength 1 + */ + email: string + /** 验证码Id */ + codeId?: string | null + /** + * 验证码Id + * @minLength 1 + */ + captchaId: string + track: SlideTrack +} + +/** 发送短信验证码 */ +export interface SendSmsCodeInput { + /** + * 手机号 + * @minLength 1 + */ + mobile: string + /** 验证码Id */ + codeId?: string | null + /** + * 验证码Id + * @minLength 1 + */ + captchaId: string + track: SlideTrack +} + +/** + * 性别:Unknown(未知)=0,Male(男)=1,Female(女)=2 + * @format int32 + */ +export type Sex = 0 | 1 | 2 + +/** 消息内容 */ +export interface SiteMsgGetContentOutput { + /** + * 消息Id + * @format int64 + */ + msgId?: number + /** 标题 */ + title?: string | null + /** 类型名称 */ + typeName?: string | null + /** 内容 */ + content?: string | null + /** + * 接收时间 + * @format date-time + */ + receivedTime?: string | null + /** 是否已读 */ + isRead?: boolean | null +} + +/** 站点消息分页请求 */ +export interface SiteMsgGetPageInput { + /** 是否已读 */ + isRead?: boolean | null + /** + * 分类Id + * @format int64 + */ + typeId?: number | null + /** 标题 */ + title?: string | null +} + +/** 站点消息分页响应 */ +export interface SiteMsgGetPageOutput { + /** + * 唯一Id + * @format int64 + */ + id?: number + /** + * 消息Id + * @format int64 + */ + msgId?: number + /** 标题 */ + title?: string | null + /** + * 类型Id + * @format int64 + */ + typeId?: number + /** 类型名称 */ + typeName?: string | null + /** 是否已读 */ + isRead?: boolean | null + /** + * 接收时间 + * @format date-time + */ + receivedTime?: string | null +} + +export interface SlideTrack { + /** @format int32 */ + backgroundImageWidth?: number + /** @format int32 */ + backgroundImageHeight?: number + /** @format int32 */ + sliderImageWidth?: number + /** @format int32 */ + sliderImageHeight?: number + /** @format date-time */ + startTime?: string + /** @format date-time */ + endTime?: string + tracks?: Track[] | null + /** @format float */ + percent?: number +} + +/** 排序 */ +export interface SortInput { + /** 属性名称 */ + propName?: string | null + /** 排序方式:Asc=0,Desc=1 */ + order?: SortOrder + /** 是否升序 */ + isAscending?: boolean | null +} + +/** + * 排序方式:Asc=0,Desc=1 + * @format int32 + */ +export type SortOrder = 0 | 1 + +/** 员工添加 */ +export interface StaffAddInput { + /** 工号 */ + jobNumber?: string | null + /** 职位 */ + position?: string | null + /** 性别:Unknown(未知)=0,Male(男)=1,Female(女)=2 */ + sex?: Sex + /** + * 入职时间 + * @format date-time + */ + entryTime?: string | null + /** 企业微信名片 */ + workWeChatCard?: string | null + /** 个人简介 */ + introduce?: string | null +} + +/** 添加 */ +export interface TaskAddInput { + /** 任务标题 */ + topic?: string | null + /** 任务参数 */ + body?: string | null + /** + * 任务执行多少轮,-1为永久循环 + * @format int32 + */ + round?: number + /** SEC=1,RunOnDay=11,RunOnWeek=12,RunOnMonth=13,Custom=21 */ + interval?: TaskInterval + /** 定时参数 60,60,60,120,120,1200,1200 */ + intervalArgument?: string | null + /** 报警邮件,多个邮件地址则逗号分隔 */ + alarmEmail?: string | null + /** + * 失败重试次数 + * @format int32 + */ + failRetryCount?: number | null + /** + * 失败重试间隔(秒) + * @format int32 + */ + failRetryInterval?: number | null +} + +/** 任务 */ +export interface TaskGetOutput { + /** 任务标题 */ + topic?: string | null + /** 任务参数 */ + body?: string | null + /** + * 任务执行多少轮,-1为永久循环 + * @format int32 + */ + round?: number + /** SEC=1,RunOnDay=11,RunOnWeek=12,RunOnMonth=13,Custom=21 */ + interval?: TaskInterval + /** 定时参数 60,60,60,120,120,1200,1200 */ + intervalArgument?: string | null + /** 报警邮件,多个邮件地址则逗号分隔 */ + alarmEmail?: string | null + /** + * 失败重试次数 + * @format int32 + */ + failRetryCount?: number | null + /** + * 失败重试间隔(秒) + * @format int32 + */ + failRetryInterval?: number | null + /** + * 任务Id + * @minLength 1 + */ + id: string +} + +/** 任务分页请求 */ +export interface TaskGetPageInput { + /** 分组名称 */ + groupName?: string | null + /** 任务名称 */ + taskName?: string | null + /** 集群Id */ + clusterId?: string | null + /** Running=0,Paused=1,Completed=2 */ + taskStatus?: TaskStatus + /** + * 创建开始时间 + * @format date-time + */ + startAddTime?: string | null + /** + * 创建结束时间 + * @format date-time + */ + endAddTime?: string | null +} + +/** 任务分页响应 */ +export interface TaskGetPageOutput { + /** 主键 */ + id?: string | null + /** 任务标题 */ + topic?: string | null + /** 任务数据 */ + body?: string | null + /** + * 任务执行多少轮 + * @format int32 + */ + round?: number + /** SEC=1,RunOnDay=11,RunOnWeek=12,RunOnMonth=13,Custom=21 */ + interval?: TaskInterval + /** 定时参数值 */ + intervalArgument?: string | null + /** Running=0,Paused=1,Completed=2 */ + status?: TaskStatus + /** + * 创建时间 + * @format date-time + */ + createTime?: string + /** + * 最后运行时间 + * @format date-time + */ + lastRunTime?: string + /** + * 当前运行到第几轮 + * @format int32 + */ + currentRound?: number + /** + * 错次数 + * @format int32 + */ + errorTimes?: number +} + +/** + * SEC=1,RunOnDay=11,RunOnWeek=12,RunOnMonth=13,Custom=21 + * @format int32 + */ +export type TaskInterval = 1 | 11 | 12 | 13 | 21 + +export interface TaskLog { + taskId?: string | null + /** @format int32 */ + round?: number + /** @format int64 */ + elapsedMilliseconds?: number + success?: boolean + exception?: string | null + remark?: string | null + /** @format date-time */ + createTime?: string +} + +/** 任务日志分页请求 */ +export interface TaskLogGetPageInput { + /** 任务Id */ + taskId?: string | null +} + +/** + * Running=0,Paused=1,Completed=2 + * @format int32 + */ +export type TaskStatus = 0 | 1 | 2 + +/** 修改 */ +export interface TaskUpdateInput { + /** 任务标题 */ + topic?: string | null + /** 任务参数 */ + body?: string | null + /** + * 任务执行多少轮,-1为永久循环 + * @format int32 + */ + round?: number + /** SEC=1,RunOnDay=11,RunOnWeek=12,RunOnMonth=13,Custom=21 */ + interval?: TaskInterval + /** 定时参数 60,60,60,120,120,1200,1200 */ + intervalArgument?: string | null + /** 报警邮件,多个邮件地址则逗号分隔 */ + alarmEmail?: string | null + /** + * 失败重试次数 + * @format int32 + */ + failRetryCount?: number | null + /** + * 失败重试间隔(秒) + * @format int32 + */ + failRetryInterval?: number | null + /** + * 任务Id + * @minLength 1 + */ + id: string +} + +/** 添加 */ +export interface TenantAddInput { + /** + * 租户Id + * @format int64 + */ + id?: number + /** + * 企业名称 + * @minLength 1 + */ + name: string + /** 编码 */ + code?: string | null + /** 套餐Ids */ + pkgIds?: number[] | null + /** 姓名 */ + realName?: string | null + /** + * 账号 + * @minLength 1 + */ + userName: string + /** 密码 */ + password?: string | null + /** 手机号码 */ + phone?: string | null + /** 邮箱地址 */ + email?: string | null + /** 域名 */ + domain?: string | null + /** 数据库注册键 */ + dbKey?: string | null + /** MySql=0,SqlServer=1,PostgreSQL=2,Oracle=3,Sqlite=4,OdbcOracle=5,OdbcSqlServer=6,OdbcMySql=7,OdbcPostgreSQL=8,Odbc=9,MsAccess=11,Dameng=12,ShenTong=14,KingbaseES=15,Firebird=16,Custom=17,ClickHouse=18,GBase=19,QuestDb=20,Xugu=21,CustomOracle=22,CustomSqlServer=23,CustomMySql=24,CustomPostgreSQL=25,DuckDB=26,TDengine=27 */ + dbType?: DataType + /** 连接字符串 */ + connectionString?: string | null + /** 启用 */ + enabled?: boolean + /** 说明 */ + description?: string | null +} + +/** 租户 */ +export interface TenantEntity { + /** + * 主键Id + * @format int64 + */ + id?: number + /** + * 创建者用户Id + * @format int64 + */ + createdUserId?: number | null + /** + * 创建者用户名 + * @maxLength 60 + */ + createdUserName?: string | null + /** + * 创建者姓名 + * @maxLength 60 + */ + createdUserRealName?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** + * 修改者用户Id + * @format int64 + */ + modifiedUserId?: number | null + /** + * 修改者用户名 + * @maxLength 60 + */ + modifiedUserName?: string | null + /** + * 修改者姓名 + * @maxLength 60 + */ + modifiedUserRealName?: string | null + /** + * 修改时间 + * @format date-time + */ + modifiedTime?: string | null + /** 是否删除 */ + isDeleted?: boolean + /** + * 授权用户 + * @format int64 + */ + userId?: number + /** 用户 */ + user?: UserEntity + /** + * 授权部门 + * @format int64 + */ + orgId?: number + /** 组织架构 */ + org?: OrgEntity + /** 租户类型:Platform=1,Tenant=2 */ + tenantType?: TenantType + /** 域名 */ + domain?: string | null + /** 数据库注册键 */ + dbKey?: string | null + /** MySql=0,SqlServer=1,PostgreSQL=2,Oracle=3,Sqlite=4,OdbcOracle=5,OdbcSqlServer=6,OdbcMySql=7,OdbcPostgreSQL=8,Odbc=9,MsAccess=11,Dameng=12,ShenTong=14,KingbaseES=15,Firebird=16,Custom=17,ClickHouse=18,GBase=19,QuestDb=20,Xugu=21,CustomOracle=22,CustomSqlServer=23,CustomMySql=24,CustomPostgreSQL=25,DuckDB=26,TDengine=27 */ + dbType?: DataType + /** 连接字符串 */ + connectionString?: string | null + /** 启用 */ + enabled?: boolean + /** 说明 */ + description?: string | null + /** 套餐列表 */ + pkgs?: PkgEntity[] | null +} + +export interface TenantGetOutput { + /** + * 企业名称 + * @minLength 1 + */ + name: string + /** 编码 */ + code?: string | null + /** 姓名 */ + realName?: string | null + /** + * 账号 + * @minLength 1 + */ + userName: string + /** 密码 */ + password?: string | null + /** 手机号码 */ + phone?: string | null + /** 邮箱地址 */ + email?: string | null + /** 域名 */ + domain?: string | null + /** 数据库注册键 */ + dbKey?: string | null + /** MySql=0,SqlServer=1,PostgreSQL=2,Oracle=3,Sqlite=4,OdbcOracle=5,OdbcSqlServer=6,OdbcMySql=7,OdbcPostgreSQL=8,Odbc=9,MsAccess=11,Dameng=12,ShenTong=14,KingbaseES=15,Firebird=16,Custom=17,ClickHouse=18,GBase=19,QuestDb=20,Xugu=21,CustomOracle=22,CustomSqlServer=23,CustomMySql=24,CustomPostgreSQL=25,DuckDB=26,TDengine=27 */ + dbType?: DataType + /** 连接字符串 */ + connectionString?: string | null + /** 启用 */ + enabled?: boolean + /** 说明 */ + description?: string | null + /** + * 租户Id + * @format int64 + */ + id: number + /** 套餐列表 */ + pkgs?: PkgEntity[] | null + /** 套餐Id列表 */ + pkgIds?: number[] | null +} + +/** 租户分页请求 */ +export interface TenantGetPageInput { + /** 企业名称 */ + name?: string | null +} + +/** 租户分页响应 */ +export interface TenantGetPageOutput { + /** + * 主键 + * @format int64 + */ + id?: number + /** 企业名称 */ + name?: string | null + /** 企业编码 */ + code?: string | null + pkgs?: PkgEntity[] | null + /** 套餐 */ + pkgNames?: string[] | null + /** 姓名 */ + realName?: string | null + /** 账号 */ + userName?: string | null + /** 手机号码 */ + phone?: string | null + /** 邮箱地址 */ + email?: string | null + /** MySql=0,SqlServer=1,PostgreSQL=2,Oracle=3,Sqlite=4,OdbcOracle=5,OdbcSqlServer=6,OdbcMySql=7,OdbcPostgreSQL=8,Odbc=9,MsAccess=11,Dameng=12,ShenTong=14,KingbaseES=15,Firebird=16,Custom=17,ClickHouse=18,GBase=19,QuestDb=20,Xugu=21,CustomOracle=22,CustomSqlServer=23,CustomMySql=24,CustomPostgreSQL=25,DuckDB=26,TDengine=27 */ + dbType?: DataType + /** 数据库名称 */ + dbTypeName?: string | null + /** 启用 */ + enabled?: boolean + /** 说明 */ + description?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null +} + +/** 设置启用 */ +export interface TenantSetEnableInput { + /** + * 租户Id + * @format int64 + */ + tenantId?: number + /** 是否启用 */ + enabled?: boolean +} + +/** + * 租户类型:Platform=1,Tenant=2 + * @format int32 + */ +export type TenantType = 1 | 2 + +/** 修改 */ +export interface TenantUpdateInput { + /** + * 企业名称 + * @minLength 1 + */ + name: string + /** 编码 */ + code?: string | null + /** 套餐Ids */ + pkgIds?: number[] | null + /** 姓名 */ + realName?: string | null + /** + * 账号 + * @minLength 1 + */ + userName: string + /** 密码 */ + password?: string | null + /** 手机号码 */ + phone?: string | null + /** 邮箱地址 */ + email?: string | null + /** 域名 */ + domain?: string | null + /** 数据库注册键 */ + dbKey?: string | null + /** MySql=0,SqlServer=1,PostgreSQL=2,Oracle=3,Sqlite=4,OdbcOracle=5,OdbcSqlServer=6,OdbcMySql=7,OdbcPostgreSQL=8,Odbc=9,MsAccess=11,Dameng=12,ShenTong=14,KingbaseES=15,Firebird=16,Custom=17,ClickHouse=18,GBase=19,QuestDb=20,Xugu=21,CustomOracle=22,CustomSqlServer=23,CustomMySql=24,CustomPostgreSQL=25,DuckDB=26,TDengine=27 */ + dbType?: DataType + /** 连接字符串 */ + connectionString?: string | null + /** 启用 */ + enabled?: boolean + /** 说明 */ + description?: string | null + /** + * 租户Id + * @format int64 + */ + id: number +} + +/** 令牌信息 */ +export interface TokenInfo { + /** 访问令牌 */ + accessToken?: string | null + /** + * 访问令牌的过期时间 + * @format date-time + */ + accessTokenExpiresAt?: string + /** + * 访问令牌的生命周期(以秒为单位) + * @format int32 + */ + accessTokenLifeTime?: number + /** 刷新令牌 */ + refreshToken?: string | null + /** + * 刷新令牌的过期时间 + * @format date-time + */ + refreshTokenExpiresAt?: string + /** + * 刷新令牌的生命周期(以秒为单位) + * @format int32 + */ + refreshTokenLifeTime?: number + /** + * 创建令牌信息时间戳 + * @format int64 + */ + timestamp?: number +} + +export interface Track { + /** @format int32 */ + x?: number + /** @format int32 */ + y?: number + /** @format int32 */ + t?: number +} + +/** 添加 */ +export interface UserAddInput { + /** + * 用户Id + * @format int64 + */ + id?: number + /** + * 账号 + * @minLength 1 + */ + userName: string + /** + * 姓名 + * @minLength 1 + */ + name: string + /** 手机号 */ + mobile?: string | null + /** 邮箱 */ + email?: string | null + /** 角色Ids */ + roleIds?: number[] | null + /** + * 直属主管Id + * @format int64 + */ + managerUserId?: number | null + /** 直属主管姓名 */ + managerUserName?: string | null + /** 员工添加 */ + staff: StaffAddInput + /** 所属部门Ids */ + orgIds?: number[] | null + /** + * 主属部门Id + * @format int64 + */ + orgId?: number + /** 密码 */ + password?: string | null + /** 启用 */ + enabled?: boolean +} + +/** 添加会员 */ +export interface UserAddMemberInput { + /** + * 会员Id + * @format int64 + */ + id?: number + /** + * 账号 + * @minLength 1 + */ + userName: string + /** 姓名 */ + name?: string | null + /** 手机号 */ + mobile?: string | null + /** 邮箱 */ + email?: string | null + /** + * 密码 + * @minLength 1 + */ + password: string + /** 用户状态:WaitChangePasssword=2,WaitActive=3 */ + status?: UserStatus +} + +/** 批量设置部门 */ +export interface UserBatchSetOrgInput { + /** 用户Id列表 */ + userIds?: number[] | null + /** 所属部门Ids */ + orgIds?: number[] | null + /** + * 主属部门Id + * @format int64 + */ + orgId?: number +} + +/** 修改密码 */ +export interface UserChangePasswordInput { + /** + * 旧密码 + * @minLength 1 + */ + oldPassword: string + /** + * 新密码 + * @minLength 1 + */ + newPassword: string + /** + * 确认新密码 + * @minLength 1 + */ + confirmPassword: string +} + +/** 用户 */ +export interface UserEntity { + /** + * 主键Id + * @format int64 + */ + id?: number + /** + * 创建者用户Id + * @format int64 + */ + createdUserId?: number | null + /** + * 创建者用户名 + * @maxLength 60 + */ + createdUserName?: string | null + /** + * 创建者姓名 + * @maxLength 60 + */ + createdUserRealName?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** + * 修改者用户Id + * @format int64 + */ + modifiedUserId?: number | null + /** + * 修改者用户名 + * @maxLength 60 + */ + modifiedUserName?: string | null + /** + * 修改者姓名 + * @maxLength 60 + */ + modifiedUserRealName?: string | null + /** + * 修改时间 + * @format date-time + */ + modifiedTime?: string | null + /** 是否删除 */ + isDeleted?: boolean + /** + * 租户Id + * @format int64 + */ + tenantId?: number | null + /** 租户 */ + tenant?: TenantEntity + /** 账号 */ + userName?: string | null + /** 密码 */ + password?: string | null + /** 密码加密类型:MD5Encrypt32=0,PasswordHasher=1 */ + passwordEncryptType?: PasswordEncryptType + /** 姓名 */ + name?: string | null + /** 手机号 */ + mobile?: string | null + /** 邮箱 */ + email?: string | null + /** + * 主属部门Id + * @format int64 + */ + orgId?: number + /** 组织架构 */ + org?: OrgEntity + /** + * 直属主管Id + * @format int64 + */ + managerUserId?: number | null + /** 用户 */ + managerUser?: UserEntity + /** 昵称 */ + nickName?: string | null + /** 头像 */ + avatar?: string | null + /** 用户状态:WaitChangePasssword=2,WaitActive=3 */ + status?: UserStatus + /** 用户类型:Member=0,DefaultUser=1,TenantAdmin=10,PlatformAdmin=100 */ + type?: UserType + /** + * 最后登录时间 + * @format date-time + */ + lastLoginTime?: string | null + /** 最后登录IP */ + lastLoginIP?: string | null + /** 最后登录国家 */ + lastLoginCountry?: string | null + /** 最后登录省份 */ + lastLoginProvince?: string | null + /** 最后登录城市 */ + lastLoginCity?: string | null + /** 启用 */ + enabled?: boolean + /** 角色列表 */ + roles?: RoleEntity[] | null + /** 部门列表 */ + orgs?: OrgEntity[] | null + /** 用户员工 */ + staff?: UserStaffEntity +} + +/** 用户基本信息 */ +export interface UserGetBasicOutput { + /** 头像 */ + avatar?: string | null + /** 姓名 */ + name?: string | null + /** 昵称 */ + nickName?: string | null + /** 手机号 */ + mobile?: string | null + /** 邮箱 */ + email?: string | null + /** + * 最后登录时间 + * @format date-time + */ + lastLoginTime?: string | null + /** 最后登录IP */ + lastLoginIP?: string | null + /** 最后登录国家 */ + lastLoginCountry?: string | null + /** 最后登录省份 */ + lastLoginProvince?: string | null + /** 最后登录城市 */ + lastLoginCity?: string | null +} + +/** 已删除用户分页查询响应 */ +export interface UserGetDeletedUserPageOutput { + /** + * 主键Id + * @format int64 + */ + id?: number + /** 账号 */ + userName?: string | null + /** 姓名 */ + name?: string | null + /** 手机号 */ + mobile?: string | null + /** 邮箱 */ + email?: string | null + /** 用户类型:Member=0,DefaultUser=1,TenantAdmin=10,PlatformAdmin=100 */ + type?: UserType + roles?: RoleEntity[] | null + /** 角色 */ + roleNames?: string | null + /** 启用 */ + enabled?: boolean + /** 性别:Unknown(未知)=0,Male(男)=1,Female(女)=2 */ + sex?: Sex + /** + * 主属部门Id + * @format int64 + */ + orgId?: number + /** 主属部门 */ + orgPath?: string | null + /** 部门列表 */ + orgs?: OrgEntity[] | null + /** 所属部门Id列表 */ + orgIds?: number[] | null + /** 所属部门 */ + orgPaths?: string | null + /** 创建者用户名 */ + createdUserName?: string | null + /** 创建者姓名 */ + createdUserRealName?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** 修改者用户名 */ + modifiedUserName?: string | null + /** 修改者姓名 */ + modifiedUserRealName?: string | null + /** + * 修改时间 + * @format date-time + */ + modifiedTime?: string | null +} + +/** 用户 */ +export interface UserGetOutput { + /** + * 账号 + * @minLength 1 + */ + userName: string + /** + * 姓名 + * @minLength 1 + */ + name: string + /** 手机号 */ + mobile?: string | null + /** 邮箱 */ + email?: string | null + /** + * 直属主管Id + * @format int64 + */ + managerUserId?: number | null + /** 直属主管姓名 */ + managerUserName?: string | null + /** 员工添加 */ + staff: StaffAddInput + /** + * 主键Id + * @format int64 + */ + id: number + /** 角色Id列表 */ + roleIds?: number[] | null +} + +/** 用户分页查询条件 */ +export interface UserGetPageInput { + /** + * 部门Id + * @format int64 + */ + orgId?: number | null +} + +/** 用户分页查询响应 */ +export interface UserGetPageOutput { + /** + * 主键Id + * @format int64 + */ + id?: number + /** 账号 */ + userName?: string | null + /** 姓名 */ + name?: string | null + /** 手机号 */ + mobile?: string | null + /** 邮箱 */ + email?: string | null + /** 用户类型:Member=0,DefaultUser=1,TenantAdmin=10,PlatformAdmin=100 */ + type?: UserType + roles?: RoleEntity[] | null + /** 角色 */ + roleNames?: string | null + /** 是否主管 */ + isManager?: boolean + /** 启用 */ + enabled?: boolean + /** 在线 */ + online?: boolean + /** 性别:Unknown(未知)=0,Male(男)=1,Female(女)=2 */ + sex?: Sex + /** + * 主属部门Id + * @format int64 + */ + orgId?: number + /** 主属部门 */ + orgPath?: string | null + /** 部门列表 */ + orgs?: OrgEntity[] | null + /** 所属部门Id列表 */ + orgIds?: number[] | null + /** 所属部门 */ + orgPaths?: string | null + /** 创建者用户名 */ + createdUserName?: string | null + /** 创建者姓名 */ + createdUserRealName?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** 修改者用户名 */ + modifiedUserName?: string | null + /** 修改者姓名 */ + modifiedUserRealName?: string | null + /** + * 修改时间 + * @format date-time + */ + modifiedTime?: string | null +} + +/** 用户权限 */ +export interface UserGetPermissionOutput { + /** 接口列表 */ + apis?: ApiModel[] | null + /** 权限点编码列表 */ + codes?: string[] | null +} + +/** 重置密码 */ +export interface UserResetPasswordInput { + /** + * 主键Id + * @format int64 + */ + id?: number + /** 密码 */ + password?: string | null +} + +/** 恢复 */ +export interface UserRestoreInput { + /** 用户Id列表 */ + userIds?: number[] | null +} + +/** 设置启用 */ +export interface UserSetEnableInput { + /** + * 用户Id + * @format int64 + */ + userId?: number + /** 是否启用 */ + enabled?: boolean +} + +/** 设置主管 */ +export interface UserSetManagerInput { + /** + * 用户Id + * @format int64 + */ + userId?: number + /** + * 部门Id + * @format int64 + */ + orgId?: number + /** 是否主管 */ + isManager?: boolean +} + +/** 用户员工 */ +export interface UserStaffEntity { + /** + * 主键Id + * @format int64 + */ + id?: number + /** + * 创建者用户Id + * @format int64 + */ + createdUserId?: number | null + /** + * 创建者用户名 + * @maxLength 60 + */ + createdUserName?: string | null + /** + * 创建者姓名 + * @maxLength 60 + */ + createdUserRealName?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** + * 修改者用户Id + * @format int64 + */ + modifiedUserId?: number | null + /** + * 修改者用户名 + * @maxLength 60 + */ + modifiedUserName?: string | null + /** + * 修改者姓名 + * @maxLength 60 + */ + modifiedUserRealName?: string | null + /** + * 修改时间 + * @format date-time + */ + modifiedTime?: string | null + /** 是否删除 */ + isDeleted?: boolean + /** + * 租户Id + * @format int64 + */ + tenantId?: number | null + /** 职位 */ + position?: string | null + /** 工号 */ + jobNumber?: string | null + /** 性别:Unknown(未知)=0,Male(男)=1,Female(女)=2 */ + sex?: Sex + /** + * 入职时间 + * @format date-time + */ + entryTime?: string | null + /** 企业微信名片 */ + workWeChatCard?: string | null + /** 个人简介 */ + introduce?: string | null +} + +/** + * 用户状态:WaitChangePasssword=2,WaitActive=3 + * @format int32 + */ +export type UserStatus = 2 | 3 + +/** + * 用户类型:Member=0,DefaultUser=1,TenantAdmin=10,PlatformAdmin=100 + * @format int32 + */ +export type UserType = 0 | 1 | 10 | 100 + +/** 更新基本信息 */ +export interface UserUpdateBasicInput { + /** + * 姓名 + * @minLength 1 + */ + name: string + /** 昵称 */ + nickName?: string | null +} + +/** 修改 */ +export interface UserUpdateInput { + /** + * 账号 + * @minLength 1 + */ + userName: string + /** + * 姓名 + * @minLength 1 + */ + name: string + /** 手机号 */ + mobile?: string | null + /** 邮箱 */ + email?: string | null + /** 角色Ids */ + roleIds?: number[] | null + /** + * 直属主管Id + * @format int64 + */ + managerUserId?: number | null + /** 直属主管姓名 */ + managerUserName?: string | null + /** 员工添加 */ + staff: StaffAddInput + /** + * 主键Id + * @format int64 + */ + id: number +} + +/** 修改会员 */ +export interface UserUpdateMemberInput { + /** + * 账号 + * @minLength 1 + */ + userName: string + /** 姓名 */ + name?: string | null + /** 手机号 */ + mobile?: string | null + /** 邮箱 */ + email?: string | null + /** + * 主键Id + * @format int64 + */ + id: number +} + +export interface ValidateResult { + /** Success=0,ValidateFail=1,Timeout=2 */ + result?: ValidateResultType + message?: string | null +} + +/** + * Success=0,ValidateFail=1,Timeout=2 + * @format int32 + */ +export type ValidateResultType = 0 | 1 | 2 + +/** 添加 */ +export interface ViewAddInput { + /** 平台 */ + platform?: string | null + /** + * 所属节点 + * @format int64 + */ + parentId?: number + /** 视图命名 */ + name?: string | null + /** 视图名称 */ + label?: string | null + /** 视图路径 */ + path?: string | null + /** 说明 */ + description?: string | null + /** 缓存 */ + cache?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number | null + /** 启用 */ + enabled?: boolean +} + +/** 视图管理 */ +export interface ViewEntity { + /** + * 主键Id + * @format int64 + */ + id?: number + /** + * 创建者用户Id + * @format int64 + */ + createdUserId?: number | null + /** + * 创建者用户名 + * @maxLength 60 + */ + createdUserName?: string | null + /** + * 创建者姓名 + * @maxLength 60 + */ + createdUserRealName?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** + * 修改者用户Id + * @format int64 + */ + modifiedUserId?: number | null + /** + * 修改者用户名 + * @maxLength 60 + */ + modifiedUserName?: string | null + /** + * 修改者姓名 + * @maxLength 60 + */ + modifiedUserRealName?: string | null + /** + * 修改时间 + * @format date-time + */ + modifiedTime?: string | null + /** 是否删除 */ + isDeleted?: boolean + /** 平台 */ + platform?: string | null + /** + * 所属节点 + * @format int64 + */ + parentId?: number + /** 视图命名 */ + name?: string | null + /** 视图名称 */ + label?: string | null + /** 视图路径 */ + path?: string | null + /** 说明 */ + description?: string | null + /** 缓存 */ + cache?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean + childs?: ViewEntity[] | null +} + +/** 视图查询 */ +export interface ViewGetListInput { + /** 平台 */ + platform?: string | null + /** 视图命名 */ + name?: string | null + /** 视图名称 */ + label?: string | null + /** 视图路径 */ + path?: string | null +} + +/** 视图列表 */ +export interface ViewGetListOutput { + /** + * 视图Id + * @format int64 + */ + id?: number + /** + * 视图父级 + * @format int64 + */ + parentId?: number | null + /** 平台 */ + platform?: string | null + /** 视图命名 */ + name?: string | null + /** 视图名称 */ + label?: string | null + /** 视图路径 */ + path?: string | null + /** 缓存 */ + cache?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** 启用 */ + enabled?: boolean + /** 说明 */ + description?: string | null +} + +/** 视图 */ +export interface ViewGetOutput { + /** 平台 */ + platform?: string | null + /** + * 所属节点 + * @format int64 + */ + parentId?: number + /** 视图命名 */ + name?: string | null + /** 视图名称 */ + label?: string | null + /** 视图路径 */ + path?: string | null + /** 说明 */ + description?: string | null + /** 缓存 */ + cache?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number | null + /** 启用 */ + enabled?: boolean + /** + * 视图Id + * @format int64 + */ + id: number +} + +/** 视图同步 */ +export interface ViewSyncInput { + /** 视图列表 */ + views?: ViewSyncModel[] | null +} + +/** 视图同步模型 */ +export interface ViewSyncModel { + /** 视图命名 */ + name?: string | null + /** 地址 */ + path?: string | null + /** 视图名称 */ + label?: string | null + /** 说明 */ + description?: string | null + /** 缓存 */ + cache?: boolean +} + +/** 修改 */ +export interface ViewUpdateInput { + /** 平台 */ + platform?: string | null + /** + * 所属节点 + * @format int64 + */ + parentId?: number + /** 视图命名 */ + name?: string | null + /** 视图名称 */ + label?: string | null + /** 视图路径 */ + path?: string | null + /** 说明 */ + description?: string | null + /** 缓存 */ + cache?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number | null + /** 启用 */ + enabled?: boolean + /** + * 视图Id + * @format int64 + */ + id: number +} + +/** WebSocket请求 */ +export interface WebSocketPreConnectInput { + /** + * WebSocketId + * @format int64 + */ + websocketId?: number | null +} + +/** 在线教程 */ +export interface OnlineGetOutput { + /** + * 主键Id + * @format int64 + */ + id: number + /** 网站名称 */ + websiteName: string + /** 主标题 */ + primaryTitle: string + /** 副标题 */ + secondaryTitle: string + /** 联系人 */ + contactPerson: string + /** 教程地址 */ + tutorialUrl: string + /** 适用站点 */ + applicableSite: string + /** 功能介绍 */ + functionIntro: string + /** 关键词 */ + keywords: string + /** 网站地址 */ + websiteUrl: string + /** + * 创建时间 + * @format date-time + */ + createdTime: string + /** + * 修改时间 + * @format date-time + */ + modifiedTime: string +} + +/** 结果输出 */ +export interface ResultOutputOnlineGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 在线教程 */ + data?: OnlineGetOutput +} + +/** 在线教程分页请求 */ +export interface OnlineGetPageInput { + /** 网站名称 */ + websiteName?: string | null + /** 一级标题 */ + primaryTitle?: string | null + /** 联系人 */ + contactPerson?: string | null + /** 适用site */ + applicableSite?: string | null + /** 关键词 */ + keywords?: string | null + /** + * 创建开始时间 + * @format date-time + */ + startCreatedTime?: string | null + /** + * 创建结束时间 + * @format date-time + */ + endCreatedTime?: string | null +} + +/** 分页信息输入 */ +export interface PageInputOnlineGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 在线教程分页请求 */ + filter?: OnlineGetPageInput +} + +/** 分页信息输出 */ +export interface PageOutputOnlineGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: OnlineGetOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputPageOutputOnlineGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputOnlineGetPageOutput +} + +export interface ResultOutputListOutputOnlineGetListOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: OnlineGetOutput[] | null +} + +/** 添加 */ +export interface OnlineAddInput { + /** 网站名称 */ + websiteName: string + /** 主标题 */ + primaryTitle: string + /** 副标题 */ + secondaryTitle: string + /** 联系人 */ + contactPerson: string + /** 教程地址 */ + tutorialUrl: string + /** 适用站点 */ + applicableSite: string + /** 功能介绍 */ + functionIntro: string + /** 关键词 */ + keywords: string + /** 网站地址 */ + websiteUrl: string +} + +/** 修改 */ +export interface OnlineUpdateInput extends OnlineAddInput { + /** + * 主键Id + * @format int64 + */ + id: number +} + +/** Remote */ +export interface RemoteGetOutput { + /** + * 主键Id + * @format int64 + */ + id: number + /** 图片地址 */ + imgUrl: string + /** 站点 */ + site: string + /** 名称 */ + name: string + /** IP地址 */ + ipAddress: string + /** 域名 */ + domain: string + /** 用户名 */ + username: string + /** + * 创建者Id + * @format int64 + */ + createdUserId: number + /** 创建者名称 */ + createdUserName: string + /** 创建者真实名称 */ + createdUserRealName: string + /** + * 创建时间 + * @format date-time + */ + createdTime: string + /** + * 修改者Id + * @format int64 + */ + modifiedUserId: number + /** 修改者名称 */ + modifiedUserName: string + /** 修改者真实名称 */ + modifiedUserRealName: string + /** + * 修改时间 + * @format date-time + */ + modifiedTime: string + /** 软删除标记 */ + isDeleted: boolean + + isHovered: boolean + + isConnecting: boolean +} + +/** Remote分页请求 */ +export interface RemoteGetPageInput { + /** 名称 */ + name?: string | null + /** 站点 */ + site?: string | null + /** IP地址 */ + ipAddress?: string | null + /** 域名 */ + domain?: string | null + /** + * 创建开始时间 + * @format date-time + */ + startCreatedTime?: string | null + /** + * 创建结束时间 + * @format date-time + */ + endCreatedTime?: string | null +} + +/** 分页信息输入 */ +export interface PageInputRemoteGetPageInput { + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** Remote分页请求 */ + filter?: RemoteGetPageInput +} + +/** 分页信息输出 */ +export interface PageOutputRemoteGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: RemoteGetOutput[] | null +} + +/** 结果输出 */ +export interface ResultOutputPageOutputRemoteGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputRemoteGetPageOutput +} + +/** 添加 */ +export interface RemoteAddInput { + /** 图片地址 */ + imgUrl: string + /** 站点 */ + site: string + /** 名称 */ + name: string + /** IP地址 */ + ipAddress: string + /** 域名 */ + domain: string + /** 用户名 */ + username: string +} + +/** 修改 */ +export interface RemoteUpdateInput extends RemoteAddInput { + /** + * 主键Id + * @format int64 + */ + id: number +} + +/** 远程连接输入 */ +export interface RemoteConnectInput { + /** + * 主键Id + * @format int64 + */ + id: number +} + +/** 远程连接输出 */ +export interface RemoteConnectOutput { + /** 连接状态 */ + status: boolean + /** 连接消息 */ + message: string + /** 连接时间 */ + connectedTime: string +} + +/** 热门点击网站输出 */ +export interface TopClickedWebsiteOutput { + /** + * 网站Id + * @format int64 + */ + webId: number + /** 网站名称 */ + webName: string | null + /** 网站地址 */ + websiteUrl: string | null + /** 主标题 */ + primaryTitle: string | null + /** 副标题 */ + secondaryTitle: string | null + /** 功能介绍 */ + functionIntro: string | null + /** + * 点击次数 + * @format int64 + */ + pageClicks: number + /** + * 网页类型 1:在线应用 3:模板中心 5:在线看板 + * @format int32 + */ + webType: number + /** + * 最后点击时间 + * @format date-time + */ + lastClickTime: string | null + + contactPerson: string | null + + tutorialUrl: string | null + + tagName: string | null + +} + +/** 结果输出 */ +export interface ResultOutputListTopClickedWebsiteOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 数据 */ + data?: TopClickedWebsiteOutput[] | null +} + +export interface CustomNavigationInput { + json: string | null +} + +/** 看板添加 */ +export interface BoardAddInput { + /** 看板名称 */ + name?: string | null + /** 功能简介 */ + description?: string | null + /** 关键词 */ + keywords?: string | null + /** 网址 */ + url?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number +} + +/** 看板查询输出 */ +export interface BoardGetOutput { + /** 看板名称 */ + name?: string | null + /** 功能简介 */ + description?: string | null + /** 关键词 */ + keywords?: string | null + /** 网址 */ + url?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + + //SafetyVerification + safety?: boolean + + /** + * 主键Id + * @format int64 + */ + id: number +} + +/** 看板分页查询输入 */ +export interface BoardGetPageInput { + /** 看板名称 */ + name?: string | null + /** 关键词 */ + keywords?: string | null +} + +/** 看板分页输出 */ +export interface BoardGetPageOutput { + /** + * 主键Id + * @format int64 + */ + id?: number + /** 看板名称 */ + name?: string | null + /** 功能简介 */ + description?: string | null + /** 关键词 */ + keywords?: string | null + /** 网址 */ + url?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** + * 修改时间 + * @format date-time + */ + modifiedTime?: string | null +} + +/** 看板修改 */ +export interface BoardUpdateInput { + /** 看板名称 */ + name?: string | null + /** 功能简介 */ + description?: string | null + /** 关键词 */ + keywords?: string | null + /** 网址 */ + url?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + + //SafetyVerification + safety?: boolean + + /** + * 主键Id + * @format int64 + */ + id: number +} + +/** 看板分页信息输入 */ +export interface PageInputBoardGetPageInput { + dynamicFilter?: DynamicFilterInfo + /** 排序列表 */ + sortList?: SortInput[] | null + /** + * 当前页标 + * @format int32 + */ + currentPage?: number + /** + * 每页大小 + * @format int32 + */ + pageSize?: number + /** 看板分页请求 */ + filter?: BoardGetPageInput +} + +/** 看板分页信息输出 */ +export interface PageOutputBoardGetPageOutput { + /** + * 数据总数 + * @format int64 + */ + total?: number + /** 数据 */ + list?: BoardGetPageOutput[] | null +} + +/** 看板查询结果输出 */ +export interface ResultOutputBoardGetOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 看板信息 */ + data?: BoardGetOutput +} + +/** 看板分页结果输出 */ +export interface ResultOutputPageOutputBoardGetPageOutput { + /** 是否成功标记 */ + success?: boolean + /** 编码 */ + code?: string | null + /** 消息 */ + msg?: string | null + /** 分页信息输出 */ + data?: PageOutputBoardGetPageOutput +} + +/** 看板用户列表输出 */ +export interface BoardGetBoardUserListOutput { + /** + * 主键Id + * @format int64 + */ + id?: number + + /** 用户Id */ + userId?: number + /** 姓名 */ + name?: string | null + /** 手机号 */ + mobile?: string | null + /** 邮箱 */ + email?: string | null + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null +} + +/** 看板添加用户输入 */ +export interface BoardAddBoardUserListInput { + /** + * 看板Id + * @format int64 + */ + boardId?: number + /** 用户Id列表 */ + userIds?: number[] | null +} + +/** 看板移除用户输入 */ +export interface BoardRemoveBoardUserInput { + /** + * 看板Id + * @format int64 + */ + boardId?: number + /** 用户Id列表 */ + userIds?: number[] | null +} + +/** 根据用户ID获取看板列表输出 */ +export interface BoardGetBoardListByUserIdOutput { + /** + * 看板Id + * @format int64 + */ + id?: number + /** 看板名称 */ + name?: string | null + /** 功能简介 */ + description?: string | null + /** 关键词 */ + keywords?: string | null + /** 网址 */ + url?: string | null + /** 启用 */ + enabled?: boolean + /** + * 排序 + * @format int32 + */ + sort?: number + /** + * 创建时间 + * @format date-time + */ + createdTime?: string | null + /** + * 加入时间 + * @format date-time + */ + joinTime?: string | null +} + + diff --git a/zhontai.ui.admin.vue3/src/api/admin/enum-contracts.ts b/zhontai.ui.admin.vue3/src/api/admin/enum-contracts.ts new file mode 100644 index 0000000..47c4dcf --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/enum-contracts.ts @@ -0,0 +1,124 @@ +/** 账号类型 */ +export const AccountType = { + UserName: { name: 'UserName', value: 1, desc: '账号' }, + Mobile: { name: 'Mobile', value: 2, desc: '手机' }, + Email: { name: 'Email', value: 3, desc: '邮箱' }, +} + +/** 密码加密类型 */ +export const PasswordEncryptType = { + MD5Encrypt32: { name: 'MD5Encrypt32', value: 0, desc: '32位MD5加密' }, + PasswordHasher: { name: 'PasswordHasher', value: 1, desc: '标准标识密码哈希' }, +} + +/** 用户状态 */ +export const UserStatus = { + WaitChangePasssword: { name: 'WaitChangePasssword', value: 2, desc: '待修改密码' }, + WaitActive: { name: 'WaitActive', value: 3, desc: '待激活' }, +} + +/** 性别 */ +export const Sex = { + Unknown: { name: 'Unknown', value: 0, desc: '未知' }, + Male: { name: 'Male', value: 1, desc: '男' }, + Female: { name: 'Female', value: 2, desc: '女' }, +} + +/** 角色类型 */ +export const RoleType = { + Group: { name: 'Group', value: 1, desc: '分组' }, + Role: { name: 'Role', value: 2, desc: '角色' }, +} + +/** 地区级别 */ +export const RegionLevel = { + Province: { name: 'Province', value: 1, desc: '省份' }, + City: { name: 'City', value: 2, desc: '城市' }, + County: { name: 'County', value: 3, desc: '县/区' }, + Town: { name: 'Town', value: 4, desc: '镇/乡' }, + Vilage: { name: 'Vilage', value: 5, desc: '村/社区' }, +} + +/** 权限类型 */ +export const PermissionType = { + Group: { name: 'Group', value: 1, desc: '分组' }, + Menu: { name: 'Menu', value: 2, desc: '菜单' }, + Dot: { name: 'Dot', value: 3, desc: '权限点' }, +} + +/** 消息状态 */ +export const MsgStatusEnum = { + Published: { name: 'Published', value: 2, desc: '已发布' }, + Scheduled: { name: 'Scheduled', value: 3, desc: '定时发布' }, +} + +/** 文档类型 */ +export const DocType = { + Group: { name: 'Group', value: 1, desc: '分组' }, + Markdown: { name: 'Markdown', value: 2, desc: 'Markdown文档' }, +} + +/** 缓存类型 */ +export const CacheType = { + Memory: { name: 'Memory', value: 0, desc: '内存缓存' }, + Redis: { name: 'Redis', value: 1, desc: 'Redis缓存' }, +} + +/** 租户类型 */ +export const TenantType = { + Platform: { name: 'Platform', value: 1, desc: '平台' }, + Tenant: { name: 'Tenant', value: 2, desc: '租户' }, +} + +/** 数据范围 */ +export const DataScope = { + All: { name: 'All', value: 1, desc: '全部' }, + DeptWithChild: { name: 'DeptWithChild', value: 2, desc: '本部门和下级部门' }, + Dept: { name: 'Dept', value: 3, desc: '本部门' }, + Self: { name: 'Self', value: 4, desc: '本人数据' }, + Custom: { name: 'Custom', value: 5, desc: '指定部门' }, +} + +/** 用户类型 */ +export const UserType = { + Member: { name: 'Member', value: 0, desc: '会员' }, + DefaultUser: { name: 'DefaultUser', value: 1, desc: '普通用户' }, + TenantAdmin: { name: 'TenantAdmin', value: 10, desc: '租户管理员' }, + PlatformAdmin: { name: 'PlatformAdmin', value: 100, desc: '平台管理员' }, +} + +/** 接口版本 */ +export const ApiVersion = { + V1: { name: 'V1', value: 1, desc: 'V1 版本' }, + V2: { name: 'V2', value: 2, desc: 'V2 版本' }, +} + +/** 内容类型 */ +export const ContentTypeEnum = { + FormData: { name: 'FormData', value: 0, desc: '表单数据' }, + Json: { name: 'Json', value: 1, desc: 'Json格式' }, +} + +/** 状态码枚举 */ +export const StatusCodes = { + Status0NotOk: { name: 'Status0NotOk', value: 0, desc: '操作失败' }, + Status1Ok: { name: 'Status1Ok', value: 1, desc: '操作成功' }, + Status401Unauthorized: { name: 'Status401Unauthorized', value: 401, desc: '未登录' }, + Status403Forbidden: { name: 'Status403Forbidden', value: 403, desc: '权限不足' }, + Status404NotFound: { name: 'Status404NotFound', value: 404, desc: '资源不存在' }, + Status500InternalServerError: { name: 'Status500InternalServerError', value: 500, desc: '系统内部错误' }, +} + +/** 排序方式 */ +export const SortOrder = { + Asc: { name: 'Asc', value: 0, desc: '' }, + Desc: { name: 'Desc', value: 1, desc: '' }, +} + +/** 应用程序类型 */ +export const AppType = { + Controllers: { name: 'Controllers', value: 0, desc: '' }, + ControllersWithViews: { name: 'ControllersWithViews', value: 1, desc: '' }, + MVC: { name: 'MVC', value: 2, desc: '' }, +} + diff --git a/zhontai.ui.admin.vue3/src/api/admin/http-client.ts b/zhontai.ui.admin.vue3/src/api/admin/http-client.ts new file mode 100644 index 0000000..00841ae --- /dev/null +++ b/zhontai.ui.admin.vue3/src/api/admin/http-client.ts @@ -0,0 +1,465 @@ +/* eslint-disable */ +/* tslint:disable */ +// @ts-nocheck +/* + * --------------------------------------------------------------- + * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## + * ## ## + * ## AUTHOR: acacode ## + * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## + * --------------------------------------------------------------- + */ + +import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, HeadersDefaults, RawAxiosRequestHeaders, ResponseType } from 'axios' +import { ElLoading, ElMessage, LoadingOptions } from 'element-plus' +import { useUserInfo } from '/@/stores/userInfo' + +export type QueryParamsType = Record + +export interface FullRequestParams extends Omit { + /** set parameter to `true` for call `securityWorker` for this request */ + secure?: boolean + /** request path */ + path: string + /** content type of request body */ + type?: ContentType + /** query params */ + query?: QueryParamsType + /** format of response (i.e. response.json() -> format: "json") */ + format?: ResponseType + /** request body */ + body?: unknown + /** 显示错误消息 */ + showErrorMessage?: boolean + /** 显示成功消息 */ + showSuccessMessage?: boolean + /** 登录访问 */ + login?: boolean + /** 加载中 */ + loading?: boolean + /** 加载中选项 */ + loadingOptions?: LoadingOptions + /** 取消重复请求 */ + cancelRepeatRequest?: boolean + /** 返回整个响应对象 */ + returnResponse?: boolean +} + +export type RequestParams = Omit + +export interface ApiConfig extends Omit { + securityWorker?: (securityData: SecurityDataType | null) => Promise | AxiosRequestConfig | void + secure?: boolean + format?: ResponseType +} + +export enum ContentType { + Json = 'application/json', + FormData = 'multipart/form-data', + UrlEncoded = 'application/x-www-form-urlencoded', + Text = 'text/plain', +} + +export interface LoadingInstance { + target: any + count: number +} + +const pendingMap = new Map() + +const loadingInstance: LoadingInstance = { + target: null, + count: 0, +} + +export class HttpClient { + public instance: AxiosInstance + private securityData: SecurityDataType | null = null + private securityWorker?: ApiConfig['securityWorker'] + private secure?: boolean + private format?: ResponseType + + constructor({ securityWorker, secure, format, ...axiosConfig }: ApiConfig = {}) { + this.instance = axios.create({ ...axiosConfig, timeout: 60000, baseURL: axiosConfig.baseURL || import.meta.env.VITE_API_URL }) + this.secure = secure + this.format = format + this.securityWorker = securityWorker + } + + public setSecurityData = (data: SecurityDataType | null) => { + this.securityData = data + } + + protected mergeRequestParams(params1: AxiosRequestConfig, params2?: AxiosRequestConfig): AxiosRequestConfig { + const method = params1.method || (params2 && params2.method) + + return { + ...this.instance.defaults, + ...params1, + ...(params2 || {}), + headers: { + ...((method && this.instance.defaults.headers[method.toLowerCase() as keyof HeadersDefaults]) || {}), + ...(params1.headers || {}), + ...((params2 && params2.headers) || {}), + } as RawAxiosRequestHeaders, + } + } + + protected stringifyFormItem(formItem: unknown) { + if (typeof formItem === 'object' && formItem !== null) { + return JSON.stringify(formItem) + } else { + return `${formItem}` + } + } + + protected createFormData(input: Record): FormData { + return Object.keys(input || {}).reduce((formData, key) => { + const property = input[key] + const propertyContent: any[] = property instanceof Array ? property : [property] + + for (const formItem of propertyContent) { + const isFileType = formItem instanceof Blob || formItem instanceof File + formData.append(key, isFileType ? formItem : this.stringifyFormItem(formItem)) + } + + return formData + }, new FormData()) + } + + /** + * 错误处理 + * @param {*} error + */ + protected errorHandle(error: any) { + if (!error) { + return + } + if (axios.isCancel(error)) return console.error('请求重复已被自动取消:' + error.message) + let message = '' + if (error.response) { + switch (error.response.status) { + case 302: + message = '接口重定向' + break + case 400: + message = '参数不正确' + break + case 401: + message = '您还没有登录' + break + case 403: + message = '您没有权限操作' + break + case 404: + message = '请求地址出错:' + error.response.config.url + break + case 408: + message = '请求超时' + break + case 409: + message = '系统已存在相同数据' + break + case 429: + message = '访问过于频繁' + break + case 500: + message = '服务器内部错误' + break + case 501: + message = '服务未实现' + break + case 502: + message = '网关错误' + break + case 503: + message = '服务不可用' + break + case 504: + message = '服务暂时无法访问,请稍后再试' + break + case 505: + message = 'HTTP版本不受支持' + break + default: + message = '异常问题,请联系网站管理员' + break + } + } + if (error.message.includes('timeout')) message = '请求超时' + if (error.message.includes('Network')) message = window.navigator.onLine ? '服务端异常' : '您已断网' + + if (message) { + ElMessage.error({ message, grouping: true }) + } + } + + /** + * 刷新token接口 + * @param string refreshToken + */ + protected async refreshApi(refreshToken: string) { + return this.request({ + path: `/api/admin/auth/refresh`, + method: 'GET', + secure: true, + format: 'json', + login: false, + query: { + token: refreshToken, + }, + }) + } + + /** + * 刷新token + * @param {*} config + */ + protected async refreshToken(config: any) { + const storesUseUserInfo = useUserInfo() + const token = storesUseUserInfo.getToken() + if (!token) { + storesUseUserInfo.clear() + return Promise.reject(config) + } + + if (window.tokenRefreshing) { + window.requests = window.requests ? window.requests : [] + return new Promise((resolve) => { + window.requests.push(() => { + resolve(this.instance(config)) + }) + }) + } + + window.tokenRefreshing = true + + return this.refreshApi(token) + .then((res) => { + if (res?.success) { + storesUseUserInfo.setTokenInfo(res.data) + if (window.requests?.length > 0) { + window.requests.forEach((apiRequest) => apiRequest()) + window.requests = [] + } + return this.instance(config) + } else { + storesUseUserInfo.clear() + return Promise.reject(res) + } + }) + .catch((error) => { + storesUseUserInfo.clear() + return Promise.reject(error) + }) + .finally(() => { + window.tokenRefreshing = false + }) + } + + /** + * 储存每个请求的唯一cancel回调, 以此为标识 + */ + protected addPending(config: AxiosRequestConfig) { + const pendingKey = this.getPendingKey(config) + config.cancelToken = + config.cancelToken || + new axios.CancelToken((cancel) => { + if (!pendingMap.has(pendingKey)) { + pendingMap.set(pendingKey, cancel) + } + }) + } + + /** + * 删除重复的请求 + */ + protected removePending(config: AxiosRequestConfig) { + const pendingKey = this.getPendingKey(config) + if (pendingMap.has(pendingKey)) { + const cancelToken = pendingMap.get(pendingKey) + cancelToken(pendingKey) + pendingMap.delete(pendingKey) + } + } + + /** + * 生成每个请求的唯一key + */ + protected getPendingKey(config: AxiosRequestConfig) { + let { data, headers } = config + headers = headers as RawAxiosRequestHeaders + const { url, method, params } = config + if (typeof data === 'string') data = JSON.parse(data) + return [url, method, headers && headers.Authorization ? headers.Authorization : '', JSON.stringify(params), JSON.stringify(data)].join('&') + } + + /** + * 关闭Loading层实例 + */ + protected closeLoading(loading: boolean = false) { + if (loading && loadingInstance.count > 0) loadingInstance.count-- + if (loadingInstance.count === 0) { + loadingInstance.target.close() + loadingInstance.target = null + } + } + + public request = async ({ + secure, + path, + type, + query, + format, + body, + showErrorMessage = true, + showSuccessMessage = false, + login = true, + loading = false, + loadingOptions = { + background: 'rgba(0,0,0,0.5)', + }, + cancelRepeatRequest = false, + returnResponse = false, + ...params + }: FullRequestParams): Promise => { + const secureParams = + ((typeof secure === 'boolean' ? secure : this.secure) && this.securityWorker && (await this.securityWorker(this.securityData))) || {} + const requestParams = this.mergeRequestParams(params, secureParams) + const responseFormat = format || this.format || undefined + + if (type === ContentType.FormData && body && body !== null && typeof body === 'object') { + body = this.createFormData(body as Record) + } + + if (type === ContentType.Text && body && body !== null && typeof body !== 'string') { + body = JSON.stringify(body) + } + + // 请求拦截 + this.instance.interceptors.request.use( + async (config) => { + this.removePending(config) + cancelRepeatRequest && this.addPending(config) + + if (loading) { + loadingInstance.count++ + if (loadingInstance.count === 1) { + loadingInstance.target = ElLoading.service(loadingOptions) + } + } + + const storesUseUserInfo = useUserInfo() + const tokenInfo = storesUseUserInfo.getTokenInfo() + + if (tokenInfo && tokenInfo.accessToken) { + // 判断 accessToken 是否快失效 + const now = new Date().getTime() + const expiresAt = new Date(tokenInfo.accessTokenExpiresAt).getTime() + const maxThreshold = tokenInfo.accessTokenLifeTime * 0.5 + // 确保阈值不超过 5 分钟且不超过 accessTokenLifeTime 的一半 + const threshold = Math.min(5 * 60 * 1000, maxThreshold) + if (expiresAt - now < threshold) { + //加锁 + if (!window.tokenRefreshing) { + window.tokenRefreshing = true + try { + const res = await this.refreshApi(tokenInfo.accessToken) + if (res?.success) { + storesUseUserInfo.setTokenInfo(res.data) + //处理等待队列中的请求 + if (window.requests?.length > 0) { + window.requests.forEach((apiRequest) => apiRequest()) + window.requests = [] + } + } else { + storesUseUserInfo.clear() + return Promise.reject(res) + } + } catch (error) { + // 清空等待队列 + window.requests = [] + return Promise.reject(error) + } finally { + // 解锁 + window.tokenRefreshing = false + } + } else { + // 如果正在刷新,则将当前请求加入等待队列 + if (config.url !== '/api/admin/auth/refresh') { + window.requests = window.requests ? window.requests : [] + return new Promise((resolve) => { + window.requests.push(() => { + resolve(this.instance(config)) + }) + }) + } + } + } + } + + const accessToken = storesUseUserInfo.getToken() + config.headers!['Authorization'] = `Bearer ${accessToken}` + return config + }, + (error) => { + return Promise.reject(error) + } + ) + // 响应拦截 + this.instance.interceptors.response.use( + (res) => { + this.removePending(res.config) + loading && this.closeLoading(loading) + + if (res.config?.responseType == 'blob') { + return res + } + + const data = res.data + if (data.success) { + if (showSuccessMessage) { + ElMessage.success({ message: data.msg ? data.msg : '操作成功', grouping: true }) + } + } else { + if (showErrorMessage) { + ElMessage.error({ message: data.msg ? data.msg : '操作失败', grouping: true }) + } + // return Promise.reject(res) + } + + return res + }, + async (error) => { + error.config && this.removePending(error.config) + loading && this.closeLoading(loading) + + //刷新token + if (login && error?.response?.status === 401) { + return this.refreshToken(error.config) + } + + //错误处理 + if (showErrorMessage) { + this.errorHandle(error) + } + + return Promise.reject(error) + } + ) + + return this.instance + .request({ + ...requestParams, + headers: { + ...(requestParams.headers || {}), + ...(type && type !== ContentType.FormData ? { 'Content-Type': type } : {}), + } as RawAxiosRequestHeaders, + params: query, + responseType: responseFormat, + data: body, + url: path, + }) + .then((response) => (returnResponse ? response : response.data)) + } +} diff --git a/zhontai.ui.admin.vue3/src/assets/icons/bottom.svg b/zhontai.ui.admin.vue3/src/assets/icons/bottom.svg new file mode 100644 index 0000000..7cbd665 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/bottom.svg @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/customSize.svg b/zhontai.ui.admin.vue3/src/assets/icons/customSize.svg new file mode 100644 index 0000000..28db364 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/customSize.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/distributeHor.svg b/zhontai.ui.admin.vue3/src/assets/icons/distributeHor.svg new file mode 100644 index 0000000..aa37a2e --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/distributeHor.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/distributeVer.svg b/zhontai.ui.admin.vue3/src/assets/icons/distributeVer.svg new file mode 100644 index 0000000..2ae6d03 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/distributeVer.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/export.svg b/zhontai.ui.admin.vue3/src/assets/icons/export.svg new file mode 100644 index 0000000..939fc21 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/export.svg @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/horizontal.svg b/zhontai.ui.admin.vue3/src/assets/icons/horizontal.svg new file mode 100644 index 0000000..ba1f9f4 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/horizontal.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/hot.svg b/zhontai.ui.admin.vue3/src/assets/icons/hot.svg new file mode 100644 index 0000000..cac0b13 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/hot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/json.svg b/zhontai.ui.admin.vue3/src/assets/icons/json.svg new file mode 100644 index 0000000..3cb487c --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/json.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/left.svg b/zhontai.ui.admin.vue3/src/assets/icons/left.svg new file mode 100644 index 0000000..c7df28a --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/left.svg @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/more.svg b/zhontai.ui.admin.vue3/src/assets/icons/more.svg new file mode 100644 index 0000000..0129da5 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/more.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/qq.svg b/zhontai.ui.admin.vue3/src/assets/icons/qq.svg new file mode 100644 index 0000000..47573c7 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/qq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/recycle.svg b/zhontai.ui.admin.vue3/src/assets/icons/recycle.svg new file mode 100644 index 0000000..19b910f --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/recycle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/right.svg b/zhontai.ui.admin.vue3/src/assets/icons/right.svg new file mode 100644 index 0000000..02f2c99 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/right.svg @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/rotate.svg b/zhontai.ui.admin.vue3/src/assets/icons/rotate.svg new file mode 100644 index 0000000..7b2bb56 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/rotate.svg @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/save.svg b/zhontai.ui.admin.vue3/src/assets/icons/save.svg new file mode 100644 index 0000000..228e769 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/save.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/top.svg b/zhontai.ui.admin.vue3/src/assets/icons/top.svg new file mode 100644 index 0000000..302cb9f --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/top.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/icons/vertical.svg b/zhontai.ui.admin.vue3/src/assets/icons/vertical.svg new file mode 100644 index 0000000..7ccbe1b --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/icons/vertical.svg @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/imgs/lockscreen.jpg b/zhontai.ui.admin.vue3/src/assets/imgs/lockscreen.jpg new file mode 100644 index 0000000..a70c375 Binary files /dev/null and b/zhontai.ui.admin.vue3/src/assets/imgs/lockscreen.jpg differ diff --git a/zhontai.ui.admin.vue3/src/assets/login-main.svg b/zhontai.ui.admin.vue3/src/assets/login-main.svg new file mode 100644 index 0000000..e1bd0e8 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/login-main.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/logo-mini.svg b/zhontai.ui.admin.vue3/src/assets/logo-mini.svg new file mode 100644 index 0000000..6d02a6b --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/logo-mini.svg @@ -0,0 +1,33 @@ + + + + diff --git a/zhontai.ui.admin.vue3/src/assets/svgs/401.svg b/zhontai.ui.admin.vue3/src/assets/svgs/401.svg new file mode 100644 index 0000000..daf1952 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/svgs/401.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/svgs/404.svg b/zhontai.ui.admin.vue3/src/assets/svgs/404.svg new file mode 100644 index 0000000..8315ace --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/svgs/404.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/barcode.svg b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/barcode.svg new file mode 100644 index 0000000..f92ae33 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/barcode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/emptyTable.svg b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/emptyTable.svg new file mode 100644 index 0000000..8ac4d95 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/emptyTable.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/hline.svg b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/hline.svg new file mode 100644 index 0000000..429be5b --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/hline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/html.svg b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/html.svg new file mode 100644 index 0000000..f4b6583 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/html.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/image.svg b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/image.svg new file mode 100644 index 0000000..587a2bc --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/image.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/longText.svg b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/longText.svg new file mode 100644 index 0000000..0fdfa0e --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/longText.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/oval.svg b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/oval.svg new file mode 100644 index 0000000..569cc56 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/oval.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/qrcode.svg b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/qrcode.svg new file mode 100644 index 0000000..b1d87f6 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/qrcode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/rect.svg b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/rect.svg new file mode 100644 index 0000000..6a7e6ca --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/rect.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/table.svg b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/table.svg new file mode 100644 index 0000000..7176245 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/text.svg b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/text.svg new file mode 100644 index 0000000..1f6fefd --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/text.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/vline.svg b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/vline.svg new file mode 100644 index 0000000..7db660c --- /dev/null +++ b/zhontai.ui.admin.vue3/src/assets/svgs/hiprint/vline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/components/auth/auth.vue b/zhontai.ui.admin.vue3/src/components/auth/auth.vue new file mode 100644 index 0000000..f1127c9 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/auth/auth.vue @@ -0,0 +1,26 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/components/auth/authAll.vue b/zhontai.ui.admin.vue3/src/components/auth/authAll.vue new file mode 100644 index 0000000..cb7fcee --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/auth/authAll.vue @@ -0,0 +1,27 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/components/auth/auths.vue b/zhontai.ui.admin.vue3/src/components/auth/auths.vue new file mode 100644 index 0000000..ea02665 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/auth/auths.vue @@ -0,0 +1,32 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/components/cropper/index.vue b/zhontai.ui.admin.vue3/src/components/cropper/index.vue new file mode 100644 index 0000000..39f76a7 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/cropper/index.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/editor/index.vue b/zhontai.ui.admin.vue3/src/components/editor/index.vue new file mode 100644 index 0000000..67f34f3 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/editor/index.vue @@ -0,0 +1,139 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/components/iconSelector/index.vue b/zhontai.ui.admin.vue3/src/components/iconSelector/index.vue new file mode 100644 index 0000000..432109a --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/iconSelector/index.vue @@ -0,0 +1,241 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/components/iconSelector/list.vue b/zhontai.ui.admin.vue3/src/components/iconSelector/list.vue new file mode 100644 index 0000000..1fc35bc --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/iconSelector/list.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-captcha/dialog.vue b/zhontai.ui.admin.vue3/src/components/my-captcha/dialog.vue new file mode 100644 index 0000000..c5f9992 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-captcha/dialog.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-captcha/index.vue b/zhontai.ui.admin.vue3/src/components/my-captcha/index.vue new file mode 100644 index 0000000..9bb4752 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-captcha/index.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-captcha/slide-captcha.vue b/zhontai.ui.admin.vue3/src/components/my-captcha/slide-captcha.vue new file mode 100644 index 0000000..bc334c0 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-captcha/slide-captcha.vue @@ -0,0 +1,573 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-cron/day.vue b/zhontai.ui.admin.vue3/src/components/my-cron/day.vue new file mode 100644 index 0000000..db49b1f --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-cron/day.vue @@ -0,0 +1,190 @@ + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-cron/dialog.vue b/zhontai.ui.admin.vue3/src/components/my-cron/dialog.vue new file mode 100644 index 0000000..23bdea5 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-cron/dialog.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-cron/hour.vue b/zhontai.ui.admin.vue3/src/components/my-cron/hour.vue new file mode 100644 index 0000000..23e4880 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-cron/hour.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-cron/index.vue b/zhontai.ui.admin.vue3/src/components/my-cron/index.vue new file mode 100644 index 0000000..c457ad1 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-cron/index.vue @@ -0,0 +1,298 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-cron/min.vue b/zhontai.ui.admin.vue3/src/components/my-cron/min.vue new file mode 100644 index 0000000..7a218c3 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-cron/min.vue @@ -0,0 +1,144 @@ + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-cron/month.vue b/zhontai.ui.admin.vue3/src/components/my-cron/month.vue new file mode 100644 index 0000000..2a77e99 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-cron/month.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-cron/result.vue b/zhontai.ui.admin.vue3/src/components/my-cron/result.vue new file mode 100644 index 0000000..2292478 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-cron/result.vue @@ -0,0 +1,561 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-cron/second.vue b/zhontai.ui.admin.vue3/src/components/my-cron/second.vue new file mode 100644 index 0000000..45c6e8b --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-cron/second.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-cron/week.vue b/zhontai.ui.admin.vue3/src/components/my-cron/week.vue new file mode 100644 index 0000000..191e810 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-cron/week.vue @@ -0,0 +1,208 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-cron/year.vue b/zhontai.ui.admin.vue3/src/components/my-cron/year.vue new file mode 100644 index 0000000..0d1d6c0 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-cron/year.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-date-range/index.vue b/zhontai.ui.admin.vue3/src/components/my-date-range/index.vue new file mode 100644 index 0000000..bfd698e --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-date-range/index.vue @@ -0,0 +1,96 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-dropdown-more/index.vue b/zhontai.ui.admin.vue3/src/components/my-dropdown-more/index.vue new file mode 100644 index 0000000..a1a8a4f --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-dropdown-more/index.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-editor/index.vue b/zhontai.ui.admin.vue3/src/components/my-editor/index.vue new file mode 100644 index 0000000..c4e6ca9 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-editor/index.vue @@ -0,0 +1,153 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-high-search/dialog.vue b/zhontai.ui.admin.vue3/src/components/my-high-search/dialog.vue new file mode 100644 index 0000000..b09516e --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-high-search/dialog.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-high-search/index.vue b/zhontai.ui.admin.vue3/src/components/my-high-search/index.vue new file mode 100644 index 0000000..deeadfc --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-high-search/index.vue @@ -0,0 +1,399 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-icon/index.vue b/zhontai.ui.admin.vue3/src/components/my-icon/index.vue new file mode 100644 index 0000000..b23bced --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-icon/index.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-import/index.vue b/zhontai.ui.admin.vue3/src/components/my-import/index.vue new file mode 100644 index 0000000..f2fbff5 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-import/index.vue @@ -0,0 +1,406 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-input-code/index.vue b/zhontai.ui.admin.vue3/src/components/my-input-code/index.vue new file mode 100644 index 0000000..fc2a7ea --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-input-code/index.vue @@ -0,0 +1,187 @@ + + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-json-editor/index.vue b/zhontai.ui.admin.vue3/src/components/my-json-editor/index.vue new file mode 100644 index 0000000..3095c23 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-json-editor/index.vue @@ -0,0 +1,127 @@ + + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-layout/index.vue b/zhontai.ui.admin.vue3/src/components/my-layout/index.vue new file mode 100644 index 0000000..9fc14c2 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-layout/index.vue @@ -0,0 +1,23 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-layout/split-panes.vue b/zhontai.ui.admin.vue3/src/components/my-layout/split-panes.vue new file mode 100644 index 0000000..1d68c3b --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-layout/split-panes.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-link/index.vue b/zhontai.ui.admin.vue3/src/components/my-link/index.vue new file mode 100644 index 0000000..b1b4814 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-link/index.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-search/index.vue b/zhontai.ui.admin.vue3/src/components/my-search/index.vue new file mode 100644 index 0000000..e0cd647 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-search/index.vue @@ -0,0 +1,187 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-select-icon/icon-select.vue b/zhontai.ui.admin.vue3/src/components/my-select-icon/icon-select.vue new file mode 100644 index 0000000..43bedf7 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-select-icon/icon-select.vue @@ -0,0 +1,251 @@ + + + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-select-icon/index.vue b/zhontai.ui.admin.vue3/src/components/my-select-icon/index.vue new file mode 100644 index 0000000..8ac4cab --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-select-icon/index.vue @@ -0,0 +1,64 @@ + + + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-select-input/index.vue b/zhontai.ui.admin.vue3/src/components/my-select-input/index.vue new file mode 100644 index 0000000..91bbcf7 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-select-input/index.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-select/index.vue b/zhontai.ui.admin.vue3/src/components/my-select/index.vue new file mode 100644 index 0000000..8556059 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-select/index.vue @@ -0,0 +1,14 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/components/my-upload/index.vue b/zhontai.ui.admin.vue3/src/components/my-upload/index.vue new file mode 100644 index 0000000..41eaeef --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/my-upload/index.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/noticeBar/index.vue b/zhontai.ui.admin.vue3/src/components/noticeBar/index.vue new file mode 100644 index 0000000..f6ba976 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/noticeBar/index.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/components/svgIcon/index.vue b/zhontai.ui.admin.vue3/src/components/svgIcon/index.vue new file mode 100644 index 0000000..a121e04 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/svgIcon/index.vue @@ -0,0 +1,62 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/components/table/index.vue b/zhontai.ui.admin.vue3/src/components/table/index.vue new file mode 100644 index 0000000..7a956f5 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/components/table/index.vue @@ -0,0 +1,301 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/directive/authDirective.ts b/zhontai.ui.admin.vue3/src/directive/authDirective.ts new file mode 100644 index 0000000..c887d58 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/directive/authDirective.ts @@ -0,0 +1,40 @@ +import type { App } from 'vue' +import { useUserInfo } from '/@/stores/userInfo' +import { judementSameArr } from '/@/utils/arrayOperation' + +/** + * 用户权限指令 + * @directive 单个权限验证(v-auth="xxx") + * @directive 多个权限验证,满足一个则显示(v-auths="[xxx,xxx]") + * @directive 多个权限验证,全部满足则显示(v-auth-all="[xxx,xxx]") + */ +export function authDirective(app: App) { + // 单个权限验证(v-auth="xxx") + app.directive('auth', { + mounted(el, binding) { + const stores = useUserInfo() + if (!stores.userInfos.authBtnList.some((v: string) => v === binding.value)) el.parentNode.removeChild(el) + }, + }) + // 多个权限验证,满足一个则显示(v-auths="[xxx,xxx]") + app.directive('auths', { + mounted(el, binding) { + let flag = false + const stores = useUserInfo() + stores.userInfos.authBtnList.map((val: string) => { + binding.value.map((v: string) => { + if (val === v) flag = true + }) + }) + if (!flag) el.parentNode.removeChild(el) + }, + }) + // 多个权限验证,全部满足则显示(v-auth-all="[xxx,xxx]") + app.directive('auth-all', { + mounted(el, binding) { + const stores = useUserInfo() + const flag = judementSameArr(binding.value, stores.userInfos.authBtnList) + if (!flag) el.parentNode.removeChild(el) + }, + }) +} diff --git a/zhontai.ui.admin.vue3/src/directive/customDirective.ts b/zhontai.ui.admin.vue3/src/directive/customDirective.ts new file mode 100644 index 0000000..8abd1c2 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/directive/customDirective.ts @@ -0,0 +1,178 @@ +import type { App } from 'vue' + +/** + * 按钮波浪指令 + * @directive 默认方式:v-waves,如 `
` + * @directive 参数方式:v-waves=" |light|red|orange|purple|green|teal",如 `
` + */ +export function wavesDirective(app: App) { + app.directive('waves', { + mounted(el, binding) { + el.classList.add('waves-effect') + binding.value && el.classList.add(`waves-${binding.value}`) + function setConvertStyle(obj: { [key: string]: unknown }) { + let style: string = '' + for (let i in obj) { + if (obj.hasOwnProperty(i)) style += `${i}:${obj[i]};` + } + return style + } + function onCurrentClick(e: { [key: string]: unknown }) { + let elDiv = document.createElement('div') + elDiv.classList.add('waves-ripple') + el.appendChild(elDiv) + let styles = { + left: `${e.layerX}px`, + top: `${e.layerY}px`, + opacity: 1, + transform: `scale(${(el.clientWidth / 100) * 10})`, + 'transition-duration': `750ms`, + 'transition-timing-function': `cubic-bezier(0.250, 0.460, 0.450, 0.940)`, + } + elDiv.setAttribute('style', setConvertStyle(styles)) + setTimeout(() => { + elDiv.setAttribute( + 'style', + setConvertStyle({ + opacity: 0, + transform: styles.transform, + left: styles.left, + top: styles.top, + }) + ) + setTimeout(() => { + elDiv && el.removeChild(elDiv) + }, 750) + }, 450) + } + el.addEventListener('mousedown', onCurrentClick, false) + }, + unmounted(el) { + el.addEventListener('mousedown', () => {}) + }, + }) +} + +/** + * 自定义拖动指令 + * @description 使用方式:v-drag="[dragDom,dragHeader]",如 `
` + * @description dragDom 要拖动的元素,dragHeader 要拖动的 Header 位置 + * @link 注意:https://github.com/element-plus/element-plus/issues/522 + * @lick 参考:https://blog.csdn.net/weixin_46391323/article/details/105228020?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-10&spm=1001.2101.3001.4242 + */ +export function dragDirective(app: App) { + app.directive('drag', { + mounted(el, binding) { + if (!binding.value) return false + + const dragDom = document.querySelector(binding.value[0]) as HTMLElement + const dragHeader = document.querySelector(binding.value[1]) as HTMLElement + + dragHeader.onmouseover = () => (dragHeader.style.cursor = `move`) + + function down(e: any, type: string) { + // 鼠标按下,计算当前元素距离可视区的距离 + const disX = type === 'pc' ? e.clientX - dragHeader.offsetLeft : e.touches[0].clientX - dragHeader.offsetLeft + const disY = type === 'pc' ? e.clientY - dragHeader.offsetTop : e.touches[0].clientY - dragHeader.offsetTop + + // body当前宽度 + const screenWidth = document.body.clientWidth + // 可见区域高度(应为body高度,可某些环境下无法获取) + const screenHeight = document.documentElement.clientHeight + + // 对话框宽度 + const dragDomWidth = dragDom.offsetWidth + // 对话框高度 + const dragDomheight = dragDom.offsetHeight + + const minDragDomLeft = dragDom.offsetLeft + const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth + + const minDragDomTop = dragDom.offsetTop + const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight + + // 获取到的值带px 正则匹配替换 + let styL: any = getComputedStyle(dragDom).left + let styT: any = getComputedStyle(dragDom).top + + // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px + if (styL.includes('%')) { + styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100) + styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100) + } else { + styL = +styL.replace(/\px/g, '') + styT = +styT.replace(/\px/g, '') + } + + return { + disX, + disY, + minDragDomLeft, + maxDragDomLeft, + minDragDomTop, + maxDragDomTop, + styL, + styT, + } + } + + function move(e: any, type: string, obj: any) { + let { disX, disY, minDragDomLeft, maxDragDomLeft, minDragDomTop, maxDragDomTop, styL, styT } = obj + + // 通过事件委托,计算移动的距离 + let left = type === 'pc' ? e.clientX - disX : e.touches[0].clientX - disX + let top = type === 'pc' ? e.clientY - disY : e.touches[0].clientY - disY + + // 边界处理 + if (-left > minDragDomLeft) { + left = -minDragDomLeft + } else if (left > maxDragDomLeft) { + left = maxDragDomLeft + } + + if (-top > minDragDomTop) { + top = -minDragDomTop + } else if (top > maxDragDomTop) { + top = maxDragDomTop + } + + // 移动当前元素 + dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;` + } + + /** + * pc端 + * onmousedown 鼠标按下触发事件 + * onmousemove 鼠标按下时持续触发事件 + * onmouseup 鼠标抬起触发事件 + */ + dragHeader.onmousedown = (e) => { + const obj = down(e, 'pc') + document.onmousemove = (e) => { + move(e, 'pc', obj) + } + document.onmouseup = () => { + document.onmousemove = null + document.onmouseup = null + } + } + + /** + * 移动端 + * ontouchstart 当按下手指时,触发ontouchstart + * ontouchmove 当移动手指时,触发ontouchmove + * ontouchend 当移走手指时,触发ontouchend + */ + dragHeader.ontouchstart = (e) => { + const obj = down(e, 'app') + document.ontouchmove = (e) => { + move(e, 'app', obj) + } + document.ontouchend = () => { + document.ontouchmove = null + document.ontouchend = null + } + } + }, + }) +} diff --git a/zhontai.ui.admin.vue3/src/directive/index.ts b/zhontai.ui.admin.vue3/src/directive/index.ts new file mode 100644 index 0000000..c0bbee5 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/directive/index.ts @@ -0,0 +1,18 @@ +import type { App } from 'vue' +import { authDirective } from '/@/directive/authDirective' +import { wavesDirective, dragDirective } from '/@/directive/customDirective' + +/** + * 导出指令方法:v-xxx + * @methods authDirective 用户权限指令,用法:v-auth + * @methods wavesDirective 按钮波浪指令,用法:v-waves + * @methods dragDirective 自定义拖动指令,用法:v-drag + */ +export function directive(app: App) { + // 用户权限指令 + authDirective(app) + // 按钮波浪指令 + wavesDirective(app) + // 自定义拖动指令 + dragDirective(app) +} diff --git a/zhontai.ui.admin.vue3/src/globalProperties/index.ts b/zhontai.ui.admin.vue3/src/globalProperties/index.ts new file mode 100644 index 0000000..917e7f4 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/globalProperties/index.ts @@ -0,0 +1,6 @@ +import modal from './modal' + +export default function installGlobalProperties(app: any) { + // 模态框对象 + app.config.globalProperties.$modal = modal +} diff --git a/zhontai.ui.admin.vue3/src/globalProperties/modal.ts b/zhontai.ui.admin.vue3/src/globalProperties/modal.ts new file mode 100644 index 0000000..42add59 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/globalProperties/modal.ts @@ -0,0 +1,107 @@ +import { markRaw } from 'vue' +import { ElMessage, ElMessageBox, ElNotification, ElLoading, ElMessageBoxOptions } from 'element-plus' +import { Delete } from '@element-plus/icons-vue' +import { i18n } from '/@/i18n/index' + +let loadingInstance: any + +export default { + // 消息提示 + msg(content: any) { + ElMessage.info({ + message: content, + grouping: true, + }) + }, + // 错误消息 + msgError(content: any) { + ElMessage.error({ + message: content, + grouping: true, + }) + }, + // 成功消息 + msgSuccess(content: any) { + ElMessage.success({ + message: content, + grouping: true, + }) + }, + // 警告消息 + msgWarning(content: any) { + ElMessage.warning({ + message: content, + grouping: true, + }) + }, + // 弹出提示 + alert(content: any) { + ElMessageBox.alert(content, i18n.global.t('el.messagebox.title')) + }, + // 错误提示 + alertError(content: any) { + ElMessageBox.alert(content, i18n.global.t('el.messagebox.title'), { type: 'error' }) + }, + // 成功提示 + alertSuccess(content: any) { + ElMessageBox.alert(content, i18n.global.t('el.messagebox.title'), { type: 'success' }) + }, + // 警告提示 + alertWarning(content: any) { + ElMessageBox.alert(content, i18n.global.t('el.messagebox.title'), { type: 'warning' }) + }, + // 通知提示 + notify(content: any) { + ElNotification.info(content) + }, + // 错误通知 + notifyError(content: any) { + ElNotification.error(content) + }, + // 成功通知 + notifySuccess(content: any) { + ElNotification.success(content) + }, + // 警告通知 + notifyWarning(content: any) { + ElNotification.warning(content) + }, + // 确认窗体 + confirm(content: any, elMessageBoxOptions: ElMessageBoxOptions) { + return ElMessageBox.confirm(content, i18n.global.t('el.messagebox.title'), { + confirmButtonText: i18n.global.t('el.messagebox.confirm'), + cancelButtonText: i18n.global.t('el.messagebox.cancel'), + type: 'warning', + ...elMessageBoxOptions, + }) + }, + // 确认删除窗体 + confirmDelete(content: any, elMessageBoxOptions: ElMessageBoxOptions) { + return ElMessageBox.confirm(content, i18n.global.t('el.messagebox.title'), { + confirmButtonText: i18n.global.t('el.messagebox.confirm'), + cancelButtonText: i18n.global.t('el.messagebox.cancel'), + type: 'warning', + icon: markRaw(Delete), + ...elMessageBoxOptions, + }) + }, + // 提交内容 + prompt(content: any, elMessageBoxOptions: ElMessageBoxOptions) { + return ElMessageBox.prompt(content, i18n.global.t('el.messagebox.title'), { + confirmButtonText: i18n.global.t('el.messagebox.confirm'), + cancelButtonText: i18n.global.t('el.messagebox.cancel'), + type: 'warning', + ...elMessageBoxOptions, + }) + }, + // 打开遮罩层 + loading(content: any) { + loadingInstance = ElLoading.service({ + text: content, + }) + }, + // 关闭遮罩层 + closeLoading() { + loadingInstance.close() + }, +} diff --git a/zhontai.ui.admin.vue3/src/i18n/index.ts b/zhontai.ui.admin.vue3/src/i18n/index.ts new file mode 100644 index 0000000..425d45c --- /dev/null +++ b/zhontai.ui.admin.vue3/src/i18n/index.ts @@ -0,0 +1,68 @@ +import { createI18n } from 'vue-i18n' +import pinia from '/@/stores/index' +import { storeToRefs } from 'pinia' +import { useThemeConfig } from '/@/stores/themeConfig' + +// 定义语言国际化内容 + +/** + * 说明: + * 须在 pages 下新建文件夹(建议 `要国际化界面目录` 与 `i18n 目录` 相同,方便查找), + * 注意国际化定义的字段,不要与原有的定义字段相同。 + * 1、/src/i18n/lang 下的 ts 为框架的国际化内容 + * 2、/src/i18n/pages 下的 ts 为各界面的国际化内容 + */ + +// element plus 自带国际化 +import enLocale from 'element-plus/es/locale/lang/en' +import zhcnLocale from 'element-plus/es/locale/lang/zh-cn' +import zhtwLocale from 'element-plus/es/locale/lang/zh-tw' + +// 定义变量内容 +const messages = {} +const element = { en: enLocale, 'zh-cn': zhcnLocale, 'zh-tw': zhtwLocale } +const itemize = { en: [], 'zh-cn': [], 'zh-tw': [] } +const modules: Record = import.meta.glob('./**/*.ts', { eager: true }) + +// 对自动引入的 modules 进行分类 en、zh-cn、zh-tw +// https://vitejs.cn/vite3-cn/guide/features.html#glob-import +for (const path in modules) { + const key = path.match(/(\S+)\/(\S+).ts/) + if (itemize[key![2]]) itemize[key![2]].push(modules[path].default) + else itemize[key![2]] = modules[path] +} + +// 合并数组对象(非标准数组对象,数组中对象的每项 key、value 都不同) +function mergeArrObj(list: T, key: string) { + let obj = {} + list[key].forEach((i: EmptyObjectType) => { + obj = Object.assign({}, obj, i) + }) + return obj +} + +// 处理最终格式 +for (const key in itemize) { + messages[key] = { + name: key, + el: element[key].el, + message: mergeArrObj(itemize, key), + } +} + +// 读取 pinia 默认语言 +const stores = useThemeConfig(pinia) +const { themeConfig } = storeToRefs(stores) + +// 导出语言国际化 +// https://vue-i18n.intlify.dev/guide/essentials/fallback.html#explicit-fallback-with-one-locale +export const i18n = createI18n({ + legacy: false, + silentTranslationWarn: true, + missingWarn: false, + silentFallbackWarn: true, + fallbackWarn: false, + locale: themeConfig.value.globalI18n, + fallbackLocale: zhcnLocale.name, + messages, +}) diff --git a/zhontai.ui.admin.vue3/src/i18n/lang/en.ts b/zhontai.ui.admin.vue3/src/i18n/lang/en.ts new file mode 100644 index 0000000..5eeb275 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/i18n/lang/en.ts @@ -0,0 +1,193 @@ +// 定义内容 +export default { + router: { + home: 'home', + system: 'system', + systemMenu: 'systemMenu', + systemRole: 'systemRole', + systemUser: 'systemUser', + systemDept: 'systemDept', + systemDic: 'systemDic', + limits: 'limits', + limitsFrontEnd: 'FrontEnd', + limitsFrontEndPage: 'FrontEndPage', + limitsFrontEndBtn: 'FrontEndBtn', + limitsBackEnd: 'BackEnd', + limitsBackEndEndPage: 'BackEndEndPage', + menu: 'menu', + menu1: 'menu1', + menu11: 'menu11', + menu12: 'menu12', + menu121: 'menu121', + menu122: 'menu122', + menu13: 'menu13', + menu2: 'menu2', + funIndex: 'function', + funTagsView: 'funTagsView', + funCountup: 'countup', + funWangEditor: 'wangEditor', + funCropper: 'cropper', + funQrcode: 'qrcode', + funEchartsMap: 'EchartsMap', + funPrintJs: 'PrintJs', + funClipboard: 'Copy cut', + funGridLayout: 'Drag layout', + funSplitpanes: 'Pane splitter', + funDragVerify: 'Validator', + pagesIndex: 'pages', + pagesFiltering: 'Filtering', + pagesFilteringDetails: 'FilteringDetails', + pagesFilteringDetails1: 'FilteringDetails1', + pagesIocnfont: 'iconfont icon', + pagesElement: 'element icon', + pagesAwesome: 'awesome icon', + pagesFormAdapt: 'FormAdapt', + pagesTableRules: 'pagesTableRules', + pagesFormI18n: 'FormI18n', + pagesFormRules: 'Multi form validation', + pagesDynamicForm: 'Dynamic complex form', + pagesWorkflow: 'Workflow', + pagesListAdapt: 'ListAdapt', + pagesWaterfall: 'Waterfall', + pagesSteps: 'Steps', + pagesPreview: 'Large preview', + pagesWaves: 'Wave effect', + pagesTree: 'tree alter table', + pagesDrag: 'Drag command', + pagesLazyImg: 'Image lazy loading', + makeIndex: 'makeIndex', + makeSelector: 'Icon selector', + makeNoticeBar: 'notification bar', + makeSvgDemo: 'Svgicon demo', + makeTableDemo: 'table demo', + paramsIndex: 'Routing parameters', + paramsCommon: 'General routing', + paramsDynamic: 'Dynamic routing', + paramsCommonDetails: 'General routing details', + paramsDynamicDetails: 'Dynamic routing details', + chartIndex: 'chartIndex', + visualizingIndex: 'visualizingIndex', + visualizingLinkDemo1: 'visualizingLinkDemo1', + visualizingLinkDemo2: 'visualizingLinkDemo2', + personal: 'personal', + tools: 'tools', + layoutLinkView: 'LinkView', + layoutIframeViewOne: 'IframeViewOne', + layoutIframeViewTwo: 'IframeViewTwo', + }, + staticRoutes: { + signIn: 'signIn', + notFound: 'notFound', + noPower: 'noPower', + }, + user: { + title0: 'Component size', + title1: 'Language switching', + title2: 'Menu search', + title3: 'Layout configuration', + title4: 'news', + title5: 'Full screen on', + title6: 'Full screen off', + dropdownLarge: 'large', + dropdownDefault: 'default', + dropdownSmall: 'small', + dropdown1: 'home page', + dropdown2: 'Personal Center', + dropdown3: '404', + dropdown4: '401', + dropdown5: 'Log out', + dropdown6: 'Code warehouse', + searchPlaceholder: 'Menu search: support Chinese, routing path', + newTitle: 'notice', + newBtn: 'All read', + newGo: 'Go to the notification center', + newDesc: 'No notice', + logOutTitle: 'Tips', + logOutMessage: 'This operation will log out. Do you want to continue?', + logOutConfirm: 'determine', + logOutCancel: 'cancel', + logOutExit: 'Exiting', + }, + tagsView: { + refresh: 'refresh', + close: 'close', + closeOther: 'closeOther', + closeAll: 'closeAll', + fullscreen: 'fullscreen', + closeFullscreen: 'closeFullscreen', + }, + notFound: { + foundTitle: 'Wrong address input, please re-enter the address~', + foundMsg: 'You can check the web address first, and then re-enter or give us feedback.', + foundBtn: 'Back to home page', + }, + noAccess: { + accessTitle: 'You are not authorized to operate~', + accessMsg: 'Contact information: add QQ group discussion 665452019', + accessBtn: 'Reauthorization', + }, + layout: { + primary: 'Theme color', + configTitle: 'Layout configuration', + oneTitle: 'Global Themes', + twoTopTitle: 'top bar set up', + twoMenuTitle: 'Menu set up', + twoColumnsTitle: 'Columns set up', + twoTopBar: 'Top bar background', + twoTopBarColor: 'Top bar default font color', + twoIsTopBarColorGradual: 'Top bar gradient', + twoMenuBar: 'Menu background', + twoMenuBarColor: 'Menu default font color', + twoMenuBarActiveColor: 'Menu Highlight Color', + twoIsMenuBarColorGradual: 'Menu gradient', + twoColumnsMenuBar: 'Column menu background', + twoColumnsMenuBarColor: 'Default font color bar menu', + twoIsColumnsMenuBarColorGradual: 'Column gradient', + twoIsColumnsMenuHoverPreload: 'Column Menu Hover Preload', + threeTitle: 'Interface settings', + threeIsCollapse: 'Menu horizontal collapse', + threeIsUniqueOpened: 'Menu accordion', + threeIsFixedHeader: 'Fixed header', + threeIsClassicSplitMenu: 'Classic layout split menu', + threeIsLockScreen: 'Open the lock screen', + threeLockScreenTime: 'screen locking(s/s)', + fourTitle: 'Interface display', + fourIsShowLogo: 'Sidebar logo', + fourIsBreadcrumb: 'Open breadcrumb', + fourIsBreadcrumbIcon: 'Open breadcrumb icon', + fourIsTagsview: 'Open tagsview', + fourIsTagsviewIcon: 'Open tagsview Icon', + fourIsCacheTagsView: 'Enable tagsview cache', + fourIsSortableTagsView: 'Enable tagsview drag', + fourIsShareTagsView: 'Enable tagsview sharing', + fourIsFooter: 'Open footer', + fourIsGrayscale: 'Grey model', + fourIsInvert: 'Color weak mode', + fourIsDark: 'Dark Mode', + fourIsWatermark: 'Turn on watermark', + fourWatermarkText: 'Watermark copy', + fiveTitle: 'Other settings', + fiveTagsStyle: 'Tagsview style', + fiveAnimation: 'page animation', + fiveColumnsAsideStyle: 'Column style', + fiveColumnsAsideLayout: 'Column layout', + sixTitle: 'Layout switch', + sixDefaults: 'One', + sixClassic: 'Two', + sixTransverse: 'Three', + sixColumns: 'Four', + tipText: 'Click the button below to copy the layout configuration to `/src/stores/themeConfig.ts` It has been modified in.', + copyText: 'replication configuration', + resetText: 'restore default', + copyTextSuccess: 'Copy succeeded!', + copyTextError: 'Copy failed!', + }, + upgrade: { + title: 'New version', + msg: 'The new version is available, please update it now! Dont worry, the update is fast!', + desc: 'Prompt: Update will restore the default configuration', + btnOne: 'Cruel refusal', + btnTwo: 'Update now', + btnTwoLoading: 'Updating', + }, +} diff --git a/zhontai.ui.admin.vue3/src/i18n/lang/zh-cn.ts b/zhontai.ui.admin.vue3/src/i18n/lang/zh-cn.ts new file mode 100644 index 0000000..3f81567 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/i18n/lang/zh-cn.ts @@ -0,0 +1,193 @@ +// 定义内容 +export default { + router: { + home: '首页', + system: '系统设置', + systemMenu: '菜单管理', + systemRole: '角色管理', + systemUser: '用户管理', + systemDept: '部门管理', + systemDic: '字典管理', + limits: '权限管理', + limitsFrontEnd: '前端控制', + limitsFrontEndPage: '页面权限', + limitsFrontEndBtn: '按钮权限', + limitsBackEnd: '后端控制', + limitsBackEndEndPage: '页面权限', + menu: '菜单嵌套', + menu1: '菜单1', + menu11: '菜单11', + menu12: '菜单12', + menu121: '菜单121', + menu122: '菜单122', + menu13: '菜单13', + menu2: '菜单2', + funIndex: '功能', + funTagsView: '标签页操作', + funCountup: '数字滚动', + funWangEditor: 'Editor 编辑器', + funCropper: '图片裁剪', + funQrcode: '二维码生成', + funEchartsMap: '地理坐标/地图', + funPrintJs: '页面打印', + funClipboard: '复制剪切', + funGridLayout: '拖拽布局', + funSplitpanes: '窗格拆分器', + funDragVerify: '验证器', + pagesIndex: '页面', + pagesFiltering: '过滤筛选组件', + pagesFilteringDetails: '过滤筛选组件详情', + pagesFilteringDetails1: '过滤筛选组件详情111', + pagesIocnfont: 'ali 字体图标', + pagesElement: 'ele 字体图标', + pagesAwesome: 'awe 字体图标', + pagesFormAdapt: '表单自适应', + pagesTableRules: '表单表格验证', + pagesFormI18n: '表单国际化', + pagesFormRules: '多表单验证', + pagesDynamicForm: '动态复杂表单', + pagesWorkflow: '工作流', + pagesListAdapt: '列表自适应', + pagesWaterfall: '瀑布屏', + pagesSteps: '步骤条', + pagesPreview: '大图预览', + pagesWaves: '波浪效果', + pagesTree: '树形改表格', + pagesDrag: '拖动指令', + pagesLazyImg: '图片懒加载', + makeIndex: '组件封装', + makeSelector: '图标选择器', + makeNoticeBar: '滚动通知栏', + makeSvgDemo: 'svgIcon 演示', + makeTableDemo: '表格封装演示', + paramsIndex: '路由参数', + paramsCommon: '普通路由', + paramsDynamic: '动态路由', + paramsCommonDetails: '普通路由详情', + paramsDynamicDetails: '动态路由详情', + chartIndex: '大数据图表', + visualizingIndex: '数据可视化', + visualizingLinkDemo1: '数据可视化演示1', + visualizingLinkDemo2: '数据可视化演示2', + personal: '个人中心', + tools: '工具类集合', + layoutLinkView: '外链', + layoutIframeViewOne: '内嵌 iframe1', + layoutIframeViewTwo: '内嵌 iframe2', + }, + staticRoutes: { + signIn: '登录', + notFound: '找不到此页面', + noPower: '没有权限', + }, + user: { + title0: '组件大小', + title1: '语言切换', + title2: '菜单搜索', + title3: '布局配置', + title4: '消息', + title5: '开全屏', + title6: '关全屏', + dropdownLarge: '大型', + dropdownDefault: '默认', + dropdownSmall: '小型', + dropdown1: '首页', + dropdown2: '个人中心', + dropdown3: '404', + dropdown4: '401', + dropdown5: '退出登录', + dropdown6: '代码仓库', + searchPlaceholder: '菜单搜索:支持中文、路由路径', + newTitle: '通知', + newBtn: '全部已读', + newGo: '前往通知中心', + newDesc: '暂无通知', + logOutTitle: '提示', + logOutMessage: '此操作将退出登录, 是否继续?', + logOutConfirm: '确定', + logOutCancel: '取消', + logOutExit: '退出中', + }, + tagsView: { + refresh: '刷新', + close: '关闭', + closeOther: '关闭其它', + closeAll: '全部关闭', + fullscreen: '当前页全屏', + closeFullscreen: '关闭全屏', + }, + notFound: { + foundTitle: '地址输入错误,请重新输入地址~', + foundMsg: '您可以先检查网址,然后重新输入或给我们反馈问题。', + foundBtn: '返回首页', + }, + noAccess: { + accessTitle: '您未被授权,没有操作权限~', + accessMsg: '联系方式:加QQ群探讨 665452019', + accessBtn: '重新授权', + }, + layout: { + primary: '主题颜色', + configTitle: '布局配置', + oneTitle: '全局主题', + twoTopTitle: '顶栏设置', + twoMenuTitle: '菜单设置', + twoColumnsTitle: '分栏设置', + twoTopBar: '顶栏背景', + twoTopBarColor: '顶栏默认字体颜色', + twoIsTopBarColorGradual: '顶栏背景渐变', + twoMenuBar: '菜单背景', + twoMenuBarColor: '菜单默认字体颜色', + twoMenuBarActiveColor: '菜单高亮背景色', + twoIsMenuBarColorGradual: '菜单背景渐变', + twoColumnsMenuBar: '分栏菜单背景', + twoColumnsMenuBarColor: '分栏菜单默认字体颜色', + twoIsColumnsMenuBarColorGradual: '分栏菜单背景渐变', + twoIsColumnsMenuHoverPreload: '分栏菜单鼠标悬停预加载', + threeTitle: '界面设置', + threeIsCollapse: '菜单水平折叠', + threeIsUniqueOpened: '菜单手风琴', + threeIsFixedHeader: '固定 Header', + threeIsClassicSplitMenu: '经典布局分割菜单', + threeIsLockScreen: '开启锁屏', + threeLockScreenTime: '自动锁屏(s/秒)', + fourTitle: '界面显示', + fourIsShowLogo: '侧边栏 Logo', + fourIsBreadcrumb: '开启面包屑', + fourIsBreadcrumbIcon: '开启面包屑图标', + fourIsTagsview: '开启标签页', + fourIsTagsviewIcon: '开启标签页图标', + fourIsCacheTagsView: '开启标签页缓存', + fourIsSortableTagsView: '开启标签页拖拽', + fourIsShareTagsView: '开启标签页共用', + fourIsFooter: '开启 Footer', + fourIsGrayscale: '灰色模式', + fourIsInvert: '色弱模式', + fourIsDark: '深色模式', + fourIsWatermark: '开启水印', + fourWatermarkText: '水印文案', + fiveTitle: '其它设置', + fiveTagsStyle: '标签页风格', + fiveAnimation: '主页面切换动画', + fiveColumnsAsideStyle: '分栏高亮风格', + fiveColumnsAsideLayout: '分栏布局风格', + sixTitle: '布局切换', + sixDefaults: '默认', + sixClassic: '经典', + sixTransverse: '横向', + sixColumns: '分栏', + tipText: '点击下方按钮,复制布局配置去 `src/stores/themeConfig.ts` 中修改。', + copyText: '一键复制配置', + resetText: '一键恢复默认', + copyTextSuccess: '复制成功!', + copyTextError: '复制失败!', + }, + upgrade: { + title: '新版本升级', + msg: '新版本来啦,马上更新尝鲜吧!不用担心,更新很快的哦!', + desc: '提示:更新会还原默认配置', + btnOne: '残忍拒绝', + btnTwo: '马上更新', + btnTwoLoading: '更新中', + }, +} diff --git a/zhontai.ui.admin.vue3/src/i18n/lang/zh-tw.ts b/zhontai.ui.admin.vue3/src/i18n/lang/zh-tw.ts new file mode 100644 index 0000000..7493afb --- /dev/null +++ b/zhontai.ui.admin.vue3/src/i18n/lang/zh-tw.ts @@ -0,0 +1,193 @@ +// 定义内容 +export default { + router: { + home: '首頁', + system: '系統設置', + systemMenu: '選單管理', + systemRole: '角色管理', + systemUser: '用戶管理', + systemDept: '部門管理', + systemDic: '字典管理', + limits: '許可權管理', + limitsFrontEnd: '前端控制', + limitsFrontEndPage: '頁面許可權', + limitsFrontEndBtn: '按鈕許可權', + limitsBackEnd: '後端控制', + limitsBackEndEndPage: '頁面許可權', + menu: '選單嵌套', + menu1: '選單1', + menu11: '選單11', + menu12: '選單12', + menu121: '選單121', + menu122: '選單122', + menu13: '選單13', + menu2: '選單2', + funIndex: '功能', + funTagsView: 'tagsView 操作', + funCountup: '數位滾動', + funWangEditor: 'Editor 編輯器', + funCropper: '圖片裁剪', + funQrcode: '二維碼生成', + funEchartsMap: '地理座標/地圖', + funPrintJs: '頁面列印', + funClipboard: '複製剪切', + funGridLayout: '拖拽佈局', + funSplitpanes: '窗格折開器', + funDragVerify: '驗證器', + pagesIndex: '頁面', + pagesFiltering: '過濾篩選組件', + pagesFilteringDetails: '過濾篩選組件詳情', + pagesFilteringDetails1: '過濾篩選組件詳情111', + pagesIocnfont: 'ali 字體圖標', + pagesElement: 'ele 字體圖標', + pagesAwesome: 'awe 字體圖標', + pagesFormAdapt: '表單自我調整', + pagesTableRules: '表單表格驗證', + pagesFormI18n: '表單國際化', + pagesFormRules: '多表單驗證', + pagesDynamicForm: '動態複雜表單', + pagesWorkflow: '工作流', + pagesListAdapt: '清單自我調整', + pagesWaterfall: '瀑布屏', + pagesSteps: '步驟條', + pagesPreview: '大圖預覽', + pagesWaves: '波浪效果', + pagesTree: '樹形改表格', + pagesDrag: '拖動指令', + pagesLazyImg: '圖片懶加載', + makeIndex: '組件封裝', + makeSelector: '圖標選擇器', + makeNoticeBar: '滾動通知欄', + makeSvgDemo: 'svgIcon 演示', + makeTableDemo: '表格封裝演示', + paramsIndex: '路由參數', + paramsCommon: '普通路由', + paramsDynamic: '動態路由', + paramsCommonDetails: '普通路由詳情', + paramsDynamicDetails: '動態路由詳情', + chartIndex: '大資料圖表', + visualizingIndex: '數據視覺化', + visualizingLinkDemo1: '數據視覺化演示1', + visualizingLinkDemo2: '數據視覺化演示2', + personal: '個人中心', + tools: '工具類集合', + layoutLinkView: '外鏈', + layoutIframeViewOne: '内嵌 iframe1', + layoutIframeViewTwo: '内嵌 iframe2', + }, + staticRoutes: { + signIn: '登入', + notFound: '找不到此頁面', + noPower: '沒有許可權', + }, + user: { + title0: '組件大小', + title1: '語言切換', + title2: '選單蒐索', + title3: '佈局配寘', + title4: '消息', + title5: '開全屏', + title6: '關全屏', + dropdownLarge: '大型', + dropdownDefault: '默認', + dropdownSmall: '小型', + dropdown1: '首頁', + dropdown2: '個人中心', + dropdown3: '404', + dropdown4: '401', + dropdown5: '登出', + dropdown6: '程式碼倉庫', + searchPlaceholder: '選單蒐索:支援中文、路由路徑', + newTitle: '通知', + newBtn: '全部已讀', + newGo: '前往通知中心', + newDesc: '暫無通知', + logOutTitle: '提示', + logOutMessage: '此操作將登出,是否繼續?', + logOutConfirm: '確定', + logOutCancel: '取消', + logOutExit: '退出中', + }, + tagsView: { + refresh: '重繪', + close: '關閉', + closeOther: '關閉其它', + closeAll: '全部關閉', + fullscreen: '當前頁全屏', + closeFullscreen: '關閉全屏', + }, + notFound: { + foundTitle: '地址輸入錯誤,請重新輸入地址~', + foundMsg: '您可以先檢查網址,然後重新輸入或給我們迴響問題。', + foundBtn: '返回首頁', + }, + noAccess: { + accessTitle: '您未被授權,沒有操作許可權~', + accessMsg: '聯繫方式:加QQ群探討665452019', + accessBtn: '重新授權', + }, + layout: { + primary: '主題顏色', + configTitle: '佈局配寘', + oneTitle: '全域主題', + twoTopTitle: '頂欄設定', + twoMenuTitle: '選單設定', + twoColumnsTitle: '分欄設定', + twoTopBar: '頂欄背景', + twoTopBarColor: '頂欄默認字體顏色', + twoIsTopBarColorGradual: '頂欄背景漸變', + twoMenuBar: '選單背景', + twoMenuBarColor: '選單默認字體顏色', + twoMenuBarActiveColor: '選單高亮背景色', + twoIsMenuBarColorGradual: '選單背景漸變', + twoColumnsMenuBar: '分欄選單背景', + twoColumnsMenuBarColor: '分欄選單默認字體顏色', + twoIsColumnsMenuBarColorGradual: '分欄選單背景漸變', + twoIsColumnsMenuHoverPreload: '分欄選單滑鼠懸停預加載', + threeTitle: '介面設定', + threeIsCollapse: '選單水准折疊', + threeIsUniqueOpened: '選單手風琴', + threeIsFixedHeader: '固定 Header', + threeIsClassicSplitMenu: '經典佈局分割選單', + threeIsLockScreen: '開啟鎖屏', + threeLockScreenTime: '自動鎖屏(s/秒)', + fourTitle: '介面顯示', + fourIsShowLogo: '側邊欄 Logo', + fourIsBreadcrumb: '開啟麵包屑', + fourIsBreadcrumbIcon: '開啟麵包屑圖標', + fourIsTagsview: '開啟標籤頁', + fourIsTagsviewIcon: '開啟標籤頁圖標', + fourIsCacheTagsView: '開啟標籤頁緩存', + fourIsSortableTagsView: '開啟標籤頁拖拽', + fourIsShareTagsView: '開啟標籤頁共用', + fourIsFooter: '開啟 Footer', + fourIsGrayscale: '灰色模式', + fourIsInvert: '色弱模式', + fourIsDark: '深色模式', + fourIsWatermark: '開啟浮水印', + fourWatermarkText: '浮水印文案', + fiveTitle: '其它設定', + fiveTagsStyle: 'Tagsview 風格', + fiveAnimation: '主頁面切換動畫', + fiveColumnsAsideStyle: '分欄高亮風格', + fiveColumnsAsideLayout: '分欄佈局風格', + sixTitle: '佈局切換', + sixDefaults: '默認', + sixClassic: '經典', + sixTransverse: '橫向', + sixColumns: '分欄', + tipText: '點擊下方按鈕,複製佈局配寘去`src/stores/themeConfig.ts`中修改。', + copyText: '一鍵複製配寘', + resetText: '一鍵恢復默認', + copyTextSuccess: '複製成功!', + copyTextError: '複製失敗!', + }, + upgrade: { + title: '新版本陞級', + msg: '新版本來啦,馬上更新嘗鮮吧! 不用擔心,更新很快的哦!', + desc: '提示:更新會還原默認配寘', + btnOne: '殘忍拒絕', + btnTwo: '馬上更新', + btnTwoLoading: '更新中', + }, +} diff --git a/zhontai.ui.admin.vue3/src/i18n/pages/formI18n/en.ts b/zhontai.ui.admin.vue3/src/i18n/pages/formI18n/en.ts new file mode 100644 index 0000000..6989758 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/i18n/pages/formI18n/en.ts @@ -0,0 +1,13 @@ +// 定义内容 +export default { + formI18nLabel: { + name: 'name', + email: 'email', + autograph: 'autograph', + }, + formI18nPlaceholder: { + name: 'Please enter your name', + email: 'Please enter the users Department', + autograph: 'Please enter the login account name', + }, +} diff --git a/zhontai.ui.admin.vue3/src/i18n/pages/formI18n/zh-cn.ts b/zhontai.ui.admin.vue3/src/i18n/pages/formI18n/zh-cn.ts new file mode 100644 index 0000000..1818a19 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/i18n/pages/formI18n/zh-cn.ts @@ -0,0 +1,13 @@ +// 定义内容 +export default { + formI18nLabel: { + name: '姓名', + email: '用户归属部门', + autograph: '登陆账户名', + }, + formI18nPlaceholder: { + name: '请输入姓名', + email: '请输入用户归属部门', + autograph: '请输入登陆账户名', + }, +} diff --git a/zhontai.ui.admin.vue3/src/i18n/pages/formI18n/zh-tw.ts b/zhontai.ui.admin.vue3/src/i18n/pages/formI18n/zh-tw.ts new file mode 100644 index 0000000..61621fc --- /dev/null +++ b/zhontai.ui.admin.vue3/src/i18n/pages/formI18n/zh-tw.ts @@ -0,0 +1,13 @@ +// 定义内容 +export default { + formI18nLabel: { + name: '姓名', + email: '用戶歸屬部門', + autograph: '登入帳戶名', + }, + formI18nPlaceholder: { + name: '請輸入姓名', + email: '請輸入用戶歸屬部門', + autograph: '請輸入登入帳戶名', + }, +} diff --git a/zhontai.ui.admin.vue3/src/i18n/pages/login/en.ts b/zhontai.ui.admin.vue3/src/i18n/pages/login/en.ts new file mode 100644 index 0000000..f68e68c --- /dev/null +++ b/zhontai.ui.admin.vue3/src/i18n/pages/login/en.ts @@ -0,0 +1,37 @@ +// 定义内容 +export default { + label: { + one1: 'Account login', + two2: 'Mobile login', + two3: 'Email login', + }, + link: { + one3: 'Third party login', + two4: 'Links', + }, + account: { + accountPlaceholder1: 'Please input account', + accountPlaceholder2: 'Please input Password', + accountBtnText: 'Sign in', + }, + mobile: { + placeholder1: 'Please input mobile phone number', + placeholder2: 'Please enter the verification code', + codeText: 'Get code', + btnText: 'Sign in', + msgText: + 'Warm tip: it is recommended to use Google, Microsoft edge, version 79.0.1072.62 and above browsers, and 360 browser, please use speed mode', + }, + email: { + placeholder1: 'Please input email adress', + placeholder2: 'Please enter the verification code', + codeText: 'Get code', + btnText: 'Sign in', + msgText: + 'Warm tip: it is recommended to use Google, Microsoft edge, version 79.0.1072.62 and above browsers, and 360 browser, please use speed mode', + }, + scan: { + text: 'Open the mobile phone to scan and quickly log in / register', + }, + signInText: 'welcome back!', +} diff --git a/zhontai.ui.admin.vue3/src/i18n/pages/login/zh-cn.ts b/zhontai.ui.admin.vue3/src/i18n/pages/login/zh-cn.ts new file mode 100644 index 0000000..b7491ea --- /dev/null +++ b/zhontai.ui.admin.vue3/src/i18n/pages/login/zh-cn.ts @@ -0,0 +1,35 @@ +// 定义内容 +export default { + label: { + one1: '账号登录', + two2: '手机登录', + two3: '邮箱登录', + }, + link: { + one3: '第三方登录', + two4: '友情链接', + }, + account: { + accountPlaceholder1: '请输入账号', + accountPlaceholder2: '请输入密码', + accountBtnText: '登 录', + }, + mobile: { + placeholder1: '请输入手机号', + placeholder2: '请输入验证码', + codeText: '获取验证码', + btnText: '登 录', + msgText: '* 温馨提示:建议使用谷歌、Microsoft Edge,版本 79.0.1072.62 及以上浏览器,360浏览器请使用极速模式', + }, + email: { + placeholder1: '请输入邮箱地址', + placeholder2: '请输入验证码', + codeText: '获取验证码', + btnText: '登 录', + msgText: '* 温馨提示:建议使用谷歌、Microsoft Edge,版本 79.0.1072.62 及以上浏览器,360浏览器请使用极速模式', + }, + scan: { + text: '打开手机扫一扫,快速登录/注册', + }, + signInText: '欢迎回来!', +} diff --git a/zhontai.ui.admin.vue3/src/i18n/pages/login/zh-tw.ts b/zhontai.ui.admin.vue3/src/i18n/pages/login/zh-tw.ts new file mode 100644 index 0000000..8145935 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/i18n/pages/login/zh-tw.ts @@ -0,0 +1,35 @@ +// 定义内容 +export default { + label: { + one1: '賬號登錄', + two2: '手機號登錄', + two3: '郵箱登錄', + }, + link: { + one3: '協力廠商登入', + two4: '友情連結', + }, + account: { + accountPlaceholder1: '請輸入賬號', + accountPlaceholder2: '請輸入密碼', + accountBtnText: '登 錄', + }, + mobile: { + placeholder1: '請輸入手機號', + placeholder2: '請輸入驗證碼', + codeText: '獲取驗證碼', + btnText: '登 錄', + msgText: '* 溫馨提示:建議使用穀歌、Microsoft Edge,版本79.0.1072.62及以上瀏覽器,360瀏覽器請使用極速模式', + }, + email: { + placeholder1: '請輸入郵箱地址', + placeholder2: '請輸入驗證碼', + codeText: '獲取驗證碼', + btnText: '登入', + msgText: '* 溫馨提示:建議使用穀歌、Microsoft Edge,版本79.0.1072.62及以上瀏覽器,360瀏覽器請使用極速模式', + }, + scan: { + text: '打開手機掃一掃,快速登錄/注册', + }, + signInText: '歡迎回來!', +} diff --git a/zhontai.ui.admin.vue3/src/layout/component/aside.vue b/zhontai.ui.admin.vue3/src/layout/component/aside.vue new file mode 100644 index 0000000..919c2ca --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/component/aside.vue @@ -0,0 +1,167 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/layout/component/columnsAside.vue b/zhontai.ui.admin.vue3/src/layout/component/columnsAside.vue new file mode 100644 index 0000000..feaa5d5 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/component/columnsAside.vue @@ -0,0 +1,356 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/component/header.vue b/zhontai.ui.admin.vue3/src/layout/component/header.vue new file mode 100644 index 0000000..d54ce09 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/component/header.vue @@ -0,0 +1,18 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/layout/component/main.vue b/zhontai.ui.admin.vue3/src/layout/component/main.vue new file mode 100644 index 0000000..208a087 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/component/main.vue @@ -0,0 +1,65 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/layout/footer/index.vue b/zhontai.ui.admin.vue3/src/layout/footer/index.vue new file mode 100644 index 0000000..a21314e --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/footer/index.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/index.vue b/zhontai.ui.admin.vue3/src/layout/index.vue new file mode 100644 index 0000000..7aab785 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/index.vue @@ -0,0 +1,50 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/layout/lockScreen/index.vue b/zhontai.ui.admin.vue3/src/layout/lockScreen/index.vue new file mode 100644 index 0000000..919ebbf --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/lockScreen/index.vue @@ -0,0 +1,353 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/logo/index.vue b/zhontai.ui.admin.vue3/src/layout/logo/index.vue new file mode 100644 index 0000000..7b8864a --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/logo/index.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/main/classic.vue b/zhontai.ui.admin.vue3/src/layout/main/classic.vue new file mode 100644 index 0000000..cb15c13 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/main/classic.vue @@ -0,0 +1,73 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/layout/main/columns.vue b/zhontai.ui.admin.vue3/src/layout/main/columns.vue new file mode 100644 index 0000000..87659b9 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/main/columns.vue @@ -0,0 +1,73 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/layout/main/defaults.vue b/zhontai.ui.admin.vue3/src/layout/main/defaults.vue new file mode 100644 index 0000000..99416c1 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/main/defaults.vue @@ -0,0 +1,73 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/layout/main/transverse.vue b/zhontai.ui.admin.vue3/src/layout/main/transverse.vue new file mode 100644 index 0000000..76203a7 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/main/transverse.vue @@ -0,0 +1,60 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/layout/navBars/index.vue b/zhontai.ui.admin.vue3/src/layout/navBars/index.vue new file mode 100644 index 0000000..7f3f2fd --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navBars/index.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/navBars/tagsView/contextmenu.vue b/zhontai.ui.admin.vue3/src/layout/navBars/tagsView/contextmenu.vue new file mode 100644 index 0000000..b1585be --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navBars/tagsView/contextmenu.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/navBars/tagsView/tagsView.vue b/zhontai.ui.admin.vue3/src/layout/navBars/tagsView/tagsView.vue new file mode 100644 index 0000000..5e0ea11 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navBars/tagsView/tagsView.vue @@ -0,0 +1,751 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/navBars/topBar/breadcrumb.vue b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/breadcrumb.vue new file mode 100644 index 0000000..647561e --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/breadcrumb.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/navBars/topBar/closeFull.vue b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/closeFull.vue new file mode 100644 index 0000000..609be66 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/closeFull.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/navBars/topBar/globalSearch.vue b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/globalSearch.vue new file mode 100644 index 0000000..25bd392 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/globalSearch.vue @@ -0,0 +1,629 @@ + + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/layout/navBars/topBar/index.vue b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/index.vue new file mode 100644 index 0000000..112bebf --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/index.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/navBars/topBar/msg.vue b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/msg.vue new file mode 100644 index 0000000..fb04dc8 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/msg.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/navBars/topBar/search.vue b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/search.vue new file mode 100644 index 0000000..87b755e --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/search.vue @@ -0,0 +1,1147 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/navBars/topBar/setings.vue b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/setings.vue new file mode 100644 index 0000000..5c2df1e --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/setings.vue @@ -0,0 +1,909 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/navBars/topBar/user.vue b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/user.vue new file mode 100644 index 0000000..811b896 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/user.vue @@ -0,0 +1,291 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/navBars/topBar/userNews.vue b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/userNews.vue new file mode 100644 index 0000000..442b674 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navBars/topBar/userNews.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/navMenu/horizontal.vue b/zhontai.ui.admin.vue3/src/layout/navMenu/horizontal.vue new file mode 100644 index 0000000..86604b0 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navMenu/horizontal.vue @@ -0,0 +1,568 @@ + + + + + + +// 全局样式(不使用 scoped),确保弹出菜单正确定位 + diff --git a/zhontai.ui.admin.vue3/src/layout/navMenu/subItem.vue b/zhontai.ui.admin.vue3/src/layout/navMenu/subItem.vue new file mode 100644 index 0000000..595eec5 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navMenu/subItem.vue @@ -0,0 +1,406 @@ + + + + + + diff --git a/zhontai.ui.admin.vue3/src/layout/navMenu/vertical.vue b/zhontai.ui.admin.vue3/src/layout/navMenu/vertical.vue new file mode 100644 index 0000000..be7f428 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/navMenu/vertical.vue @@ -0,0 +1,100 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/layout/routerView/iframes.vue b/zhontai.ui.admin.vue3/src/layout/routerView/iframes.vue new file mode 100644 index 0000000..7c6270e --- /dev/null +++ b/zhontai.ui.admin.vue3/src/layout/routerView/iframes.vue @@ -0,0 +1,101 @@ + + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/views/error/401.vue b/zhontai.ui.admin.vue3/src/views/error/401.vue new file mode 100644 index 0000000..f5d2380 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/views/error/401.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/views/error/404.vue b/zhontai.ui.admin.vue3/src/views/error/404.vue new file mode 100644 index 0000000..ce683ba --- /dev/null +++ b/zhontai.ui.admin.vue3/src/views/error/404.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/views/example/pages/tableRules/index.vue b/zhontai.ui.admin.vue3/src/views/example/pages/tableRules/index.vue new file mode 100644 index 0000000..0c9b910 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/views/example/pages/tableRules/index.vue @@ -0,0 +1,118 @@ + + + diff --git a/zhontai.ui.admin.vue3/src/views/feedback/index.vue b/zhontai.ui.admin.vue3/src/views/feedback/index.vue new file mode 100644 index 0000000..55f95a7 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/views/feedback/index.vue @@ -0,0 +1,1604 @@ + + + + + + diff --git a/zhontai.ui.admin.vue3/src/views/remote/index.vue b/zhontai.ui.admin.vue3/src/views/remote/index.vue new file mode 100644 index 0000000..0765419 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/views/remote/index.vue @@ -0,0 +1,708 @@ + + + + + diff --git a/zhontai.ui.admin.vue3/src/views/template/index.vue b/zhontai.ui.admin.vue3/src/views/template/index.vue new file mode 100644 index 0000000..48d9e3a --- /dev/null +++ b/zhontai.ui.admin.vue3/src/views/template/index.vue @@ -0,0 +1,1406 @@ + + + + + + diff --git a/zhontai.ui.admin.vue3/src/views/workbench/components/NotificationList.vue b/zhontai.ui.admin.vue3/src/views/workbench/components/NotificationList.vue new file mode 100644 index 0000000..510c675 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/views/workbench/components/NotificationList.vue @@ -0,0 +1,669 @@ + + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/views/workbench/components/msgDetail.vue b/zhontai.ui.admin.vue3/src/views/workbench/components/msgDetail.vue new file mode 100644 index 0000000..6990efd --- /dev/null +++ b/zhontai.ui.admin.vue3/src/views/workbench/components/msgDetail.vue @@ -0,0 +1,264 @@ + + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/src/views/workbench/index.vue b/zhontai.ui.admin.vue3/src/views/workbench/index.vue new file mode 100644 index 0000000..76b8722 --- /dev/null +++ b/zhontai.ui.admin.vue3/src/views/workbench/index.vue @@ -0,0 +1,3535 @@ + + + + + \ No newline at end of file diff --git a/zhontai.ui.admin.vue3/tsconfig.json b/zhontai.ui.admin.vue3/tsconfig.json new file mode 100644 index 0000000..ee192f6 --- /dev/null +++ b/zhontai.ui.admin.vue3/tsconfig.json @@ -0,0 +1,74 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "esnext" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, + "module": "esnext" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, + "lib": ["esnext", "dom", "dom.iterable", "scripthost"] /* Specify library files to be included in the compilation. */, + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + "jsx": "preserve" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */, + // "declaration": true /* Generates corresponding '.d.ts' file. */, + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + // "outDir": "./", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true /* Import emit helpers from 'tslib'. */, + // "downlevelIteration": true /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */, + "isolatedModules": true /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */, + + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + + /* Module Resolution Options */ + "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, + "baseUrl": "." /* Base directory to resolve non-absolute module names. */, + "paths": { + "/@/*": ["src/*"] + } /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */, + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + "types": ["vite/client"] /* Type declaration files to be included in compilation. */, + "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + "experimentalDecorators": true /* Enables experimental support for ES7 decorators. */, + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true /* Skip type checking of declaration files. */, + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + }, + "include": ["src/**/*.ts", "src/**/*.vue", "src/**/*.tsx", "src/**/*.d.ts", "vite.config.ts"], // **Represents any directory, and * represents any file. Indicates that all files in the src directory will be compiled + "exclude": ["node_modules", "dist", "bin", "gen"] // Indicates the file directory that does not need to be compiled +} diff --git a/zhontai.ui.admin.vue3/vite.config.ts b/zhontai.ui.admin.vue3/vite.config.ts new file mode 100644 index 0000000..57ed296 --- /dev/null +++ b/zhontai.ui.admin.vue3/vite.config.ts @@ -0,0 +1,83 @@ +import vue from '@vitejs/plugin-vue' +import { resolve } from 'path' +import { defineConfig, ConfigEnv } from 'vite' +import compression from 'vite-plugin-compression' +import vueSetupExtend from 'vite-plugin-vue-setup-extend' +import { loadEnv } from '/@/utils/vite' +import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' + +const pathResolve = (dir: string): any => { + return resolve(__dirname, '.', dir) +} + +const alias: Record = { + '/@': pathResolve('./src/'), + 'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js', +} + +const viteConfig = defineConfig(({ mode, command }: ConfigEnv) => { + const env = loadEnv(mode) + return { + plugins: [ + vue(), + vueSetupExtend(), + compression({ + threshold: 5121, + disable: !env.VITE_COMPRESSION, + deleteOriginFile: false, + }), + createSvgIconsPlugin({ + iconDirs: [pathResolve('src/assets/icons')], + symbolId: 'icon-[dir]-[name]', + inject: 'body-last', + customDomId: '__svg__icons__dom__', + }), + ], + root: process.cwd(), + resolve: { alias }, + base: command === 'serve' ? './' : env.VITE_PUBLIC_PATH, + hmr: true, + optimizeDeps: { exclude: ['vue-demi'] }, + server: { + host: '0.0.0.0', + port: env.VITE_PORT, + open: env.VITE_OPEN, + proxy: { + '/gitee': { + target: 'https://gitee.com', + ws: true, + changeOrigin: true, + rewrite: (path) => path.replace(/^\/gitee/, ''), + }, + }, + }, + build: { + outDir: 'dist', + chunkSizeWarningLimit: 1500, + sourcemap: false, + rollupOptions: { + output: { + chunkFileNames: 'assets/js/[name]-[hash].js', + entryFileNames: 'assets/js/[name]-[hash].js', + assetFileNames: 'assets/[ext]/[name]-[hash].[ext]', + manualChunks(id) { + if (id.includes('node_modules')) { + return id.toString().match(/\/node_modules\/(?!.pnpm)(?[^\/]*)\//)?.groups!.moduleName ?? 'vender' + } + }, + }, + }, + }, + //https://sass-lang.com/documentation/breaking-changes/legacy-js-api + css: { preprocessorOptions: { css: { charset: false }, scss: { api: 'modern' } } }, + define: { + __VUE_I18N_LEGACY_API__: JSON.stringify(false), + __VUE_I18N_FULL_INSTALL__: JSON.stringify(false), + __INTLIFY_PROD_DEVTOOLS__: JSON.stringify(false), + __NEXT_VERSION__: JSON.stringify(process.env.npm_package_version), + __NEXT_NAME__: JSON.stringify(process.env.npm_package_name), + }, + } +}) + +export default viteConfig